diff --git a/emacs/feature/feature-org-denote.el b/emacs/feature/feature-org-denote.el new file mode 100644 index 0000000..b076f83 --- /dev/null +++ b/emacs/feature/feature-org-denote.el @@ -0,0 +1,23 @@ +;;; feature-org-denote.el --- denote extensions for org-mode +;;; Commentary: +;;; Setup org-mode denote extensions. +;;; +;;; Code: + +(require 'feature-org) + +(with-eval-after-load 'denote + (defvar denote-org-capture-specifiers) + (setq denote-org-capture-specifiers "%l\n%i\n%?") + (add-to-list 'org-capture-templates + '("n" "New note (with denote.el)" plain + (file denote-last-path) + #'denote-org-capture + :no-save t + :immediate-finish nil + :kill-buffer t + :jump-to-captured t))) + +(provide 'feature-org-denote) + +;;; feature-org-denote.el ends here. diff --git a/emacs/feature/feature-org.el b/emacs/feature/feature-org.el index dff7325..3f317a7 100644 --- a/emacs/feature/feature-org.el +++ b/emacs/feature/feature-org.el @@ -7,6 +7,27 @@ (require 'feature-pkg) (pkg/require 'org) +(require 'org) +(require 'org-agenda) +(require 'org-capture) + + +(defun my/visit-todo () + "Visit TODO.org in home." + (interactive) + (find-file "~/alioth/TODO.org")) + +(defun my/kill-all-org-agenda-buffers () + "Close all org-agenda-related buffers." + (interactive) + (dolist (buffer (buffer-list)) + (with-current-buffer buffer + (when (or (derived-mode-p 'org-agenda-mode) + (and (buffer-file-name) + (member (buffer-file-name) (org-agenda-files)))) + (kill-buffer buffer)))) + (message "Closed all org-agenda-related buffers.")) + (defun my-org-agenda-format-item (item) "Format an agenda or to-do ITEM without the filename, but keep the keyword." (let* ((marker (or (get-text-property 0 'org-marker item) @@ -33,83 +54,48 @@ (setq org-agenda-files (list "~/alioth/TODO.org")))) -(defun my/org-config () - "Setup personal 'org-mode' configuration." - (setq org-agenda-inhibit-startup t - org-adapt-indentation nil - org-todo-keywords '((sequence "HOLD(h)" "TODO(t)" "WAIT(w)" "|" - "DONE(d)" "CNCL(x)")) - org-todo-keyword-faces - '(("HOLD" . (:foreground "orange" :weight bold)) - ("TODO" . (:foreground "red" :weight bold)) - ("DONE" . (:foreground "green" :weight bold)) - ("CNCL" . (:foreground "gray" :weight bold))) - org-agenda-prefix-format '((agenda . "%i %?-12t% s ") - (todo . " %i ") - (tags . " %i ") - (search . " %i ")) - org-agenda-hide-tags-regexp "." - org-agenda-todo-keyword-format "%s" - org-archive-location "%s_archive::datetree/" - org-log-done 'note - org-agenda-hide-tags-regexp nil - org-agenda-tags-column -80 - org-log-into-drawer t) - (setq org-stuck-projects - '("+prj/-maybe-someday" ("TODO" "WAIT" "CNCL" "prj") nil "")) - (setq org-tags-exclude-from-inheritance '("prj"))) -(defun my/org-refile-config () - "Setup org-refile targets." - (defvar org-refile-targets) - (defvar org-refile-use-outline-path) - (defvar org-outline-path-complete-in-steps) - (defvar org-refile-allow-creating-parent-nodes) - (setq org-refile-targets - '((nil :maxlevel . 9) - ("~/alioth/lkn/TODO.org" :maxlevel . 9)) - org-refile-use-outline-path 'file - org-outline-path-complete-in-steps nil - org-refile-allow-creating-parent-nodes 'confirm)) +;; org-mode general settings +(setq org-adapt-indentation nil + org-archive-location "%s_archive::datetree/" + org-log-done 'note + org-log-into-drawer t + org-outline-path-complete-in-steps nil + org-stuck-projects '("+prj/-maybe-someday" + ("TODO" "WAIT" "CNCL" "prj") + nil + "") + org-tags-exclude-from-inheritance '("prj") + org-todo-keywords '((sequence "HOLD(h)" "TODO(t)" "WAIT(w)" "|" + "DONE(d)" "CNCL(x)")) + org-todo-keyword-faces + '(("HOLD" . (:foreground "orange" :weight bold)) + ("TODO" . (:foreground "red" :weight bold)) + ("DONE" . (:foreground "green" :weight bold)) + ("CNCL" . (:foreground "gray" :weight bold)))) -(defun my/org-capture-config () - "Setup org-capture." - (setq org-capture-templates - '(("t" "TODO" entry (file "~/alioth/TODO.org") - "* TODO %?\n %i" :prepend t))) - (with-eval-after-load 'denote - (defvar denote-org-capture-specifiers) - (setq denote-org-capture-specifiers "%l\n%i\n%?") - (add-to-list 'org-capture-templates - '("n" "New note (with denote.el)" plain - (file denote-last-path) - #'denote-org-capture - :no-save t - :immediate-finish nil - :kill-buffer t - :jump-to-captured t)))) +;; org-agenda settings +(setq org-agenda-prefix-format '((agenda . "%i %?-12t% s ") + (todo . " %i ") + (tags . " %i ") + (search . " %i ")) + org-agenda-inhibit-startup t + org-agenda-hide-tags-regexp "." + org-agenda-todo-keyword-format "%s" + org-agenda-hide-tags-regexp nil + org-agenda-tags-column -80) -(defun my/reload-org-config () - "Reload the org configuration." - (interactive) - (my/org-config) - (message "Org configuration reloaded")) +;; org-refile settings +(setq org-refile-targets + '((nil :maxlevel . 9) + ("~/alioth/lkn/TODO.org" :maxlevel . 9)) + org-refile-use-outline-path 'file + org-refile-allow-creating-parent-nodes 'confirm) -(defun my/visit-todo () - "Visit TODO.org in home." - (interactive) - (find-file "~/alioth/TODO.org")) - -(defun my/kill-all-org-agenda-buffers () - "Close all org-agenda-related buffers." - (interactive) - (dolist (buffer (buffer-list)) - (with-current-buffer buffer - (when (or (derived-mode-p 'org-agenda-mode) - (and (buffer-file-name) - (member (buffer-file-name) (org-agenda-files)))) - (kill-buffer buffer)))) - (message "Closed all org-agenda-related buffers.")) +;; org-capture settings +(setq org-capture-templates + '(("t" "TODO" entry (file "~/alioth/TODO.org") + "* TODO %?\n %i" :prepend t))) (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode)) (advice-add 'org-agenda :before #'my/add-remote-todo-file) @@ -120,7 +106,6 @@ (org-babel-do-load-languages 'org-babel-load-languages '((shell . t))) - ;; key bindings (global-set-key (kbd "C-x c O") 'my/reload-org-config) (global-set-key (kbd "C-x O a") 'org-agenda) diff --git a/emacs/init.el b/emacs/init.el index 6b097e8..34816ee 100644 --- a/emacs/init.el +++ b/emacs/init.el @@ -28,6 +28,7 @@ (require 'feature-which-key) ; memorization is for the birds (require 'feature-multi-cursor) ; do repeat yourself (require 'feature-org) ; when markdown isn't good enough +(require 'feature-org-denote) ; denote extensions for org (require 'feature-ctags) ; a fork for your spaghetti (require 'feature-detached) ; attachment causes suffering (require 'feature-denote) ; a second brain