[emacs] call compile after async tangle, auto-close *compilation*
authorAmin Bandali <amin@gnu.org>
Thu, 30 Aug 2018 21:08:19 +0000 (17:08 -0400)
committerAmin Bandali <amin@gnu.org>
Thu, 30 Aug 2018 21:08:19 +0000 (17:08 -0400)
close *compilation* buffer on successful compile

init.org

index 81c652e..8bce20c 100644 (file)
--- a/init.org
+++ b/init.org
@@ -679,6 +679,9 @@ file.
   (defvar amin-show-async-tangle-time nil
     "Show the time spent tangling the file.")
 
+  (defvar amin-async-tangle-post-compile "make ti"
+    "If non-nil, pass to `compile' after successful tangle.")
+
   (defun amin/async-babel-tangle ()
     "Tangle org file asynchronously."
     (interactive)
@@ -693,18 +696,31 @@ file.
        (unless amin-show-async-tangle-results
          `(lambda (result)
             (if result
-                (message "Tangled %s%s"
-                         ,file-nodir
-                         (if amin-show-async-tangle-time
-                             (format " (%.3fs)"
-                                     (float-time (time-subtract (current-time)
-                                                                ',file-tangle-start-time)))
-                           ""))
+                (progn
+                  (message "Tangled %s%s"
+                           ,file-nodir
+                           (if amin-show-async-tangle-time
+                               (format " (%.3fs)"
+                                       (float-time (time-subtract (current-time)
+                                                                  ',file-tangle-start-time)))
+                             ""))
+                  (when amin-async-tangle-post-compile
+                    (compile amin-async-tangle-post-compile)))
               (message "Tangling %s failed" ,file-nodir))))))))
 
 (add-to-list
  'safe-local-variable-values
  '(eval add-hook 'after-save-hook #'amin/async-babel-tangle 'append 'local))
+
+(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)))
 #+end_src
 
 *** [[https://magit.vc/][Magit]]