]> git.earman.xyz Git - emacsinit.git/commitdiff
Major change to org setup
authorrearman <rearman@r717.net>
Fri, 20 Feb 2026 17:44:27 +0000 (12:44 -0500)
committerrearman <rearman@r717.net>
Fri, 20 Feb 2026 17:44:27 +0000 (12:44 -0500)
Using a slightly modified version of the org-gtd setup found at
https://github.com/rougier/emacs-gtd.  Greatly simplifies the whole org-mode
process, which I think will be better suited to my use case.

re/re-org-defuns.el
re/re-org.el

index 12e49c600ac4973e20efdb886d4a02c530955d0d..44be3b395d44ba81223753fbff4db6ec50a25545 100644 (file)
@@ -6,7 +6,7 @@
 (defun re/org-agenda-show-custom (&optional arg)
   "Show my custom agenda."
   (interactive "P")
-  (org-agenda arg " "))
+  (org-agenda arg "g"))
 
 (defun re/org-show-agenda (&optional arg)
   "Show the main agenda"
       (org-clock-in)
     (org-clock-out)))
 
+(defun re/org-save-all ()
+  "Save all `org-agenda-files' without user confirmation."
+  (interactive)
+  (message "Saving all org-agenda-files buffers...")
+  (save-some-buffers t
+                    (lambda ()
+                      (when (member (buffer-file-name) org-agenda-files) t)))
+  (message "Saving all org-agenda-files buffers... done"))
+
 (provide 're-org-defuns)
 ;;; re-org-defuns.el ends here
index e2cd51883d3cae31af1eab3114996c5bae74cc9a..daf61c16c469486457c07fb73154a75dada2dc97 100644 (file)
@@ -7,6 +7,7 @@
 
 (setq org-startup-indented t
       org-startup-with-inline-images t
+      org-startup-folded 'content
       org-cycle-inline-images-display t
       org-M-RET-may-split-line nil
       org-table-export-default-format "orgtbl-to-csv"
       '((file . find-file)))
 
 (setq org-directory "~/org"
-      org-agenda-files '("~/org")
-      org-default-notes-file "~/org/refile.org"
-      org-journal-file "~/org/journal.org")
+      org-agenda-files (mapcar 'file-truename (file-expand-wildcards "~/org/*.org"))
+      ;; org-default-notes-file "~/org/refile.org"
+      ;; org-journal-file "~/org/journal.org"
+      )
 
 (setq org-refile-targets '((nil :maxlevel . 9) (org-agenda-files :maxlevel . 9))
       org-refile-use-outline-path 'file
       org-refile-allow-creating-parent-nodes 'confirm)
 
-(setq org-todo-keywords '((sequence "TODO(t)"
-                                   "WAITING(w@/!)"
-                                   "IN-PROGRESS(i!)"
-                                   "ORDERED(o!)"
-                                   "QUOTED(q!)"
-                                   "|"
-                                   "RECEIVED(r!/@)"
-                                   "DELEGATED(l@)"
-                                   "DONE(d!/@)"
-                                   "CANCELLED(c@)")))
-
-(setq org-tag-alist '((:startgroup . nil)
-                     ("licenses" . ?l)
-                     ("need" . ?n)
-                     ("standard" . ?s)
-                     ("wisdom" . ?w)
-                     (:endgroup . nil)))
+(setq org-todo-keywords
+      '((sequence "TODO(t)" "NEXT(n)" "HOLD(h)" "|" "DONE(d)")))
+
+(defun log-todo-next-creation-date (&rest ignore)
+  "Log NEXT creation time in the property drawer under the key 'ACTIVATED'"
+  (when (and (string= (org-get-todo-state) "NEXT")
+            (not (org-entry-get nil "ACTIVATED")))
+    (org-entry-put nil "ACTIVATED" (format-time-string "[%Y-%m-%d]"))))
+
+(add-hook 'org-after-todo-state-change-hook #'log-todo-next-creation-date)
+
+;; (setq org-todo-keywords '((sequence "TODO(t)"
+;;                                 "WAITING(w@/!)"
+;;                                 "IN-PROGRESS(i!)"
+;;                                 "ORDERED(o!)"
+;;                                 "QUOTED(q!)"
+;;                                 "|"
+;;                                 "RECEIVED(r!/@)"
+;;                                 "DELEGATED(l@)"
+;;                                 "DONE(d!/@)"
+;;                                 "CANCELLED(c@)")))
+
+;; (setq org-tag-alist '((:startgroup . nil)
+;;                   ("licenses" . ?l)
+;;                   ("need" . ?n)
+;;                   ("standard" . ?s)
+;;                   ("wisdom" . ?w)
+;;                   (:endgroup . nil)))
 
 (setq org-agenda-restore-windows-after-quit t
       org-agenda-start-on-weekday 0
-      org-agenda-span 14
+      org-agenda-span 10
       org-deadline-warning-days 30
       org-agenda-window-setup 'current-window
-      org-agenda-remove-tags t
-      org-agenda-prefix-format '((agenda . " %:c %b %?-12t% s")
-                                (todo . " %:c % b")
-                                (tags . " %:c % b")
-                                (search . " %:c % b")))
+      org-agenda-remove-tags t)
+;; org-agenda-prefix-format '((agenda . " %:c %b %?-12t% s")
+;;                              (todo . " %:c % b")
+;;                              (tags . " %:c % b")
+;;                              (search . " %:c % b")))
 
 (setq org-agenda-custom-commands
-      '((" " "Agenda"
+      '(("g" "Get Things Done (GTD)"
+        ((agenda ""
+                 ((org-agenda-skip-function
+                   '(org-agenda-skip-entry-if 'deadline))
+                  (org-deadline-warning-days 0)))
+         (todo "NEXT"
+               ((org-agenda-skip-function
+                 '(org-agenda-skip-entry-if 'deadline))
+                (org-agenda-prefix-format "  %i %-12:c [%e] ")
+                (org-agenda-overriding-header "\nTasks\n")))
+         (agenda nil
+                 ((org-agenda-entry-types '(:deadline))
+                  (org-agenda-format-date "")
+                  (org-deadline-warning-days 7)
+                  (org-agenda-skip-function
+                   '(org-agenda-skip-entry-if 'notregexp "\\* NEXT"))
+                  (org-agenda-overriding-header "\nDeadlines")))
+         (tags-todo "inbox"
+                    ((org-agenda-prefix-format "  %?-12t% s")
+                     (org-agenda-overriding-header "\nInbox\n")))
+         (tags "CLOSED>=\"<today>\""
+               ((org-agenda-overriding-header "\nCompleted today\n")))))
+       (" " "Agenda"
         ((tags "need"
                ((org-agenda-overriding-header "Needed Items")))
          (tags-todo "-REFILE+TODO=\"IN-PROGRESS\""
 (setq org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA"
       org-agenda-start-with-log-mode t)
 
-(setq org-capture-templates '(("n"
-                              "Note"
-                              entry
-                              (file org-default-notes-file)
-                              "* %?\n%T")
-                             ("t"
-                              "TODO"
-                              entry
-                              (file org-default-notes-file)
-                              "* TODO %?\n%t\n")
-                             ("f"
-                              "TODO in Future"
-                              entry
-                              (file org-default-notes-file)
-                              "* TODO %?\nSCHEDULED: %^t\n")
-                             ("d"
-                              "TODO with Deadline"
-                              entry
-                              (file org-default-notes-file)
-                              "* TODO %?\nDEADLINE: %^t\n")
-                             ("l"
-                              "Purchase Licenses"
-                              entry
-                              (file org-default-notes-file)
-                              "* TODO Get Licenses :licenses:\nDEADLINE: %^t\n- [ ] HMI\n- [ ] IO Server\n")
-                             ("m"
-                              "Meeting"
-                              entry
-                              (file+olp+datetree org-journal-file)
-                              "* %? :meeting:\n%^T\n** Notes\n** Action Items")
-                             ("s"
-                              "Semi-Weekly PLC Meeting"
-                              entry
-                              (file+olp+datetree org-journal-file)
-                              "* Semi-Weekly PLC Meeting :plc:semiweekly:meeting:%^g \n%t\n** ITEM1")
-                             ("j"
-                              "Journal"
-                              entry
-                              (file+olp+datetree org-journal-file)
-                              "* %?\n%T\n")))
+(setq org-capture-templates
+      `(("i" "Inbox" entry  (file "inbox.org")
+        ,(concat "* TODO %?\n"
+                 "/Entered on/ %U"))
+       ("m" "Meeting" entry  (file+headline "agenda.org" "Future")
+        ,(concat "* %? :meeting:\n"
+                 "<%<%Y-%m-%d %a %H:00>>"))
+       ("n" "Note" entry  (file "notes.org")
+        ,(concat "* Note (%a)\n"
+                 "/Entered on/ %U\n" "\n" "%?"))
+       ("@" "Inbox [mu4e]" entry (file "inbox.org")
+        ,(concat "* TODO Reply to \"%a\" %?\n"
+                 "/Entered on/ %U"))))
+
+;; (setq org-capture-templates '(("n"
+;;                            "Note"
+;;                            entry
+;;                            (file org-default-notes-file)
+;;                            "* %?\n%T")
+;;                           ("t"
+;;                            "TODO"
+;;                            entry
+;;                            (file org-default-notes-file)
+;;                            "* TODO %?\n%t\n")
+;;                           ("f"
+;;                            "TODO in Future"
+;;                            entry
+;;                            (file org-default-notes-file)
+;;                            "* TODO %?\nSCHEDULED: %^t\n")
+;;                           ("d"
+;;                            "TODO with Deadline"
+;;                            entry
+;;                            (file org-default-notes-file)
+;;                            "* TODO %?\nDEADLINE: %^t\n")
+;;                           ("l"
+;;                            "Purchase Licenses"
+;;                            entry
+;;                            (file org-default-notes-file)
+;;                            "* TODO Get Licenses :licenses:\nDEADLINE: %^t\n- [ ] HMI\n- [ ] IO Server\n")
+;;                           ("m"
+;;                            "Meeting"
+;;                            entry
+;;                            (file+olp+datetree org-journal-file)
+;;                            "* %? :meeting:\n%^T\n** Notes\n** Action Items")
+;;                           ("s"
+;;                            "Semi-Weekly PLC Meeting"
+;;                            entry
+;;                            (file+olp+datetree org-journal-file)
+;;                            "* Semi-Weekly PLC Meeting :plc:semiweekly:meeting:%^g \n%t\n** ITEM1")
+;;                           ("j"
+;;                            "Journal"
+;;                            entry
+;;                            (file+olp+datetree org-journal-file)
+;;                            "* %?\n%T\n")))
 
 (setq org-id-link-to-org-use-id 'create-if-interactive-and-no-custom-id
       org-id-method 'ts
       org-attach-id-to-path-function-list '(org-attach-id-ts-folder-format
                                            org-attach-id-uuid-folder-format))
 
+(advice-add 'org-refile :after (lambda (&rest _) (re/org-save-all)))
+
 (provide 're-org)
 ;;; re-org.el ends here