 
 ;;;###autoload
 (defun +format-buffer ()
-  "Auto-format the source code in the current buffer."
-  (interactive)
+  "Format the source code in the current buffer.
+
+See `+format/buffer' for the interactive version of this function, and
+`+format|buffer' to use as a `before-save-hook' hook."
   (require 'format-all)
-  (cl-destructuring-bind (formatter mode-result) (format-all-probe)
+  (cl-destructuring-bind (formatter mode-result)
+      (format-all-probe)
     (unless formatter
       (error "Don't know how to format %S code" major-mode))
     (let ((f-function (gethash formatter format-all-format-table))
           (executable (format-all-formatter-executable formatter)))
       (cl-destructuring-bind (output errput first-diff)
-          (funcall f-function executable mode-result)
-        (prog1 (cl-case output
-                 ((nil) 'error)
-                 ((t) 'noop)
-                 (t (erase-buffer)
-                    (insert output)
-                    (list output errput first-diff)))
-          (with-current-buffer (get-buffer-create "*format-all-errors*")
-            (erase-buffer)
-            (unless (= 0 (length errput))
-              (insert errput)
-              (display-buffer (current-buffer)))))))))
+          (+format--with-copy-of-buffer f-function executable mode-result)
+        (unwind-protect
+            (cond ((null output) 'error)
+                  ((eq output t) 'noop)
+                  ((let ((tmpfile (make-temp-file "doom_format"))
+                         (patchbuf (get-buffer-create " *doom format patch*"))
+                         (coding-system-for-read 'utf-8)
+                         (coding-system-for-write 'utf-8))
+                     (unwind-protect
+                         (progn
+                           (with-current-buffer patchbuf (erase-buffer))
+                           (with-temp-file tmpfile (erase-buffer) (insert output))
+                           (if (zerop (call-process-region (point-min) (point-max) "diff" nil patchbuf nil "-n" "-" tmpfile))
+                               (message "Buffer is already formatted")
+                             (+format--apply-rcs-patch patchbuf)
+                             (message "Formatted buffer with %s" formatter)))
+                       (kill-buffer patchbuf)
+                       (delete-file tmpfile))
+                     (list output errput first-diff))))
+          (unless (= 0 (length errput))
+            (message "Formatter error output:\n%s" errput)))))))
 
 
 ;;

             ((error "Invalid rcs patch or internal error in +format--apply-rcs-patch")))))))
    (move-to-column column)))


;;
;; Public library


;;;###autoload
(defun +format/buffer ()
  "Format the source code in the current buffer."
  (interactive)
  (+format-buffer))

;;;###autoload
(defun +format/region (beg end)
