doomemacs/init/init-org.el

251 lines
11 KiB
EmacsLisp
Raw Normal View History

2014-12-13 04:26:34 +08:00
(use-package org
2015-06-05 06:23:21 +08:00
:defines (org-directory)
:functions (org-bookmark-jump-unhide outline-next-heading org-end-of-subtree
outline-flag-region org-remove-inline-images org-display-inline-images
org-at-item-checkbox-p org-toggle-checkbox org-entry-is-todo-p org-todo
org-format-outline-path org-get-outline-path)
2015-05-29 10:24:43 +08:00
:commands (org-capture
2015-06-05 06:23:21 +08:00
org-capture-string)
:mode (("\\.org$" . org-mode)
2014-12-13 04:26:34 +08:00
("\\.opml$" . org-mode))
:init
(progn
2015-06-05 06:23:21 +08:00
(define-minor-mode evil-org-mode
"Evil-mode bindings for org-mode."
:init-value nil
:lighter "!"
:keymap (make-sparse-keymap) ; defines evil-org-mode-map
:group 'evil-org)
(add-to-hook 'org-mode-hook '(narf|enable-tab-width-2 'narf|enable-hard-wrap 'iimage-mode 'org-indent-mode 'evil-org-mode))
2015-05-29 10:24:43 +08:00
(add-hook! 'org-mode-hook (hl-line-mode -1)))
:config
(progn
(after "org-indent" (diminish 'org-indent-mode))
(after "iimage" (diminish 'iimage-mode))
(setq org-directory "~/Dropbox/notes")
(setq org-project-directory (expand-file-name "projects" org-directory) ; custom variable
org-default-notes-file (expand-file-name "notes.org" org-directory)
2015-06-05 06:23:21 +08:00
org-agenda-files (f-entries org-directory (lambda (path) (and (f-ext? path "org")
(not (f-same? path (f-expand "inbox.org" org-directory))))) t)
2015-05-29 10:24:43 +08:00
org-archive-location (concat org-directory "/archive/%s::")
2014-12-13 04:26:34 +08:00
org-confirm-babel-evaluate nil
2015-01-22 04:14:22 +08:00
org-src-tab-acts-natively t
2015-05-29 10:24:43 +08:00
org-image-actual-width 250
org-startup-with-inline-images t
org-completion-use-ido t
2014-12-13 04:26:34 +08:00
org-hidden-keywords '(title)
org-special-ctrl-a/e t
org-hide-leading-stars t
org-hierarchical-todo-statistics t
org-checkbox-hierarchical-statistics t
2015-01-15 14:49:11 +08:00
org-tags-column -87
2014-12-13 04:26:34 +08:00
org-log-done t
2015-05-29 10:24:43 +08:00
org-confirm-elisp-link-function nil
org-startup-folded 'content
org-todo-keywords '((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)")
(sequence "DOING(s)" "PENDING(p)")
(sequence "|" "CANCELLED(c)"))
org-mobile-directory "~/Dropbox/Apps/MobileOrg"
org-mobile-inbox-for-pull (expand-file-name "mobile.org" org-directory))
2014-12-13 04:26:34 +08:00
2015-05-29 10:24:43 +08:00
(setq org-src-fontify-natively t
org-blank-before-new-entry '((heading . auto) (plain-list-item . auto))
org-export-backends '(ascii html latex md opml))
(add-to-list 'org-link-frame-setup '(file . find-file))
2014-12-13 04:26:34 +08:00
(setq org-tag-alist '(("@home" . ?h)
("@daily" . ?d)
("@invoices" . ?i)
("@personal" . ?p)
("@learning" . ?l)
("@dev" . ?v)
("@writing" . ?w)
("@projects" . ?r)))
(setq org-capture-templates
'(("t" "TODO" entry (file+headline "~/Dropbox/notes/todo.org" "Inbox") "* TODO %? %u\n%i")
2015-06-05 06:23:21 +08:00
("T" "Project TODO" entry (file+headline (narf/project-org-filename) "Tasks") "** TODO %?\n%i" :prepend t)
("N" "Project Note" entry (file+headline (narf/project-org-filename) "Notes") "** %u %?\n%i")
("c" "Changelog" entry (file+datetree (narf/project-org-filename)) "** %<%H:%M>: %? :unsorted:\n%i" :prepend t)
2015-05-29 10:24:43 +08:00
("n" "Note" entry (file+datetree org-default-notes-file) "** %<%H:%M>: %?\n%i" :prepend t)
2014-12-13 04:26:34 +08:00
("j" "Journal" entry (file+datetree "~/Dropbox/notes/journal.org") "** %?%^g\nAdded: %U\n%i")
("a" "Trivia" entry (file "~/Dropbox/notes/trivia.org") "* %u %?\n%i" :prepend t)
("s" "Writing Scraps" entry (file "~/Dropbox/notes/writing.org") "* %u %?\n%i" :prepend t)
("v" "Vocab" entry (file "~/Dropbox/notes/vocab.org") "* %?\n%i" :prepend t)
("e" "Excerpt" entry (file "~/Dropbox/notes/excerpts.org") "* %u %?\n%i" :prepend t)))
2015-01-22 04:14:22 +08:00
(setq iimage-mode-image-regex-alist
2015-05-29 10:24:43 +08:00
'(("\\(`?file://\\|\\[\\[\\|<\\|`\\)?\\([-+./_0-9a-zA-Z]+\\.\\(GIF\\|JP\\(?:E?G\\)\\|P\\(?:BM\\|GM\\|N[GM]\\|PM\\)\\|SVG\\|TIFF?\\|X\\(?:[BP]M\\)\\|gif\\|jp\\(?:e?g\\)\\|p\\(?:bm\\|gm\\|n[gm]\\|pm\\)\\|svg\\|tiff?\\|x\\(?:[bp]m\\)\\)\\)\\(\\]\\]\\|>\\|'\\)?" . 2)
("<\\(http://.+\\.\\(GIF\\|JP\\(?:E?G\\)\\|P\\(?:BM\\|GM\\|N[GM]\\|PM\\)\\|SVG\\|TIFF?\\|X\\(?:[BP]M\\)\\|gif\\|jp\\(?:e?g\\)\\|p\\(?:bm\\|gm\\|n[gm]\\|pm\\)\\|svg\\|tiff?\\|x\\(?:[bp]m\\)\\)\\)>" . 1)))
2014-12-13 04:26:34 +08:00
(org-babel-do-load-languages 'org-babel-load-languages
'((python . t)
(ruby . t)
(sh . t)
(emacs-lisp . t)
(matlab . t)
(latex . t)))
;; Remove occur highlights on ESC in normal mode
2015-06-05 06:23:21 +08:00
(advice-add 'evil-force-normal-state :before 'org-remove-occur-highlights)
2014-12-13 04:26:34 +08:00
2015-05-29 10:24:43 +08:00
;; (progn ; opml support
;; (defun set-buffer-file-format-to-opml ()
;; (when (string-match "\.opml$" (buffer-file-name))
;; (setq buffer-file-format '(opml))))
;; (defun my--opml-encode (begin end buffer)
;; "Export Org mode buffer to OPML."
;; (let ((org-export-show-temporary-export-buffer nil)
;; (name "*OPML Export Buffer*"))
;; (org-export-to-buffer 'opml name)
;; (erase-buffer)
;; (insert-buffer-substring (get-buffer name))
;; (point-max)))
;; (add-hook 'find-file-hooks 'set-buffer-file-format-to-opml)
;; (add-to-list 'format-alist '(opml "Outline Processor Markup Language"
;; "<[?]xml version=\"1.0\"[^>]*[?]>[\n]?.*[\n]?.*[\n]?<opml version=\"[1|2].0\">"
;; "~/.emacs.d/elisp/org-opml/opml2org.py" my--opml-encode t))
;; (shut-up (load-library "ox-opml")))
2014-12-13 04:26:34 +08:00
(progn ; key bindings
2015-05-29 10:24:43 +08:00
;; Hide properties PERMANENTLY
(defun org-cycle-hide-drawers (state)
"Re-hide all drawers after a visibility state change."
(when (and (derived-mode-p 'org-mode)
(not (memq state '(overview folded contents))))
(save-excursion
(let* ((globalp (memq state '(contents all)))
(beg (if globalp (point-min) (point)))
(end (if globalp (point-max)
(if (eq state 'children)
(save-excursion (outline-next-heading) (point))
(org-end-of-subtree t)))))
(goto-char beg)
(while (re-search-forward org-drawer-regexp end t)
(save-excursion
(beginning-of-line 1)
(backward-char 1)
(let ((b (point)))
(if (re-search-forward
"^[ \t]*:END:"
(save-excursion (outline-next-heading) (point)) t)
(outline-flag-region b (point-at-eol) t)
(user-error ":END: line missing at position %s" b)))))))))
(use-package org-agenda
:config
(setq org-agenda-restore-windows-after-quit t
org-agenda-custom-commands '(("x" agenda)
("y" agenda*)
("w" todo "WAITING")
("W" todo-tree "WAITING")
("to" todo)
("tp" tags "+Projects")
("tg" tags-todo "+gamedev")
("tw" tags-tree "+webdev"))))
2015-06-05 06:23:21 +08:00
(bind :map org-mode-map
2014-12-13 04:26:34 +08:00
"RET" nil
"C-j" nil
2015-06-05 06:23:21 +08:00
"C-k" nil
2014-12-13 04:26:34 +08:00
2015-06-05 06:23:21 +08:00
:insert [remap narf:inflate-space-maybe] 'self-insert-command
:normal :insert :map evil-org-mode-map
2015-05-29 10:24:43 +08:00
"A-l" 'org-metaright ; M-j
"A-h" 'org-metaleft ; M-h
"A-k" 'org-metaup ; M-k
"A-j" 'org-metadown ; M-j
"A-l" 'org-shiftmetaright ; M-L
"A-h" 'org-shiftmetaleft ; M-H
"A-k" 'org-shiftmetaup ; M-K
2015-06-05 06:23:21 +08:00
"A-j" 'org-shiftmetadown ; M-J
2014-12-13 04:26:34 +08:00
2015-04-23 08:48:28 +08:00
"<M-left>" 'org-beginning-of-line
"<M-right>" 'org-end-of-line
"<M-up>" 'org-up-element
2015-06-05 06:23:21 +08:00
"<M-down>" 'org-down-element
2014-12-13 04:26:34 +08:00
2015-06-05 06:23:21 +08:00
",;" 'helm-org-in-buffer-headings
2015-05-29 10:24:43 +08:00
"M-a" 'mark-whole-buffer
2015-06-05 06:23:21 +08:00
", l" 'org-insert-link
2015-05-29 10:24:43 +08:00
2015-06-05 06:23:21 +08:00
:insert
"C-e" 'org-end-of-line
"C-a" 'org-beginning-of-line
2014-12-13 04:26:34 +08:00
;; Add new header line before this line
2015-06-05 06:23:21 +08:00
"<S-M-return>" 'narf/org-insert-item-before
2014-12-13 04:26:34 +08:00
;; Add new header line after this line
2015-06-05 06:23:21 +08:00
"<M-return>" 'narf/org-insert-item-after
2015-05-29 10:24:43 +08:00
2015-06-05 06:23:21 +08:00
"M-b" (λ (narf/org-surround "*")) ; bold
"M-u" (λ (narf/org-surround "_")) ; underline
"M-i" (λ (narf/org-surround "/")) ; italics
"M-`" (λ (narf/org-surround "+")) ; strikethrough
2015-05-29 10:24:43 +08:00
2015-06-05 06:23:21 +08:00
:visual
2015-05-29 10:24:43 +08:00
"M-b" "S*"
"M-u" "S_"
"M-i" "S/"
"M-`" "S+"
2015-06-05 06:23:21 +08:00
:normal
2015-05-29 10:24:43 +08:00
",=" 'org-align-all-tags
",/" 'org-sparse-tree
",?" 'org-tags-view
",a" 'org-attach
",D" 'org-time-stamp-inactive
",T" 'org-show-todo-tree
",d" 'org-time-stamp
",r" 'org-refile
",s" 'org-schedule
",t" 'org-todo
"gr" 'org-babel-execute-src-block-maybe
"gh" 'outline-up-heading
"gj" 'org-forward-heading-same-level
"gk" 'org-backward-heading-same-level
"gl" 'outline-next-visible-heading
"go" 'org-open-at-point
"gO" 'org-attach-open
"gC-o" 'org-attach-reveal
"gI" (λ (if (> (length org-inline-image-overlays) 0)
2014-12-13 04:26:34 +08:00
(org-remove-inline-images)
(org-display-inline-images nil t (line-beginning-position) (line-end-position))))
2015-05-29 10:24:43 +08:00
"gQ" 'org-fill-paragraph
"ga" 'org-attach
"gA" 'org-agenda
"gt" 'org-show-todo-tree
"]l" 'org-next-link
"[l" 'org-previous-link
2014-12-13 04:26:34 +08:00
"$" 'org-end-of-line
"^" 'org-beginning-of-line
"<" 'org-metaleft
">" 'org-metaright
"-" 'org-cycle-list-bullet
2015-06-05 06:23:21 +08:00
",SPC" 'narf/org-toggle-checkbox
2015-05-29 10:24:43 +08:00
",<return>" 'org-archive-subtree
2015-06-05 06:23:21 +08:00
"<S-M-return>" 'narf/org-insert-item-before
"<M-return>" 'narf/org-insert-item-after
2014-12-13 04:26:34 +08:00
"RET" (λ (cond ((org-at-item-checkbox-p)
(org-toggle-checkbox))
((org-entry-is-todo-p)
(org-todo 'done))))
2015-05-29 10:24:43 +08:00
[tab] 'org-cycle)
(after "org-agenda"
2015-06-05 06:23:21 +08:00
(bind :emacs :map org-agenda-mode-map
2015-05-29 10:24:43 +08:00
"<escape>" 'org-agenda-Quit
"C-j" 'org-agenda-next-item
"C-k" 'org-agenda-previous-item
"C-n" 'org-agenda-next-item
2015-06-05 06:23:21 +08:00
"C-p" 'org-agenda-previous-item)))))
2014-12-13 04:26:34 +08:00
(provide 'init-org)
;;; init-org.el ends here