summaryrefslogtreecommitdiff
path: root/lisp/init-org.el
diff options
context:
space:
mode:
authorKyle Meyer <kyle@kyleam.com>2015-01-23 23:23:05 -0500
committerKyle Meyer <kyle@kyleam.com>2015-01-27 01:01:05 -0500
commitd9cae60fa5048abd3528f96a285109329639fda6 (patch)
treef4e25372dd4e8c466c82a09cd11c1dd5cb882487 /lisp/init-org.el
parent06d5146080137650645ad0750e23c8a238754ea6 (diff)
downloademacs.d-d9cae60fa5048abd3528f96a285109329639fda6.tar.gz
Improve organization and consistency of files
- Add pages and more headings for large files. - Try to use consistent order for file (or page) structure. * Loading * Settings * Hooks * Any mode activation or function calls * My functions * Key bindings
Diffstat (limited to 'lisp/init-org.el')
-rw-r--r--lisp/init-org.el391
1 files changed, 206 insertions, 185 deletions
diff --git a/lisp/init-org.el b/lisp/init-org.el
index cc43e1c..a674610 100644
--- a/lisp/init-org.el
+++ b/lisp/init-org.el
@@ -2,112 +2,32 @@
(add-to-list 'load-path "~/src/emacs/org-mode/contrib/lisp/" t)
(add-to-list 'Info-directory-list "~/src/emacs/org-mode/doc/")
-(setq org-modules '(org-bibtex org-gnus org-info)
- org-log-done t
- org-todo-keywords '((sequence "TODO(t)" "STARTED(s)" "WAITING(w@)"
- "|" "DONE(d)" "NA(n@)"))
+(setq org-modules '(org-bibtex org-gnus org-info))
+
+(setq org-log-done t
org-log-into-drawer t
org-clock-into-drawer t
- org-use-speed-commands t
- org-use-extra-keys t
- org-fast-tag-selection-single-key 'expert
- org-catch-invisible-edits 'error
- org-goto-interface 'outline-path-completionp
- org-src-fontify-natively t
+ org-todo-keywords '((sequence "TODO(t)" "STARTED(s)" "WAITING(w@)"
+ "|" "DONE(d)" "NA(n@)")))
+
+(setq org-catch-invisible-edits 'error
org-special-ctrl-k t
- org-outline-path-complete-in-steps nil
- org-completion-use-ido t
- org-reverse-note-order t
- org-link-search-must-match-exact-headline nil
org-insert-heading-respect-content t
org-M-RET-may-split-line nil
org-blank-before-new-entry '((heading . t) (plain-list-item . auto)))
-(setq org-capture-templates
- '(("t" "task" entry (file+headline "~/notes/tasks.org" "Inbox")
- "* TODO %?\n%i")
- ("d" "date" entry (file+headline "~/notes/calendar.org" "Inbox")
- "* %?\n%i")
- ("m" "misc" entry (file+headline "~/notes/misc.org" "Inbox")
- "* %?\n%i")
- ;; Link counterparts
- ("T" "task link" entry (file+headline "~/notes/tasks.org" "Inbox")
- "* TODO %?\n%i\nLink: %a")
- ("D" "date link" entry (file+headline "~/notes/calendar.org" "Inbox")
- "* %?\n%i\nLink: %a")
- ("M" "misc link" entry (file+headline "~/notes/misc.org" "Inbox")
- "* %?\n%i\nLink: %a")
- ;; Clipboard
- ("x" "task clipboard" entry (file+headline "~/notes/tasks.org" "Inbox")
- "* TODO %?\n%x")
- ("X" "misc clipboard" entry (file+headline "~/notes/misc.org" "Inbox")
- "* %?\n%x")))
-(key-chord-define-global ",t" 'org-capture)
-
-(defadvice org-open-file (after km/org-open-add-to-recentf activate)
- (recentf-add-file path))
-
-(defun km/org-open-file-at-point ()
- "Open file at point with `org-open-file'."
- (interactive)
- (let ((file (thing-at-point 'filename)))
- (if (and file (file-exists-p file))
- (org-open-file file)
- (user-error "No file at point"))))
-
-(defun km/org-open-file ()
- "Interactive version of `org-open-file'."
- (interactive)
- (org-open-file (read-file-name "Open file: " nil nil t)))
+(setq org-link-search-must-match-exact-headline nil)
-(defun km/org-open-annex-file ()
- "Open a git annex file with `org-open-file'."
- (interactive)
- (--if-let (magit-annex-present-files)
- (org-open-file (magit-completing-read "Open annex file" it nil t))
- (message "No annex files found")))
-
-(defun km/org-open-recent-file ()
- "Open a file from `recentf-list' with `org-open-file'."
- (interactive)
- (org-open-file (km/read-recent-file)))
-
-(autoload 'magit-annex-present-files "magit-annex")
-
-(after 'init-buffile
- (define-key km/file-map "a" 'km/org-open-annex-file)
- (define-key km/file-map "o" 'km/org-open-file)
- (define-key km/file-map "p" 'km/org-open-file-at-point)
- (define-key km/file-map "r" 'km/org-open-recent-file))
-
-(define-prefix-command 'km/global-org-map)
-(global-set-key (kbd "C-c o") 'km/global-org-map)
-
-(defvar km/org-store-link-hook nil
- "Hook run before by `km/org-store-link-hook'.
-These are run within a `save-window-excursion' block.")
-
-(defun km/org-store-link ()
- "Run `km/org-store-link-hook' before `org-store-link'.
-The hook functions and `org-store-link' are called within a
-`save-window-excursion' block."
- (interactive)
- (save-window-excursion
- (run-hooks 'km/org-store-link-hook)
- (call-interactively 'org-store-link)))
+(setq org-use-speed-commands t
+ org-use-extra-keys t
+ org-fast-tag-selection-single-key 'expert)
-(define-key km/global-org-map "l" 'km/org-store-link)
-(define-key km/global-org-map "o" 'org-open-at-point-global)
-(define-key km/global-org-map "a" 'org-agenda)
-(define-key km/global-org-map "j" 'km/org-goto-agenda-heading)
-(define-key km/global-org-map "b" 'org-iswitchb)
-(define-key km/global-org-map "s" 'org-save-all-org-buffers)
-(define-key km/global-org-map "w" 'org-refile-goto-last-stored)
-(define-key km/global-org-map "p" 'poporg-dwim)
-(key-chord-define-global ",a" 'org-agenda)
+(setq org-completion-use-ido t
+ org-outline-path-complete-in-steps nil
+ org-goto-interface 'outline-path-completionp
+ org-goto-max-level 3)
-(after 'poporg
- (define-key poporg-mode-map (kbd "C-c C-c") 'poporg-edit-exit))
+(put 'org-goto-max-level 'safe-local-variable #'integerp)
(setq org-structure-template-alist
'(("p" "#+property: " "")
@@ -137,36 +57,20 @@ The hook functions and `org-store-link' are called within a
("i" "#+index: ?" "#+index: ?")
("I" "#+include: %file ?" "<include file=%file markup=\"?\">")))
-(define-prefix-command 'km/org-prefix-map)
-(define-key km/org-prefix-map "w" 'km/org-refile-to-other-org-buffer)
-(define-key km/org-prefix-map "s" 'km/org-sort-parent)
-(define-key km/org-prefix-map "l" 'km/org-remove-title-leader)
-
-(after 'org
- (define-key org-mode-map (kbd "C-c C-x B")
- 'km/org-tree-to-indirect-buffer-current-window)
- (define-key org-mode-map [remap org-tree-to-indirect-buffer]
- 'km/org-tree-to-indirect-buffer)
- (define-key org-mode-map (kbd "C-c m") 'km/org-prefix-map)
- ;; Override global `imenu' binding.
- (define-key org-mode-map (kbd "C-c j") 'org-goto)
- ;; Don't let `org-cycle-agenda-files' binding override custom
- ;; `backward-kill-word' binding (`org-cycle-agenda-files' is still bound
- ;; to C-,).
- (define-key org-mode-map (kbd "C-'") nil)
- ;; Rebind `org-insert-drawer' to so that `org-metadown' has the
- ;; expected "C-c C-x" keybinding.
- (define-key org-mode-map (kbd "C-c C-x d") 'org-metadown)
- (define-key org-mode-map (kbd "C-c C-x w") 'org-insert-drawer)
- ;; Avoid conflict when amsmath is loaded.
- (setcar (rassoc '("wasysym" t) org-latex-default-packages-alist)
- "nointegrals")
- (add-to-list 'org-latex-packages-alist '("" "amsmath" t)))
-
(add-to-list 'auto-mode-alist '("\\.org.txt\\'" . org-mode))
-(setq org-goto-max-level 3)
-(put 'org-goto-max-level 'safe-local-variable #'integerp)
+(defvar km/org-store-link-hook nil
+ "Hook run before by `km/org-store-link-hook'.
+These are run within a `save-window-excursion' block.")
+
+(defun km/org-store-link ()
+ "Run `km/org-store-link-hook' before `org-store-link'.
+The hook functions and `org-store-link' are called within a
+`save-window-excursion' block."
+ (interactive)
+ (save-window-excursion
+ (run-hooks 'km/org-store-link-hook)
+ (call-interactively 'org-store-link)))
(defun km/org-tree-to-indirect-buffer (&optional arg)
"Run `org-tree-to-indirect-buffer', keeping previous buffer.
@@ -296,24 +200,111 @@ to
(km/reduce-to-single-spaces)
(km/org-add-blank-before-heading))
+(defun km/org-switch-to-buffer-other-window (&optional arg)
+ (interactive "P")
+ (noflet ((org-pop-to-buffer-same-window (&optional buffer-or-name norecord label)
+ (funcall 'pop-to-buffer buffer-or-name nil norecord)))
+ (org-switchb arg)))
+
+(after 'org
+ (define-key org-mode-map (kbd "C-c C-x B")
+ 'km/org-tree-to-indirect-buffer-current-window)
+ (define-key org-mode-map [remap org-tree-to-indirect-buffer]
+ 'km/org-tree-to-indirect-buffer)
+
+ ;; Rebind `org-insert-drawer' to so that `org-metadown' has the
+ ;; expected "C-c C-x" keybinding.
+ (define-key org-mode-map (kbd "C-c C-x d") 'org-metadown)
+ (define-key org-mode-map (kbd "C-c C-x w") 'org-insert-drawer)
+
+ ;; Override global `imenu' binding.
+ (define-key org-mode-map (kbd "C-c j") 'org-goto)
+ ;; Don't let `org-cycle-agenda-files' binding override custom
+ ;; `backward-kill-word' binding (`org-cycle-agenda-files' is still bound
+ ;; to C-,).
+ (define-key org-mode-map (kbd "C-'") nil)
+
+ (define-key org-mode-map (kbd "C-c m") 'km/org-prefix-map))
+
+(define-prefix-command 'km/org-prefix-map)
+(define-key km/org-prefix-map "l" 'km/org-remove-title-leader)
(define-key km/org-prefix-map "n" 'km/org-normalize-spaces)
+(define-key km/org-prefix-map "s" 'km/org-sort-parent)
-;;; Org in other modes
-(defun km/load-orgstruct ()
- (turn-on-orgstruct++)
- (turn-on-orgtbl))
+(define-prefix-command 'km/global-org-map)
+(global-set-key (kbd "C-c o") 'km/global-org-map)
-(add-hook 'message-mode-hook 'km/load-orgstruct)
+(define-key km/global-org-map "a" 'org-agenda)
+(define-key km/global-org-map "b" 'org-iswitchb)
+(define-key km/global-org-map "l" 'km/org-store-link)
+(define-key km/global-org-map "o" 'org-open-at-point-global)
+(define-key km/global-org-map "s" 'org-save-all-org-buffers)
-(after 'git-commit
- (add-hook 'git-commit-setup-hook 'km/load-orgstruct))
+(define-key ctl-x-4-map "o" 'km/org-switch-to-buffer-other-window)
-(add-hook 'next-error-hook (lambda ()
- (when (eq major-mode 'org-mode)
- (org-show-context))))
+
+;;; Org capture
+
+(setq org-capture-templates
+ '(("t" "task" entry (file+headline "~/notes/tasks.org" "Inbox")
+ "* TODO %?\n%i")
+ ("d" "date" entry (file+headline "~/notes/calendar.org" "Inbox")
+ "* %?\n%i")
+ ("m" "misc" entry (file+headline "~/notes/misc.org" "Inbox")
+ "* %?\n%i")
+ ;; Link counterparts
+ ("T" "task link" entry (file+headline "~/notes/tasks.org" "Inbox")
+ "* TODO %?\n%i\nLink: %a")
+ ("D" "date link" entry (file+headline "~/notes/calendar.org" "Inbox")
+ "* %?\n%i\nLink: %a")
+ ("M" "misc link" entry (file+headline "~/notes/misc.org" "Inbox")
+ "* %?\n%i\nLink: %a")
+ ;; Clipboard
+ ("x" "task clipboard" entry (file+headline "~/notes/tasks.org" "Inbox")
+ "* TODO %?\n%x")
+ ("X" "misc clipboard" entry (file+headline "~/notes/misc.org" "Inbox")
+ "* %?\n%x")))
+
+(key-chord-define-global ",t" 'org-capture)
+
;;; Agenda
+(setq org-default-notes-file "~/notes/agenda/tasks.org")
+(defvar km/org-agenda-file-directory "~/notes/agenda/")
+(setq org-agenda-files (list km/org-agenda-file-directory))
+(setq org-agenda-text-search-extra-files
+ (file-expand-wildcards "~/notes/extra/*.org"))
+
+(setq org-agenda-restore-windows-after-quit t
+ org-agenda-sticky nil)
+
+(setq org-agenda-dim-blocked-tasks nil
+ org-agenda-show-all-dates t
+ org-agenda-skip-deadline-if-done t
+ org-agenda-skip-scheduled-if-done t
+ org-agenda-start-on-weekday nil
+ org-agenda-use-time-grid nil)
+
+(setq org-agenda-sorting-strategy
+ '((agenda time-up deadline-up scheduled-up priority-down category-keep)
+ (todo priority-down category-keep)
+ (tags priority-down category-keep)
+ (search category-keep)))
+
+(setq org-agenda-custom-commands
+ '(("d" todo "DONE" nil)
+ ("u" "Unschedule TODO entries" alltodo ""
+ ((org-agenda-skip-function
+ (lambda nil
+ (org-agenda-skip-entry-if 'scheduled 'deadline
+ 'regexp "\n]+>")))
+ (org-agenda-overriding-header "Unscheduled TODO entries: ")))
+ ("p" "Past timestamps" tags "TIMESTAMP<=\"<now>\"")))
+
+(add-hook 'org-agenda-mode-hook 'km/org-agenda-cd-and-read-dir-locals)
+(add-hook 'org-agenda-finalize-hook 'km/org-agenda-store-current-span)
+
(after 'org-agenda
(defadvice org-agenda-list (around org-agenda-fullscreen activate)
"Start agenda in fullscreen.
@@ -330,19 +321,6 @@ be restored properly."
(setq default-directory "~/notes/")
(hack-local-variables))
-(add-hook 'org-agenda-mode-hook 'km/org-agenda-cd-and-read-dir-locals)
-
-(setq org-agenda-restore-windows-after-quit t
- org-agenda-sticky nil)
-
-(setq org-default-notes-file "~/notes/agenda/tasks.org"
- org-agenda-show-all-dates t
- org-agenda-skip-deadline-if-done t
- org-agenda-skip-scheduled-if-done t
- org-agenda-dim-blocked-tasks nil
- org-agenda-use-time-grid nil
- org-agenda-start-on-weekday nil)
-
(defun km/org-agenda-store-current-span ()
"Store the current span value in `org-agenda-span'.
This allows the view to persist when the agenda buffer is
@@ -350,19 +328,6 @@ killed."
(when org-agenda-current-span
(setq org-agenda-span org-agenda-current-span)))
-(add-hook 'org-agenda-finalize-hook 'km/org-agenda-store-current-span)
-
-(setq org-agenda-sorting-strategy
- '((agenda time-up deadline-up scheduled-up priority-down category-keep)
- (todo priority-down category-keep)
- (tags priority-down category-keep)
- (search category-keep)))
-
-(defvar km/org-agenda-file-directory "~/notes/agenda/")
-(setq org-agenda-files (list km/org-agenda-file-directory))
-(setq org-agenda-text-search-extra-files
- (file-expand-wildcards "~/notes/extra/*.org"))
-
(defun km/org-agenda-add-or-remove-file (file)
"Add or remove link to FILE in `km/org-agenda-file-directory'.
If a link for FILE does not exist, create it. Otherwise, remove
@@ -384,8 +349,6 @@ displayed in the agenda."
(when (called-interactively-p) (message "Adding %s" agenda-file))
(make-symbolic-link file agenda-file))))
-(define-key km/global-org-map "n" 'km/org-agenda-add-or-remove-file)
-
(defun km/org-open-default-notes-file-inbox ()
"Open \"Inbox\" heading of `org-default-notes-file'."
(interactive)
@@ -394,18 +357,6 @@ displayed in the agenda."
(recenter-top-bottom 0)
(show-children))
-(define-key km/global-org-map "m" 'km/org-open-default-notes-file-inbox)
-
-(setq org-agenda-custom-commands
- '(("d" todo "DONE" nil)
- ("u" "Unschedule TODO entries" alltodo ""
- ((org-agenda-skip-function
- (lambda nil
- (org-agenda-skip-entry-if 'scheduled 'deadline
- 'regexp "\n]+>")))
- (org-agenda-overriding-header "Unscheduled TODO entries: ")))
- ("p" "Past timestamps" tags "TIMESTAMP<=\"<now>\"")))
-
(defun km/org-goto-agenda-heading ()
"Jump to heading in agenda files."
(interactive)
@@ -414,11 +365,18 @@ displayed in the agenda."
(org-agenda-text-search-extra-files :maxlevel . 3))))
(org-refile '(4))))
+(key-chord-define-global ",a" 'org-agenda)
+
+(define-key km/global-org-map "j" 'km/org-goto-agenda-heading)
+(define-key km/global-org-map "m" 'km/org-open-default-notes-file-inbox)
+(define-key km/global-org-map "n" 'km/org-agenda-add-or-remove-file)
+
+
;;; Refiling
-(defun km/verify-refile-target ()
- "Exclude DONE state from refile targets."
- (not (member (nth 2 (org-heading-components)) org-done-keywords)))
+(setq org-reverse-note-order t)
+
+(setq org-refile-target-verify-function 'km/org-refile-verify-target)
(setq org-refile-targets '((nil :maxlevel . 2))
org-refile-cache nil)
@@ -431,7 +389,9 @@ displayed in the agenda."
(add-to-list 'safe-local-variable-values
(cons 'org-refile-targets km/org-agenda-refile-targets))
-(setq org-refile-target-verify-function 'km/verify-refile-target)
+(defun km/org-refile-verify-target ()
+ "Exclude DONE state from refile targets."
+ (not (member (nth 2 (org-heading-components)) org-done-keywords)))
(defadvice org-refile (around km/org-refile-dwim activate)
"Rebind `org-refile-targets' if next window is an Org buffer.
@@ -491,16 +451,18 @@ global value. A numeric prefix sets MAXLEVEL (defaults to 2)."
(set (make-local-variable 'org-refile-targets)
`((,buffer-file :maxlevel . ,maxlevel))))))
-(defun km/org-switch-to-buffer-other-window (&optional arg)
- (interactive "P")
- (noflet ((org-pop-to-buffer-same-window (&optional buffer-or-name norecord label)
- (funcall 'pop-to-buffer buffer-or-name nil norecord)))
- (org-switchb arg)))
-
-(define-key ctl-x-4-map "o" 'km/org-switch-to-buffer-other-window)
+(define-key km/global-org-map "w" 'org-refile-goto-last-stored)
+(define-key km/org-prefix-map "w" 'km/org-refile-to-other-org-buffer)
+
;;; Export
+(after 'org
+ ;; Avoid conflict when amsmath is loaded.
+ (setcar (rassoc '("wasysym" t) org-latex-default-packages-alist)
+ "nointegrals")
+ (add-to-list 'org-latex-packages-alist '("" "amsmath" t)))
+
(after 'ox-latex
(add-to-list 'org-latex-classes
'("short"
@@ -511,4 +473,63 @@ global value. A numeric prefix sets MAXLEVEL (defaults to 2)."
("\\paragraph{%s}" . "\\paragraph*{%s}")
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))))
+
+;;; Org in other modes
+
+(after 'git-commit
+ (add-hook 'git-commit-setup-hook 'km/load-orgstruct))
+
+(add-hook 'next-error-hook (lambda ()
+ (when (eq major-mode 'org-mode)
+ (org-show-context))))
+
+(add-hook 'message-mode-hook 'km/load-orgstruct)
+
+(defun km/load-orgstruct ()
+ (turn-on-orgstruct++)
+ (turn-on-orgtbl))
+
+(after 'poporg
+ (define-key poporg-mode-map (kbd "C-c C-c") 'poporg-edit-exit))
+
+(define-key km/global-org-map "p" 'poporg-dwim)
+
+
+;;; Org open file
+
+(defadvice org-open-file (after km/org-open-add-to-recentf activate)
+ (recentf-add-file path))
+
+(defun km/org-open-file-at-point ()
+ "Open file at point with `org-open-file'."
+ (interactive)
+ (let ((file (thing-at-point 'filename)))
+ (if (and file (file-exists-p file))
+ (org-open-file file)
+ (user-error "No file at point"))))
+
+(defun km/org-open-file ()
+ "Interactive version of `org-open-file'."
+ (interactive)
+ (org-open-file (read-file-name "Open file: " nil nil t)))
+
+(autoload 'magit-annex-present-files "magit-annex")
+(defun km/org-open-annex-file ()
+ "Open a git annex file with `org-open-file'."
+ (interactive)
+ (--if-let (magit-annex-present-files)
+ (org-open-file (magit-completing-read "Open annex file" it nil t))
+ (message "No annex files found")))
+
+(defun km/org-open-recent-file ()
+ "Open a file from `recentf-list' with `org-open-file'."
+ (interactive)
+ (org-open-file (km/read-recent-file)))
+
+(after 'init-buffile
+ (define-key km/file-map "a" 'km/org-open-annex-file)
+ (define-key km/file-map "o" 'km/org-open-file)
+ (define-key km/file-map "p" 'km/org-open-file-at-point)
+ (define-key km/file-map "r" 'km/org-open-recent-file))
+
(provide 'init-org)