lang/org: cleanup & refactor

This commit is contained in:
Henrik Lissner 2017-05-19 03:29:00 +02:00
parent 1f8c4ed383
commit 5add3c3805
8 changed files with 105 additions and 121 deletions

View file

@ -8,7 +8,7 @@
;; images specially. ;; images specially.
;; ;;
;; To clean up unreferenced attachments, call `doom/org-cleanup-attachments' ;; To clean up unreferenced attachments, call `doom/org-cleanup-attachments'
(add-hook '+org-init-hook '+org|init-attach t) (add-hook '+org-init-hook #'+org|init-attach t)
(defun +org|init-attach () (defun +org|init-attach ()
(setq org-attach-directory +org-attachment-dir) (setq org-attach-directory +org-attachment-dir)

View file

@ -1,6 +1,6 @@
;;; lang/org/+babel.el ;;; lang/org/+babel.el
(add-hook '+org-init-hook '+org|init-babel t) (add-hook '+org-init-hook #'+org|init-babel t)
(defun +org|init-babel () (defun +org|init-babel ()
(setq org-confirm-babel-evaluate nil ; you don't need my permission (setq org-confirm-babel-evaluate nil ; you don't need my permission
@ -35,11 +35,12 @@
))) )))
;; In a recent update, `org-babel-get-header' was removed from org-mode, which ;; In a recent update, `org-babel-get-header' was removed from org-mode, which
;; is something a fair number of babel plugins use. So until those plugins update... ;; is something a fair number of babel plugins use. So until those plugins
;; update...
(defun org-babel-get-header (params key &optional others) (defun org-babel-get-header (params key &optional others)
(delq nil (delq nil
(mapcar (mapcar
(lambda (p) (when (funcall (if others #'not #'identity) (eq (car p) key)) p)) (lambda (p) (if (funcall (if others #'not #'identity) (eq (car p) key)) p))
params))) params)))
;; I prefer C-c C-c for confirming over the default C-c ' ;; I prefer C-c C-c for confirming over the default C-c '
@ -48,4 +49,4 @@
;; I know the keybindings, no need for the header line ;; I know the keybindings, no need for the header line
(defun +org|src-mode-remove-header () (defun +org|src-mode-remove-header ()
(when header-line-format (setq header-line-format nil))) (when header-line-format (setq header-line-format nil)))
(add-hook 'org-src-mode-hook '+org|src-mode-remove-header)) (add-hook 'org-src-mode-hook #'+org|src-mode-remove-header))

View file

@ -10,7 +10,7 @@
;; anywhere I can call org-capture, like, say, from qutebrowser, vimperator, ;; anywhere I can call org-capture, like, say, from qutebrowser, vimperator,
;; dmenu or a global keybinding. ;; dmenu or a global keybinding.
(add-hook '+org-init-hook '+org|init-capture t) (add-hook '+org-init-hook #'+org|init-capture t)
(defun +org|init-capture () (defun +org|init-capture ()
"Set up a sane `org-capture' workflow." "Set up a sane `org-capture' workflow."
@ -58,5 +58,5 @@
(when (and (featurep 'persp-mode) persp-mode) (when (and (featurep 'persp-mode) persp-mode)
(+workspace/delete (+workspace-current-name))) (+workspace/delete (+workspace-current-name)))
(delete-frame))) (delete-frame)))
(add-hook 'org-capture-after-finalize-hook '+org|capture-finalize)) (add-hook 'org-capture-after-finalize-hook #'+org|capture-finalize))

View file

@ -2,7 +2,7 @@
;; My own, centralized exporting system as well. ;; My own, centralized exporting system as well.
(add-hook '+org-init-hook '+org|init-export t) (add-hook '+org-init-hook #'+org|init-export t)
(defun +org|init-export () (defun +org|init-export ()
(setq org-export-directory (expand-file-name ".export" +org-dir) (setq org-export-directory (expand-file-name ".export" +org-dir)

View file

@ -0,0 +1,10 @@
;;; lang/org/autoload/babel.el
;;;###autoload
(defun +org/edit-special-same-window ()
(interactive)
(let ((shackle-rules '(("^\\*Org Src" :align t :select t :regexp t :noesc t :same t))))
(call-interactively #'org-edit-special)
;; FIXME too tightly coupled with doom-buffer-mode
(when (fboundp 'doom-buffer-mode)
(doom-buffer-mode +1))))

View file

@ -1,19 +1,5 @@
;;; lang/org/autoload/org.el ;;; lang/org/autoload/org.el
(defun +org--get-context (types &optional context)
(let ((context (or context (org-element-context))))
(while (and context (not (memq (car context) types)))
(setq context (plist-get (cadr context) :parent)))
context))
(defun +org--get-types (context)
(let ((context (or context (org-element-context)))
types)
(while context
(push (car context) types)
(setq context (plist-get (cadr context) :parent)))
types))
;;;###autoload ;;;###autoload
(defun +org/indent () (defun +org/indent ()
"Indent the current item (header or item). Otherwise, forward to "Indent the current item (header or item). Otherwise, forward to
@ -25,7 +11,8 @@
(ignore-errors (org-demote))) (ignore-errors (org-demote)))
((org-in-src-block-p t) ((org-in-src-block-p t)
(doom/dumb-indent)) (doom/dumb-indent))
(t (call-interactively 'self-insert-command)))) (t
(call-interactively #'self-insert-command))))
;;;###autoload ;;;###autoload
(defun +org/indent-or-next-field-or-yas-expand () (defun +org/indent-or-next-field-or-yas-expand ()
@ -35,11 +22,11 @@ table field or c) run `yas-expand'."
(call-interactively (call-interactively
(cond ((and (bound-and-true-p yas-minor-mode) (cond ((and (bound-and-true-p yas-minor-mode)
(yas--templates-for-key-at-point)) (yas--templates-for-key-at-point))
'yas-expand) #'yas-expand)
((org-at-table-p) ((org-at-table-p)
'org-table-next-field) #'org-table-next-field)
(t (t
'+org/indent)))) #'+org/indent))))
;;;###autoload ;;;###autoload
(defun +org/dedent () (defun +org/dedent ()
@ -47,21 +34,26 @@ table field or c) run `yas-expand'."
`self-insert-command'." `self-insert-command'."
(interactive) (interactive)
(cond ((org-at-item-p) (cond ((org-at-item-p)
(let ((struct (if (org-region-active-p) (org-list-indent-item-generic
(save-excursion (goto-char (region-beginning)) -1 nil
(org-list-struct)) (save-excursion
(org-list-struct)))) (when (org-region-active-p)
(org-list-indent-item-generic -1 nil struct))) (goto-char (region-beginning)))
(org-list-struct))))
((org-at-heading-p) ((org-at-heading-p)
(ignore-errors (org-promote))) (ignore-errors (org-promote)))
(t (call-interactively 'self-insert-command)))) (t
(call-interactively #'self-insert-command))))
;;;###autoload ;;;###autoload
(defun +org/dedent-or-prev-field () (defun +org/dedent-or-prev-field ()
"Depending on the context either dedent the current item or go the previous "Depending on the context either dedent the current item or go the previous
table field." table field."
(interactive) (interactive)
(call-interactively (if (org-at-table-p) 'org-table-previous-field '+org/dedent))) (call-interactively
(if (org-at-table-p)
#'org-table-previous-field
#'+org/dedent)))
;;;###autoload ;;;###autoload
(defun +org/insert-item (direction) (defun +org/insert-item (direction)
@ -89,10 +81,12 @@ wrong places)."
(save-excursion (insert "\n"))))) (save-excursion (insert "\n")))))
(when (org-element-property :checkbox context) (when (org-element-property :checkbox context)
(insert "[ ] "))) (insert "[ ] ")))
((memq type '(table table-row)) ((memq type '(table table-row))
(cl-case direction (cl-case direction
('below (org-table-insert-row t)) ('below (org-table-insert-row t))
('above (+org/table-prepend-row-or-shift-up)))) ('above (+org/table-prepend-row-or-shift-up))))
((memq type '(headline inlinetask plain-list)) ((memq type '(headline inlinetask plain-list))
(let* ((subcontext (org-element-context)) (let* ((subcontext (org-element-context))
(level (save-excursion (level (save-excursion
@ -218,90 +212,3 @@ fragments, opening links, or refreshing images."
(if (org-before-first-heading-p) (if (org-before-first-heading-p)
(line-end-position) (line-end-position)
(save-excursion (org-end-of-subtree) (point)))))) (save-excursion (org-end-of-subtree) (point))))))
;;;###autoload
(defun +org-surround (delim)
"Surround the cursor (or selected region) with DELIM."
(if (region-active-p)
(save-excursion
(goto-char (region-beginning))
(insert delim)
(goto-char (region-end))
(insert delim))
(insert delim)
(save-excursion (insert delim))))
;;
;; tables
;;
;;;###autoload
(defun +org/table-next-row ()
(interactive)
(if (org-at-table-p) (org-table-next-row) (org-down-element)))
;;;###autoload
(defun +org/table-previous-row ()
"Go to the previous row (same column) in the current table. Before doing so,
re-align the table if necessary. (Necessary because org-mode has a
`org-table-next-row', but not `org-table-previous-row')"
(interactive)
(if (org-at-table-p)
(progn
(org-table-maybe-eval-formula)
(org-table-maybe-recalculate-line)
(if (and org-table-automatic-realign
org-table-may-need-update)
(org-table-align))
(let ((col (org-table-current-column)))
(beginning-of-line 0)
(when (or (not (org-at-table-p)) (org-at-table-hline-p))
(beginning-of-line))
(org-table-goto-column col)
(skip-chars-backward "^|\n\r")
(when (org-looking-at-p " ") (forward-char))))
(org-up-element)))
;;;###autoload
(defun +org/table-next-field ()
(interactive)
(if (org-at-table-p) (org-table-next-field) (org-end-of-line)))
;;;###autoload
(defun +org/table-previous-field ()
(interactive)
(if (org-at-table-p) (org-table-previous-field) (org-beginning-of-line)))
;;;###autoload
(defun +org/table-append-field-or-shift-right ()
(interactive)
(org-shiftmetaright)
(when (org-at-table-p) (org-metaright)))
;;;###autoload
(defun +org/table-prepend-field-or-shift-left ()
(interactive)
(if (org-at-table-p) (org-shiftmetaright) (org-shiftmetaleft)))
;;;###autoload
(defun +org/table-append-row-or-shift-down ()
(interactive)
(org-shiftmetadown)
(when (org-at-table-p) (org-metadown)))
;;;###autoload
(defun +org/table-prepend-row-or-shift-up ()
(interactive)
(if (org-at-table-p)
(org-shiftmetadown)
(org-shiftmetaup)))
;;;###autoload
(defun +org/edit-special-same-window ()
(interactive)
(let ((shackle-rules '(("^\\*Org Src" :align t :select t :regexp t :noesc t :same t))))
(call-interactively 'org-edit-special)
;; FIXME too tightly coupled with doom-buffer-mode
(when (fboundp 'doom-buffer-mode)
(doom-buffer-mode +1))))

View file

@ -0,0 +1,66 @@
;;; lang/org/autoload/tables.el
;;;###autoload
(defun +org/table-next-row ()
"Go to the next row (same column) in the current table."
(interactive)
(if (org-at-table-p)
(org-table-next-row)
(org-down-element)))
;;;###autoload
(defun +org/table-previous-row ()
"Go to the previous row (same column) in the current table. Before doing so,
re-align the table if necessary. (Necessary because org-mode has a
`org-table-next-row', but not `org-table-previous-row')"
(interactive)
(if (org-at-table-p)
(progn
(org-table-maybe-eval-formula)
(org-table-maybe-recalculate-line)
(if (and org-table-automatic-realign
org-table-may-need-update)
(org-table-align))
(let ((col (org-table-current-column)))
(beginning-of-line 0)
(when (or (not (org-at-table-p)) (org-at-table-hline-p))
(beginning-of-line))
(org-table-goto-column col)
(skip-chars-backward "^|\n\r")
(when (org-looking-at-p " ") (forward-char))))
(org-up-element)))
;;;###autoload
(defun +org/table-next-field ()
(interactive)
(if (org-at-table-p) (org-table-next-field) (org-end-of-line)))
;;;###autoload
(defun +org/table-previous-field ()
(interactive)
(if (org-at-table-p) (org-table-previous-field) (org-beginning-of-line)))
;;;###autoload
(defun +org/table-append-field-or-shift-right ()
(interactive)
(org-shiftmetaright)
(when (org-at-table-p) (org-metaright)))
;;;###autoload
(defun +org/table-prepend-field-or-shift-left ()
(interactive)
(if (org-at-table-p) (org-shiftmetaright) (org-shiftmetaleft)))
;;;###autoload
(defun +org/table-append-row-or-shift-down ()
(interactive)
(org-shiftmetadown)
(when (org-at-table-p) (org-metadown)))
;;;###autoload
(defun +org/table-prepend-row-or-shift-up ()
(interactive)
(if (org-at-table-p)
(org-shiftmetadown)
(org-shiftmetaup)))

View file

@ -372,7 +372,7 @@
;; Remove highlights on ESC ;; Remove highlights on ESC
(defun +org|remove-occur-highlights (&rest args) (defun +org|remove-occur-highlights (&rest args)
(when (eq major-mode 'org-mode) (when (derived-mode-p 'org-mode)
(org-remove-occur-highlights))) (org-remove-occur-highlights)))
(add-hook '+evil-esc-hook #'+org|remove-occur-highlights) (add-hook '+evil-esc-hook #'+org|remove-occur-highlights)