(Emacs)+auto run command after save hook
Useful macro for running commands on certain buffers after save. Check the specific heading for details.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
#+title: Emacs configuration
|
#+title: Emacs configuration
|
||||||
#+author: Oreodave
|
#+author: Aryadev Chavali
|
||||||
#+description: My new Emacs configuration
|
#+description: My new Emacs configuration
|
||||||
#+property: header-args:emacs-lisp :tangle config.el :comments link
|
#+property: header-args:emacs-lisp :tangle config.el :comments link
|
||||||
#+options: toc:nil
|
#+options: toc:nil
|
||||||
@@ -182,6 +182,35 @@ the buffer with name buf-name and creation function buf-create."
|
|||||||
(display-buffer buffer)
|
(display-buffer buffer)
|
||||||
(select-window (get-buffer-window buffer)))))))
|
(select-window (get-buffer-window buffer)))))))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
** Auto-run command after-save-hook
|
||||||
|
Macro that defines functionality that runs after a buffer save.
|
||||||
|
Requires a list of conditions (so it doesn't happen FOR ALL saved
|
||||||
|
buffers) and a function to run if the buffer satisfies the condition.
|
||||||
|
Then automatically adds it to the ~after-save-hook~.
|
||||||
|
|
||||||
|
On a Luke Smith video on YouTube, I saw a vim feature which I really
|
||||||
|
liked. He uses it in his DWM videos, but it's essentially an
|
||||||
|
"autocmd" call that, upon saving a certain file with vim, will run
|
||||||
|
a shell command (such as =make= or =pdflatex=).
|
||||||
|
|
||||||
|
It's arbitrary to program this functionality in Emacs. This macro
|
||||||
|
essentially performs the same task. In particular if you use
|
||||||
|
=start-process-shell-command= in the =to-run= function then you also
|
||||||
|
get a generated buffer of output from the command, useful for checking
|
||||||
|
errors and general messages. Better than vim, eh?
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package simple
|
||||||
|
:straight nil
|
||||||
|
:config
|
||||||
|
(defmacro +dx/create-auto-save (func-name conditions &rest to-run)
|
||||||
|
`(progn
|
||||||
|
(defun ,func-name ()
|
||||||
|
(interactive)
|
||||||
|
(when ,conditions
|
||||||
|
,@to-run))
|
||||||
|
(add-hook 'after-save-hook (quote ,func-name)))))
|
||||||
|
#+end_src
|
||||||
** Power function
|
** Power function
|
||||||
Basic, tail recursive algorithm for calculating powers.
|
Basic, tail recursive algorithm for calculating powers.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
@@ -781,6 +810,8 @@ when expansion is a function."
|
|||||||
,ABBREV
|
,ABBREV
|
||||||
""
|
""
|
||||||
(proc (insert ,EXPANSION))))
|
(proc (insert ,EXPANSION))))
|
||||||
|
|
||||||
|
(setq save-abbrevs nil)
|
||||||
:config
|
:config
|
||||||
(+autotyping/deff-abbrev
|
(+autotyping/deff-abbrev
|
||||||
global-abbrev-table
|
global-abbrev-table
|
||||||
@@ -1142,7 +1173,7 @@ If I want some cool emoticons to seem hip on my README, I'll use this.
|
|||||||
:defer t
|
:defer t
|
||||||
:general
|
:general
|
||||||
(leader
|
(leader
|
||||||
"te" #'unicode-emoticons-mode))
|
"tE" #'unicode-emoticons-mode))
|
||||||
#+end_src
|
#+end_src
|
||||||
** (Rip)grep
|
** (Rip)grep
|
||||||
Grep is likely one of the most important programs ever invented; a
|
Grep is likely one of the most important programs ever invented; a
|
||||||
@@ -2136,6 +2167,23 @@ learnt the basics of org).
|
|||||||
preview-scale 1.4))))
|
preview-scale 1.4))))
|
||||||
(margin . "0 -0.35em")))))
|
(margin . "0 -0.35em")))))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
*** Org on save
|
||||||
|
If ~+org/compile-to-pdf-on-save-p~ is non-nil, then compile to \(\LaTeX\)
|
||||||
|
and run an async process to compile it to a pdf. Doesn't make Emacs
|
||||||
|
hang (like ~org-latex-export-to-pdf~) and doesn't randomly crash (like
|
||||||
|
the async handler for org-export).
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package org
|
||||||
|
:config
|
||||||
|
(defvar +org/compile-to-pdf-on-save-p
|
||||||
|
nil
|
||||||
|
"Non-nil to activate compile functionality.")
|
||||||
|
(+dx/create-auto-save
|
||||||
|
+org/compile-to-pdf-on-save-f
|
||||||
|
(and (eq major-mode 'org-mode) +org/compile-to-pdf-on-save-p)
|
||||||
|
(start-process-shell-command "" "*pdflatex*" (concat "pdflatex -shell-escape "
|
||||||
|
(org-latex-export-to-latex)))))
|
||||||
|
#+end_src
|
||||||
*** Evil Org
|
*** Evil Org
|
||||||
Evil org for some nice bindings.
|
Evil org for some nice bindings.
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
|
|||||||
Reference in New Issue
Block a user