X-Git-Url: https://git.shemshak.org/gitweb.cgi/~bandali/configs/blobdiff_plain/6ef44cb72c995c9a59b2fa2b7f3b14173628ae99..f7fddd5fc4d2c8e3314d1158076d6b5386c46d86:/init.org diff --git a/init.org b/init.org index 058401a..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 @@ -766,9 +825,16 @@ There's no way I could top that, so I won't attempt to. (eshell-life-is-too-much) (delete-char arg))) + (defun amin/eshell-clear () + (interactive) + (let ((inhibit-read-only t)) + (erase-buffer)) + (eshell-send-input)) + (defun amin|eshell-setup () (bind-keys :map eshell-mode-map - ("C-d" . amin/eshell-quit-or-delete-char))) + ("C-d" . amin/eshell-quit-or-delete-char) + ("C-l" . amin/eshell-clear))) :hook (eshell-mode . amin|eshell-setup)) #+end_src @@ -1143,7 +1209,9 @@ Emacs package that displays available keybindings in popup ("C-c b K" . crux-kill-other-buffers) ("C-c f c" . crux-copy-file-preserve-attributes) ("C-c f D" . crux-delete-file-and-buffer) - ("C-c f R" . crux-rename-file-and-buffer))) + ("C-c f R" . crux-rename-file-and-buffer) + ("C-S-j" . crux-top-join-line) + ("C-c j" . crux-top-join-line))) #+end_src ** [[https://github.com/alezost/mwim.el][mwim]] @@ -1189,6 +1257,7 @@ Emacs package that displays available keybindings in popup '(("*Help*" :align right :select t :size 0.5) ("\\`\\*helm.*?\\*\\'" :regexp t :align t) ((compilation-mode "\\`\\*magit-diff: .*?\\'") :regexp t :noselect t) + ("*magit-dispatch-popup*" :align bottom) ((inferior-scheme-mode "*shell*" "*eshell*") :popup t)) shackle-default-rule '(:select t) shackle-default-size 0.4 @@ -1467,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: