-
-
Notifications
You must be signed in to change notification settings - Fork 113
Org mode block templates
Justin Kaipada edited this page Jan 8, 2019
·
15 revisions
This is an expansion of the hydra from org-mode block templates in Hydra. Instead of using skeletons, different programming language src blocks can have their own keys in this hydra. The few below are just examples. This approach could be expanded further by adding interactive lisp commands to fill in input and output strings.
(defhydra hydra-org-template (:color blue :hint nil)
"
_c_enter _q_uote _e_macs-lisp _L_aTeX:
_l_atex _E_xample _p_erl _i_ndex:
_a_scii _v_erse _P_erl tangled _I_NCLUDE:
_s_rc _n_ote plant_u_ml _H_TML:
_h_tml ^ ^ ^ ^ _A_SCII:
"
("s" (hot-expand "<s"))
("E" (hot-expand "<e"))
("q" (hot-expand "<q"))
("v" (hot-expand "<v"))
("n" (hot-expand "<not"))
("c" (hot-expand "<c"))
("l" (hot-expand "<l"))
("h" (hot-expand "<h"))
("a" (hot-expand "<a"))
("L" (hot-expand "<L"))
("i" (hot-expand "<i"))
("e" (hot-expand "<s" "emacs-lisp"))
("p" (hot-expand "<s" "perl"))
("u" (hot-expand "<s" "plantuml :file CHANGE.png"))
("P" (hot-expand "<s" "perl" ":results output :exports both :shebang \"#!/usr/bin/env perl\"\n"))
("I" (hot-expand "<I"))
("H" (hot-expand "<H"))
("A" (hot-expand "<A"))
("<" self-insert-command "ins")
("o" nil "quit"))
(require 'org-tempo) ; Required from org 9 onwards for old template expansion
;; Reset the org-template expnsion system, this is need after upgrading to org 9 for some reason
(setq org-structure-template-alist (eval (car (get 'org-structure-template-alist 'standard-value))))
(defun hot-expand (str &optional mod header)
"Expand org template.
STR is a structure template string recognised by org like <s. MOD is a
string with additional parameters to add the begin line of the
structure element. HEADER string includes more parameters that are
prepended to the element after the #+HEADER: tag."
(let (text)
(when (region-active-p)
(setq text (buffer-substring (region-beginning) (region-end)))
(delete-region (region-beginning) (region-end))
(deactivate-mark))
(when header (insert "#+HEADER: " header) (forward-line))
(insert str)
(org-tempo-complete-tag)
(when mod (insert mod) (forward-line))
(when text (insert text))))
(define-key org-mode-map "<"
(lambda () (interactive)
(if (or (region-active-p) (looking-back "^"))
(hydra-org-template/body)
(self-insert-command 1))))
(eval-after-load "org"
'(cl-pushnew
'("not" . "note")
org-structure-template-alist))
- Binding-Styles
- Basics
- Verbosity
- Verbosity-Long-Short
- Conditional-Hydra
- defcustom
- Hydra-Colors
- internals
- Nesting-Hydras
- Prefix-map