aboutsummaryrefslogtreecommitdiff
path: root/modules/org-babel-config.el
blob: 821403a0d20e385d38ccb15440003786e7d367fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
;;; org-babel-config.el --- Org Babel/Tempo Config -*- lexical-binding: t; coding: utf-8; -*-
;; author: Craig Jennings <c@cjennings.net>

;;; Commentary:
;;
;; Layer: 3 (Domain Workflow).
;; Category: D/P.
;; Load shape: eager.
;; Eager reason: none necessary; Babel language setup belongs after Org loads
;;   (after-load deferral candidate).
;; Top-level side effects: one global key, package configuration via use-package.
;; Runtime requires: none (configures packages via use-package).
;; Direct test load: yes.
;;
;; All Org-Babel and Org-Tempo Packages, Settings, and Languages.

;;; Code:

;; ------------------------------- Org Babel Core ------------------------------
;; general org babel settings

(use-package ob-core
  :ensure nil ;; built-in
  :after org
  :defer .5
  :hook
  (org-babel-after-execute-hook . org-redisplay-inline-images)   ;; for seeing inline dotgraph images
  :config
  (setq org-src-fontify-natively t)                                     ;; fontify the code in blocks
  (setq org-src-tab-acts-natively t)                                    ;; tabs act like in language major mode buffer
  (setq org-src-window-setup 'current-window)                           ;; don't split window when source editing wih C-c '
  (setq org-confirm-babel-evaluate t)                                   ;; confirm before running babel; toggle with C-; k
  (setq org-babel-default-header-args
        (cons '(:tangle . "yes")
              (assq-delete-all :tangle org-babel-default-header-args)))) ;; default header args for babel


;; ------------------- Babel Execution Confirmation Toggle -------------------
;; org-babel verifies before each execution

(defun cj/org-babel-toggle-confirm ()
  "Toggle whether Org babel blocks are confirmed before evaluation.
`org-confirm-babel-evaluate' defaults to t (confirm), which is the safe default
for files from cloned repos, web clips, or downloads.  Flip it off for the
session when working in trusted files, and back on when done."
  (interactive)
  (setq org-confirm-babel-evaluate (not org-confirm-babel-evaluate))
  (message "Babel evaluation confirmation %s"
           (if org-confirm-babel-evaluate "ON" "OFF")))

(keymap-global-set "C-; k" #'cj/org-babel-toggle-confirm)


;; ---------------------------- Org Babel Languages ----------------------------
;; create executable code blocks in a language within org-mode

(use-package ob-awk
  :ensure nil ;; built-in
  :defer .5
  :after ob-core
  :commands
  (org-babel-execute:awk
   org-babel-expand-body:awk))

(use-package ob-dot
  :ensure nil ;; built-in
  :defer .5
  :after ob-core
  :commands
  (org-babel-execute:dot
   org-babel-expand-body:dot)
  :config
  ;; https://stackoverflow.com/questions/16770868/org-babel-doesnt-load-graphviz-editing-mode-for-dot-sources
  (add-to-list 'org-src-lang-modes (quote ("dot" . graphviz-dot))))

(use-package ob-emacs-lisp
  :ensure nil ;; built-in
  :defer .5
  :after ob-core
  :commands
  (org-babel-execute:emacs-lisp
   org-babel-expand-body:emacs-lisp))

(use-package ob-latex
  :ensure nil ;; built-in
  :defer .5
  :after ob-core
  :commands
  (org-babel-execute:latex
   org-babel-expand-body:latex))

(use-package ob-python
  :ensure nil ;; built-in
  :defer .5
  :after ob-core
  :commands
  (org-babel-execute:python
   org-babel-variable-assignments:python
   org-babel-load-session:python
   org-babel-prep-session:python))

(use-package ob-scheme
  :ensure nil ;; built-in
  :defer .5
  :after ob-core
  :commands
  (org-babel-execute:scheme
   org-babel-expand-body:scheme))

;; allows for shell, bash, and fish
(use-package ob-shell
  :ensure nil ;; built-in
  :defer .5
  :after ob-core
  :commands
  (org-babel-execute:shell
   org-babel-prep-session:shell
   org-babel-load-session:shell
   org-babel-variable-assignments:shell))

(use-package ob-sed
  :ensure nil ;; built-in
  :defer .5
  :after ob-core
  :commands (org-babel-execute:sed))

;; --------------------------------- Org-Tempo ---------------------------------
;; expands snippets to babel code blocks using templates

(use-package org-tempo
  :defer .5
  :ensure nil ;; built-in
  :after ob-core
  :config
  (add-to-list 'org-structure-template-alist '("awk"      . "src awk"))
  (add-to-list 'org-structure-template-alist '("sed"      . "src sed"))
  (add-to-list 'org-structure-template-alist '("bash"     . "src bash"))
  (add-to-list 'org-structure-template-alist '("zsh"      . "src zsh"))
  (add-to-list 'org-structure-template-alist '("dot"      . "src dot :file temp.png :cmdline -Kdot -Tpng"))
  (add-to-list 'org-structure-template-alist '("el"       . "src emacs-lisp"))
  (add-to-list 'org-structure-template-alist '("js"       . "src javascript"))
  (add-to-list 'org-structure-template-alist '("java"     . "src java"))
  (add-to-list 'org-structure-template-alist '("json"     . "src json"))
  (add-to-list 'org-structure-template-alist '("latex"    . "src latex"))
  (add-to-list 'org-structure-template-alist '("py"       . "src python"))
  (add-to-list 'org-structure-template-alist '("scheme"   . "src scheme"))
  (add-to-list 'org-structure-template-alist '("shell"    . "src shell"))
  (add-to-list 'org-structure-template-alist '("yaml"     . "src yaml"))
  ;; miscellaneous
  (add-to-list 'org-structure-template-alist '("example"  . "example"))
  (add-to-list 'org-structure-template-alist '("quote"    . "quote"))
  (add-to-list 'org-structure-template-alist '("response" . "response"))
  (add-to-list 'org-structure-template-alist '("output"   . "output")))
;; <cj is provided by yasnippet at snippets/fundamental-mode/cj-comment-block
;; so the marker works in every buffer, not just org-mode.

;; requires ob-racket, not yet in repositories
;;   (add-to-list 'org-structure-template-alist '("sicp"   . "src racket :lang sicp"))

;; drop Org’s default footnote list at the end
(setq org-html-footnote-separator "")

(provide 'org-babel-config)
;;; org-babel-config.el ends here.