diff options
Diffstat (limited to 'custom/jao-custom-org.el')
| -rw-r--r-- | custom/jao-custom-org.el | 172 |
1 files changed, 124 insertions, 48 deletions
diff --git a/custom/jao-custom-org.el b/custom/jao-custom-org.el index 4d2e622..5a8306e 100644 --- a/custom/jao-custom-org.el +++ b/custom/jao-custom-org.el @@ -1,7 +1,7 @@ ;; -*- lexical-binding: t -*- ;;; General configuration -(defvar jao-org-dir (expand-file-name "~/doc/org")) +(defvar jao-org-dir (expand-file-name "org" jao-doc-dir)) (use-package org :ensure t @@ -22,7 +22,6 @@ org-enforce-todo-dependencies t org-fast-tag-selection-single-key 'expert org-insert-heading-respect-content nil ;; for C-RET - ;; org-list-demote-modify-bullet '(("+" . "-") ("-" . "+") ("*" . "+")) org-link-frame-setup '((gnus . (lambda (&optional x) (jao-open-gnus-frame))) (file . find-file-other-window)) @@ -30,6 +29,8 @@ org-modules '(bibtex info eww eshell git-link) org-odd-levels-only t org-outline-path-complete-in-steps nil + org-persist-directory (expand-file-name "cache/org-persist" + user-emacs-directory) org-refile-allow-creating-parent-nodes 'confirm org-refile-targets '((nil :maxlevel . 5) (org-agenda-files :maxlevel . 5)) @@ -48,70 +49,123 @@ (sequence "|" "CANCELLED(x!)" "SOMEDAY(o!)" "DONE(d!)")) org-use-fast-todo-selection t org-use-speed-commands nil ;; t and then ? to see help - org-gnus-prefer-web-links nil)) + org-gnus-prefer-web-links nil) + :bind (:map org-mode-map ("<f3>" . org-shifttab))) ;;; Agenda +(defun jao-org-agenda-fmt-date (date) + (org-agenda-format-date-aligned date)) + (setq org-agenda-custom-commands - '(("j" agenda "" ((org-agenda-ndays 14) - (org-agenda-overriding-header " "))) + '(("j" agenda "" ((org-agenda-overriding-header "Agenda \n") + (org-agenda-ndays-to-span 14))) ("w" todo "WAITING" nil) ("W" agenda "" ((org-agenda-ndays 21)))) org-agenda-files (mapcar (lambda (f) (expand-file-name f jao-org-dir)) - '("inbox.org" "bigml.org")) + '("inbox.org")) org-agenda-block-separator " " org-agenda-breadcrumbs-separator "•" org-agenda-current-time-string "•" ;; "*" - ;; '((daily today require-timed) - ;; (800 1000 1200 1400 1600 1800 2000) "" "·") + org-agenda-format-date #'jao-org-agenda-fmt-date org-agenda-hide-tags-regexp ".*" org-agenda-include-diary t org-agenda-include-inactive-timestamps t org-agenda-inhibit-startup nil + org-agenda-prefix-format + '((agenda . " %i %?-12t% s") + (todo . " %i %-12:c") + (tags . " %i %-12:c") + (search . " %i %-12:c")) org-agenda-restore-windows-after-quit t org-agenda-show-all-dates t org-agenda-skip-deadline-if-done t - org-agenda-skip-scheduled-if-done nil + org-agenda-skip-scheduled-if-done t + org-agenda-skip-timestamp-if-done t + org-agenda-skip-timestamp-if-deadline-is-shown t + org-agenda-skip-scheduled-if-deadline-is-shown t org-agenda-span 14 - org-agenda-start-on-weekday nil - org-agenda-time-grid '((daily require-timed) () "" "·") + ;; org-agenda-start-on-weekday nil + ;; ;; org-agenda-time-grid '((daily require-timed) () "" "·") + ;; '((daily today require-timed) + ;; (800 1000 1200 1400 1600 1800 2000) "" "·") org-agenda-window-setup 'current-window) (defun jao-org-agenda () (interactive) - (org-agenda nil "j")) - -(defun jao-org-agenda-hook () - (setq-local cursor-in-non-selected-windows nil)) - -(add-hook 'org-agenda-mode-hook #'jao-org-agenda-hook) - -(add-to-list 'display-buffer-alist - '("\\*Org Agenda\\*" - (display-buffer-reuse-window) - (body-function . (lambda (w) (set-window-margins w 2 1))))) - + (org-agenda nil "j") + (jao-org-agenda-hook)) + +(defun jao-org-agenda-hook (&optional w) + (when-let* ((w (or w (get-buffer-window "*Org Agenda*")))) + (set-window-margins w 2 1) + (with-current-buffer (window-buffer w) + (setq-local cursor-in-non-selected-windows nil + line-spacing 0.2)))) + +;; (add-to-list 'display-buffer-alist +;; '((major-mode . org-agenda-mode) +;; (display-buffer-reuse-window) +;; (window-parameters (mode-line-format . none)) +;; (body-function . jao-org-agenda-hook))) + +;; (add-to-list 'display-buffer-alist +;; '("inbox\\.org" +;; (display-buffer-reuse-window) +;; (window-parameters (mode-line-format . none)))) ;;; Capture templates -(setq org-capture-templates - '(("t" "TODO" entry - (file+headline "inbox.org" "Todo") - "* TODO %?\n %i%a" :prepend t) - ("r" "REPLY" entry - (file+headline "inbox.org" "Todo") - "* REPLY %:subject%?\n %t\n %i%a" :prepend t) - ("a" "Appointment" entry - (file+olp "inbox.org" "Appointments") - "* %^T %?\n %a" :time-prompt t) - ("i" "Inbox note" entry (file+headline "inbox.org" "Notes") - "* %a\n %i%?(added on: %u)" :prepend t))) -;; (org-capture-upgrade-templates org-capture-templates) +(jao-when-darwin + (defun jao-org--safari-tmpl (&optional prefix) + (format "%s%s \n %%?" + (or prefix "* TOREAD ") + (org-mac-link-safari-get-frontmost-url))) + + (defun jao-org--safari-note-tmpl () (jao-org--safari-tmpl "- ")) + + (defun jao-org--mail-tmpl () + (format "* TODO %s \n %%?" (org-mac-link-mail-get-links)))) + +(defun jao-org--set-tmpl (k tmpl) + (setf (alist-get k org-capture-templates nil nil #'string=) tmpl)) + +(defun jao-org-capture-templates (target) + (jao-org--set-tmpl "t" + `("todo" entry (file+headline ,target "Tasks") + "* TODO %?\n %i%a" :prepend t)) + (jao-org--set-tmpl "i" + `("inbox note" entry (file+headline ,target "Notes") + "* %a\n %i%?(added on: %u)" :prepend t)) + (jao-org--set-tmpl "a" + `("appointment" entry (file+olp ,target "Appointments") + "* %^T %?\n %a" :time-prompt t)) + (jao-when-darwin + (jao-org--set-tmpl "s" + `("safari" entry (file+headline ,target "Tasks") + (function jao-org--safari-tmpl) + :after-finalize jao-org-after-capture-hook)) + + (jao-org--set-tmpl "S" + '("safari note" plain (file jao-org-notes-create) + (function jao-org--safari-note-tmpl) + :after-finalize jao-org-after-capture-hook)) + (jao-org--set-tmpl "m" + `("mail" entry (file+headline ,target "Tasks") + (function jao-org--mail-tmpl) + :after-finalize jao-org-after-capture-hook))) + (org-capture-upgrade-templates org-capture-templates)) + +(with-eval-after-load "org-capture" (jao-org-capture-templates "inbox.org")) ;;; MIME and file apps (setq org-file-apps - '((system . mailcap) - (".*\\.djvu" . system) - (t . emacs))) + (jao-d-l + '((remote . emacs) + (system . "open %s") + (t . emacs)) + '((system . mailcap) + (".*\\.djvu" . system) + (t . emacs)))) ;;; Appearance (use-package org-appear @@ -140,10 +194,9 @@ (use-package org-fragtog :after org :ensure t + :demand t :hook ((org-mode . org-fragtog-mode))) -(require 'org-fragtog) - (setq org-format-latex-options `(:foreground default :background @@ -160,6 +213,9 @@ (require 'ox-latex) +;;; Export (org) +(require 'ox-org) + ;;; Export (minted and pandoc) (setq org-latex-listings 'minted org-latex-packages-alist '(("" "minted")) @@ -167,10 +223,6 @@ '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f" "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f")) -;; (use-package ox-pandoc -;; :after org -;; :ensure t) - ;;; Babel and literate programming (setq org-src-window-setup 'other-window) ;; current-window (require 'org-tempo nil t) ;; <s TAB for 9.2 and later @@ -192,9 +244,12 @@ (python . t) (scheme .t) (shell . t) + (C . t) ;; (prolog . t) )) +(jao-define-attached-buffer "\\*Org Src\\( .*\\)?\\*" 0.5) + ;;; Org cliplink (link from clipboard) (use-package org-cliplink :ensure t @@ -275,7 +330,16 @@ (define-key doc-view-mode-map (kbd "C-c o") #'jao-org-pdf-goto-org) (define-key doc-view-mode-map (kbd "C-c O") #'jao-org-pdf-goto-org*)) -;; eldoc +;;;; mac links +(jao-when-darwin + (use-package org-mac-link + :ensure t + :bind (:map org-mode-map + ("C-c l m" . org-mac-link-mail-insert-link) + ("C-c l M" . org-mac-link-mail-insert-selected) + ("C-c l s" . org-mac-link-safari-insert-frontmost-url)))) + +;;; eldoc (defun jao-org-eldoc--hook () (set (make-local-variable 'eldoc-documentation-function) 'jao-org-link-at-point) @@ -290,6 +354,15 @@ (org-show-subtree)))) (add-hook 'org-mode-hook 'jao-org--show-if-hidden t) +;;; jao-org-focus +(use-package jao-org-focus + :commands (jao-org-focus org-focus-mode) + :after org + :config + (with-eval-after-load "jao-custom-completion" + (jao-consult-add-buffer-source 'jao-org-focus-consult-buffer-source)) + :bind ((:map org-mode-map (("C-M-o" . jao-org-focus))))) + ;;; Keybindings (define-key mode-specific-map [?a] 'org-agenda) (define-key org-mode-map "\C-cv" 'jao-org-copy-link-at-point) @@ -298,7 +371,9 @@ (define-key org-mode-map "\C-cE" 'jao-insert-eww-link) (define-key org-mode-map "\C-cW" 'jao-insert-eww-link) (define-key org-mode-map "\C-c'" 'org-edit-src-code) -(define-key org-mode-map "\C-cO" 'outline-hide-other) +(define-key org-mode-map (kbd "C-c O") 'org-toggle-narrow-to-subtree) +(define-key org-mode-map (kbd "C-x C-n") 'org-next-link) +(define-key org-mode-map (kbd "C-x C-p") 'org-previous-link) (global-set-key "\C-cr" 'org-capture) (global-set-key "\C-c\C-l" 'org-store-link) ;; (global-set-key "\C-cL" 'org-insert-link-global) @@ -306,7 +381,8 @@ (jao-transient-major-mode+ org ["Links" - ("le" "insert current eww link" jao-insert-eww-link) + ("le" "insert current eww link" jao-insert-eww-link :if jao-is-linux) + ("lm" "insert mac link" org-mac-link-get-link :if jao-is-darwin) ("lf" "insert link from clipboard" org-cliplink) ("lc" "copy link at point" jao-org-copy-link-at-point)]) |
