[emacs] don’t display *compilation* on successful builds
authorAmin Bandali <bandali@gnu.org>
Sat, 22 Dec 2018 05:45:03 +0000 (00:45 -0500)
committerAmin Bandali <bandali@gnu.org>
Sat, 22 Dec 2018 05:46:26 +0000 (00:46 -0500)
init.org

index 787d386..d7af98c 100644 (file)
--- a/init.org
+++ b/init.org
@@ -650,18 +650,35 @@ Enable =winner-mode=.
 (winner-mode 1)
 #+end_src
 
 (winner-mode 1)
 #+end_src
 
-*** Close =*compilation*= on success
-
-#+begin_src emacs-lisp
-(setq compilation-exit-message-function
-      (lambda (status code msg)
-        "Close the compilation window if successful."
-        ;; if M-x compile exits with 0
-         (when (and (eq status 'exit) (zerop code))
-           (bury-buffer)
-           (delete-window (get-buffer-window (get-buffer "*compilation*"))))
-         ;; return the result of compilation-exit-message-function
-         (cons msg code)))
+*** Don’t display =*compilation*= on success
+
+From https://stackoverflow.com/a/17788551.
+
+#+begin_src emacs-lisp
+(defun amin--compilation-finish-function (buffer outstr)
+  (unless (string-match "finished" outstr)
+    (switch-to-buffer-other-window buffer))
+  t)
+
+(setq compilation-finish-functions #'amin--compilation-finish-function)
+
+(require 'cl)
+
+(defadvice compilation-start
+    (around inhibit-display
+            (command &optional mode name-function highlight-regexp))
+  (if (not (string-match "^\\(find\\|grep\\)" command))
+      (flet ((display-buffer)
+             (set-window-point)
+             (goto-char))
+        (fset 'display-buffer   'ignore)
+        (fset 'goto-char        'ignore)
+        (fset 'set-window-point 'ignore)
+        (save-window-excursion
+          ad-do-it))
+    ad-do-it))
+
+(ad-activate 'compilation-start)
 #+end_src
 
 *** Search for non-ASCII characters
 #+end_src
 
 *** Search for non-ASCII characters