X-Git-Url: https://git.shemshak.org/~bandali/configs/blobdiff_plain/ba8fa06bd61b31db9868d19a25cd239e4cfd51e8..dc8184b76bc10716a8f7b442559bc03df453e967:/init.org diff --git a/init.org b/init.org index bc73a1d..3f3bc06 100644 --- a/init.org +++ b/init.org @@ -577,7 +577,8 @@ variable. #+begin_src emacs-lisp (setq backup-by-copying t - version-control t) + version-control t + delete-old-versions t) #+end_src *** Auto revert @@ -665,6 +666,64 @@ In short, my favourite way of life. :after (:any org notmuch)) #+end_src +**** asynchronous tangle + +=amin/async-babel-tangle= is a function closely inspired by [[https://github.com/dieggsy/dotfiles/tree/cc10edf7701958eff1cd94d4081da544d882a28c/emacs.d#dotfiles][dieggsy's +d/async-babel-tangle]] which uses [[https://github.com/jwiegley/emacs-async][async]] to asynchronously tangle an org +file. + +#+begin_src emacs-lisp +(after! org + (defvar amin-show-async-tangle-results nil + "Keep *emacs* async buffers around for later inspection.") + + (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) + (let* ((file-tangle-start-time (current-time)) + (file (buffer-file-name)) + (file-nodir (file-name-nondirectory file)) + (async-quiet-switch "-q")) + (async-start + `(lambda () + (require 'org) + (org-babel-tangle-file ,file)) + (unless amin-show-async-tangle-results + `(lambda (result) + (if result + (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]] #+begin_quote @@ -1477,3 +1536,8 @@ Display how long it took to load the init file. #+begin_src emacs-lisp :comments none ;;; init.el ends here #+end_src + +* COMMENT Local Variables :ARCHIVE: +# Local Variables: +# eval: (add-hook 'after-save-hook #'amin/async-babel-tangle 'append 'local) +# End: