lang/org: general refactor; split init into hooks

lang/org's initialization process is now split up into hooks on
org-load-hook. This approach is cleaner and easier to customize. I also
removed the escape binding in org-agenda-mode-map, as the popup system
makes it redundant.
This commit is contained in:
Henrik Lissner 2018-01-08 20:38:46 -05:00
parent b57c2e2264
commit 6853196017
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
6 changed files with 48 additions and 30 deletions

View file

@ -1,5 +1,7 @@
;;; lang/org/+attach.el -*- lexical-binding: t; -*- ;;; lang/org/+attach.el -*- lexical-binding: t; -*-
(add-hook 'org-load-hook #'+org|init-attach)
;; I believe Org's native attachment system is over-complicated and litters ;; I believe Org's native attachment system is over-complicated and litters
;; files with metadata I don't want. So I wrote my own, which: ;; files with metadata I don't want. So I wrote my own, which:
;; ;;
@ -60,7 +62,7 @@
:filter-return #'+org-attach*download-fullname)) :filter-return #'+org-attach*download-fullname))
;; ;;
(after! org (defun +org|init-attach ()
(setq org-attach-directory (expand-file-name +org-attach-dir +org-dir)) (setq org-attach-directory (expand-file-name +org-attach-dir +org-dir))
(push (car (last (split-string +org-attach-dir "/" t))) (push (car (last (split-string +org-attach-dir "/" t)))

View file

@ -1,5 +1,7 @@
;;; lang/org/+babel.el -*- lexical-binding: t; -*- ;;; lang/org/+babel.el -*- lexical-binding: t; -*-
(add-hook 'org-load-hook #'+org|init-babel)
(defvar +org-babel-languages (defvar +org-babel-languages
'(calc '(calc
css css
@ -23,7 +25,7 @@
"A list of org-babel languages to load.") "A list of org-babel languages to load.")
(after! org (defun +org|init-babel ()
(setq org-src-fontify-natively t ; make code pretty (setq org-src-fontify-natively t ; make code pretty
org-src-preserve-indentation t ; use native major-mode indentation org-src-preserve-indentation t ; use native major-mode indentation
org-src-tab-acts-natively t org-src-tab-acts-natively t

View file

@ -1,5 +1,7 @@
;;; lang/org/+capture.el -*- lexical-binding: t; -*- ;;; lang/org/+capture.el -*- lexical-binding: t; -*-
(add-hook 'org-load-hook #'+org|init-capture)
;; Sets up two `org-capture' workflows that I like: ;; Sets up two `org-capture' workflows that I like:
;; ;;
;; 1. The traditional way: invoking `org-capture' directly (or through a ;; 1. The traditional way: invoking `org-capture' directly (or through a
@ -26,11 +28,11 @@
"* %u %?\n%i" :prepend t :kill-buffer t))) "* %u %?\n%i" :prepend t :kill-buffer t)))
(after! org (defun +org|init-capture ()
(defvaralias 'org-default-notes-file '+org-default-notes-file) (defvaralias 'org-default-notes-file '+org-default-notes-file)
(setq org-default-notes-file (expand-file-name +org-default-notes-file +org-dir) (setq org-default-notes-file (expand-file-name +org-default-notes-file +org-dir)
+org-default-todo-file (expand-file-name +org-default-todo-file +org-dir)) +org-default-todo-file (expand-file-name +org-default-todo-file +org-dir))
(add-hook 'org-capture-after-finalize-hook #'+org-capture|cleanup-frame) (add-hook 'org-capture-after-finalize-hook #'+org-capture|cleanup-frame)

View file

@ -1,5 +1,7 @@
;;; lang/org/+export.el -*- lexical-binding: t; -*- ;;; lang/org/+export.el -*- lexical-binding: t; -*-
(add-hook 'org-load-hook #'+org|init-export)
;; I don't have any beef with org's built-in export system, but I do wish it ;; I don't have any beef with org's built-in export system, but I do wish it
;; would export to a central directory, rather than `default-directory'. This is ;; would export to a central directory, rather than `default-directory'. This is
;; because all my org files are usually in one place, and I want to be able to ;; because all my org files are usually in one place, and I want to be able to
@ -16,7 +18,7 @@
(parse-raw . t)))) (parse-raw . t))))
;; ;;
(after! org (defun +org|init-export ()
(add-transient-hook! #'org-export-dispatch (require 'ox-pandoc)) (add-transient-hook! #'org-export-dispatch (require 'ox-pandoc))
(setq org-export-directory (expand-file-name ".export" +org-dir) (setq org-export-directory (expand-file-name ".export" +org-dir)

View file

@ -1,5 +1,7 @@
;;; lang/org/+present.el -*- lexical-binding: t; -*- ;;; lang/org/+present.el -*- lexical-binding: t; -*-
(add-hook 'org-load-hook #'+org|init-present)
(defvar +org-present-text-scale 7 (defvar +org-present-text-scale 7
"The `text-scale-amount' for `org-tree-slide-mode'.") "The `text-scale-amount' for `org-tree-slide-mode'.")
@ -43,7 +45,7 @@
;; Bootstrap ;; Bootstrap
;; ;;
(after! org (defun +org|init-present ()
(require 'ox-reveal) (require 'ox-reveal)
(map! :map org-mode-map "<f8>" #'+org-present/start)) (map! :map org-mode-map "<f8>" #'+org-present/start))

View file

@ -33,16 +33,15 @@
;; Bootstrap ;; Bootstrap
;; ;;
(after! org (add-hook! 'org-load-hook
(defvaralias 'org-directory '+org-dir) #'(org-crypt-use-before-save-magic
+org|setup-ui
+org|setup-agenda
+org|setup-keybinds
+org|setup-hacks))
(org-crypt-use-before-save-magic) (add-hook! 'org-mode-hook
(+org-init-ui) #'(doom|disable-line-numbers ; org doesn't really need em
(+org-init-keybinds)
(+org-hacks))
(add-hook! org-mode
#'(doom|disable-line-numbers ; no line numbers
org-bullets-mode ; "prettier" bullets org-bullets-mode ; "prettier" bullets
org-indent-mode ; margin-based indentation org-indent-mode ; margin-based indentation
toc-org-enable ; auto-table of contents toc-org-enable ; auto-table of contents
@ -55,9 +54,15 @@
+org|show-paren-mode-compatibility +org|show-paren-mode-compatibility
)) ))
(after! org
(defvaralias 'org-directory '+org-dir))
(when (featurep 'org)
(run-hooks 'org-load-hook))
;; ;;
;; Config hooks ;; `org-mode' hooks
;; ;;
(defun +org|unfold-to-2nd-level-or-point () (defun +org|unfold-to-2nd-level-or-point ()
@ -106,18 +111,23 @@ unfold to point on startup."
;; ;;
(defun +org-init-ui () ;; `org-load' hooks
"Configures the UI for `org-mode'." ;;
(defun +org|setup-agenda ()
(setq-default (setq-default
org-adapt-indentation nil
org-agenda-dim-blocked-tasks nil org-agenda-dim-blocked-tasks nil
org-agenda-files (ignore-errors (directory-files +org-dir t "\\.org$" t)) org-agenda-files (ignore-errors (directory-files +org-dir t "\\.org$" t))
org-agenda-inhibit-startup t org-agenda-inhibit-startup t
org-agenda-skip-unavailable-files nil org-agenda-skip-unavailable-files t))
(defun +org|setup-ui ()
"Configures the UI for `org-mode'."
(setq-default
org-adapt-indentation nil
org-cycle-include-plain-lists t org-cycle-include-plain-lists t
org-cycle-separator-lines 1 org-cycle-separator-lines 1
org-entities-user '(("flat" "\\flat" nil "" "" "266D" "") ("sharp" "\\sharp" nil "" "" "266F" "")) org-entities-user '(("flat" "\\flat" nil "" "" "266D" "") ("sharp" "\\sharp" nil "" "" "266F" ""))
;; org-ellipsis " ... "
org-fontify-done-headline t org-fontify-done-headline t
org-fontify-quote-and-verse-blocks t org-fontify-quote-and-verse-blocks t
org-fontify-whole-heading-line t org-fontify-whole-heading-line t
@ -147,8 +157,8 @@ unfold to point on startup."
outline-blank-line t outline-blank-line t
;; LaTeX previews are too small and usually render to light backgrounds, so ;; LaTeX previews are too small and usually render to light backgrounds, so
;; this enlargens them and ensures their background (and foreground) match the ;; this enlargens them and ensures their background (and foreground) match
;; current theme. ;; the current theme.
org-preview-latex-image-directory (concat doom-cache-dir "org-latex/") org-preview-latex-image-directory (concat doom-cache-dir "org-latex/")
org-format-latex-options (plist-put org-format-latex-options :scale 1.5) org-format-latex-options (plist-put org-format-latex-options :scale 1.5)
org-format-latex-options org-format-latex-options
@ -167,7 +177,7 @@ unfold to point on startup."
'org-link 'org-link
'error)))) 'error))))
(defun +org-init-keybinds () (defun +org|setup-keybinds ()
"Sets up org-mode and evil keybindings. Tries to fix the idiosyncrasies "Sets up org-mode and evil keybindings. Tries to fix the idiosyncrasies
between the two." between the two."
(map! :map org-mode-map (map! :map org-mode-map
@ -195,6 +205,7 @@ between the two."
:ni [M-return] (λ! (+org/insert-item 'below)) :ni [M-return] (λ! (+org/insert-item 'below))
:ni [S-M-return] (λ! (+org/insert-item 'above)) :ni [S-M-return] (λ! (+org/insert-item 'above))
;; Fix vim motion keys
:m "]]" (λ! (org-forward-heading-same-level nil) (org-beginning-of-line)) :m "]]" (λ! (org-forward-heading-same-level nil) (org-beginning-of-line))
:m "[[" (λ! (org-backward-heading-same-level nil) (org-beginning-of-line)) :m "[[" (λ! (org-backward-heading-same-level nil) (org-beginning-of-line))
:m "]l" #'org-next-link :m "]l" #'org-next-link
@ -206,7 +217,6 @@ between the two."
:n ">" #'org-metaright :n ">" #'org-metaright
:v "<" (λ! (org-metaleft) (evil-visual-restore)) :v "<" (λ! (org-metaleft) (evil-visual-restore))
:v ">" (λ! (org-metaright) (evil-visual-restore)) :v ">" (λ! (org-metaright) (evil-visual-restore))
;; Fix code-folding keybindings ;; Fix code-folding keybindings
:n "za" #'+org/toggle-fold :n "za" #'+org/toggle-fold
:n "zA" #'org-shifttab :n "zA" #'org-shifttab
@ -220,18 +230,16 @@ between the two."
(:after org-agenda (:after org-agenda
(:map org-agenda-mode-map (:map org-agenda-mode-map
:e "<escape>" #'org-agenda-Quit
:e "m" #'org-agenda-month-view :e "m" #'org-agenda-month-view
:e "C-j" #'org-agenda-next-item :e "C-j" #'org-agenda-next-item
:e "C-k" #'org-agenda-previous-item :e "C-k" #'org-agenda-previous-item
:e "C-n" #'org-agenda-next-item :e "C-n" #'org-agenda-next-item
:e "C-p" #'org-agenda-previous-item)))) :e "C-p" #'org-agenda-previous-item))))
;; (defun +org|setup-hacks ()
(defun +org-hacks ()
"Getting org to behave." "Getting org to behave."
;; Don't open separate windows ;; Don't open separate windows
(push '(file . find-file) org-link-frame-setup) (map-put org-link-frame-setup 'file 'find-file)
;; Let OS decide what to do with files when opened ;; Let OS decide what to do with files when opened
(setq org-file-apps (setq org-file-apps
@ -252,4 +260,4 @@ between the two."
(cl-find (file-truename filename) org-agenda-files (cl-find (file-truename filename) org-agenda-files
:key #'file-truename :key #'file-truename
:test #'equal)) :test #'equal))
(add-to-list 'recentf-exclude #'+org-is-agenda-file))) (push #'+org-is-agenda-file recentf-exclude)))