refactor: rename my-*/my- prefix to gortium/*; org-add-note for metric log

This commit is contained in:
2026-08-11 11:06:49 -04:00
parent 655e9d929f
commit b085f5fa2f
2 changed files with 44 additions and 46 deletions

View File

@@ -48,14 +48,14 @@ they are implemented.
(setq fancy-splash-image (expand-file-name "hermes_logo_ascii.png" doom-user-dir))
;; 2. Define the quote function
(defun my-dashboard-quote ()
(defun gortium/dashboard-quote ()
(insert "\n" (+dashboard--center +dashboard--width "Simplicity is the ultimate sophistication.") "\n"))
;; 3. Override the functions list using the correct variable from the docs
(after! doom-dashboard
(setq +dashboard-functions
'(+dashboard-widget-banner
my-dashboard-quote
gortium/dashboard-quote
+dashboard-widget-loaded
+dashboard-widget-shortmenu
+dashboard-widget-footer)))
@@ -2766,7 +2766,7 @@ only injects when the project's context-tag matches current mu4e context."
(rx (or (: "http" (? "s") "://" (* nonl) "youtube.com" (* nonl))
(: "http" (? "s") "://" (* nonl) "youtu.be" (* nonl))))))
(defun my-elfeed-tube-add-to-emms ()
(defun gortium/elfeed-tube-add-to-emms ()
"Add the currently selected Elfeed video(s) to the EMMS playlist."
(interactive)
(let ((entries (if (eq major-mode 'elfeed-show-mode)
@@ -2782,10 +2782,10 @@ only injects when the project's context-tag matches current mu4e context."
;; Bind the function to 'e' in both elfeed views
(map! :map elfeed-search-mode-map
:n "e" #'my-elfeed-tube-add-to-emms)
:n "e" #'gortium/elfeed-tube-add-to-emms)
(map! :map elfeed-show-mode-map
:n "e" #'my-elfeed-tube-add-to-emms)
:n "e" #'gortium/elfeed-tube-add-to-emms)
#+end_src
* EAF
#+begin_src emacs-lisp
@@ -3384,15 +3384,13 @@ and ensure the standard property drawer exists without overwriting existing data
nil 'tree)))
#+end_src
#+RESULTS:
: gortium/add-ids-to-subtree
** Maintenance Engine
#+begin_src emacs-lisp
(after! org
;; ---------------------------------------------------------
;; 1. THE REUSABLE ENGINE (Domain Agnostic)
;; ---------------------------------------------------------
(defun my/org-metric-sync-engine (&key prop-name value-current prop-last-done prop-interval target-tag log-label)
(defun gortium/org-metric-sync-engine (&key prop-name value-current prop-last-done prop-interval target-tag log-label)
"Core logic to sync parent metrics to sub-tasks and log changes.
PROP-NAME: The property triggering the change (e.g., LAST_KM).
VALUE-CURRENT: The new value being set.
@@ -3403,7 +3401,7 @@ and ensure the standard property drawer exists without overwriting existing data
(save-excursion
;; A. Log the update to the Logbook with a timestamp
(when log-label
(org-add-log-setup 'note (format "%s: %s" log-label value-current) nil 'findpos))
(org-add-note (format "%s: %s" log-label value-current)))
;; B. Narrow scope to current header and scan sub-tasks
(org-narrow-to-subtree)
@@ -3420,7 +3418,7 @@ and ensure the standard property drawer exists without overwriting existing data
target-tag)
(widen)))
(defun my/org-metric-prompt-engine (&key state tag prop-parent-metric prop-task-done label-prompt)
(defun gortium/org-metric-prompt-engine (&key state tag prop-parent-metric prop-task-done label-prompt)
"Core logic to prompt for values when a task is marked DONE.
STATE: The new TODO state (e.g., DONE).
TAG: The tag identifying relevant tasks.
@@ -3446,48 +3444,48 @@ and ensure the standard property drawer exists without overwriting existing data
;; ---------------------------------------------------------
;; 2. THE DISPATCHERS (The Switchboard)
;; ---------------------------------------------------------
(defun my/org-property-change-handler (prop value)
(defun gortium/org-property-change-handler (prop value)
"Routes property changes to the correct sync parameters."
(cond
;; Case: F-150 Odometer
((string= prop "LAST_KM")
(my/org-metric-sync-engine
(gortium/org-metric-sync-engine
:prop-name prop :value-current value :prop-last-done "LAST_DONE_KM"
:prop-interval "INTERVAL_KM" :target-tag "SERVICE" :log-label "Odometer Update"))))
:prop-interval "INTERVAL_KM" :target-tag "SERVICE" :log-label "Odometer Update")))))
;; Case: Equipment/Industrial Hours
;; ((string= prop "LAST_HOURS")
;; (my/org-metric-sync-engine
;; (gortium/org-metric-sync-engine
;; :prop-name prop :value-current value :prop-last-done "LAST_DONE_HOURS"
;; :prop-interval "INTERVAL_HOURS" :target-tag "MAINTENANCE" :log-label "Usage Hours Logged"))))
(defun my/org-todo-state-handler ()
(defun gortium/org-todo-state-handler ()
"Safely routes DONE completions, catching any argument errors."
(interactive)
(condition-case err
(when (string= org-state "DONE")
(my/org-metric-prompt-engine
(gortium/org-metric-prompt-engine
:state "DONE"
:tag "SERVICE"
:prop-parent-metric "LAST_KM"
:prop-task-done "LAST_DONE_KM"
:label-prompt "Current Odometer"))
(error (message "Handler suppressed error: %s" (error-message-string err)))))
)
;; (my/org-metric-prompt-engine
(error (message "Handler suppressed error: %s" (error-message-string err)))))
;; (gortium/org-metric-prompt-engine
;; :state org-state :tag "MAINTENANCE" :prop-parent-metric "LAST_HOURS"
;; :prop-task-done "LAST_DONE_HOURS" :label-prompt "Equipment Hours"))
;; ---------------------------------------------------------
;; 3. THE HOOKS
;; ---------------------------------------------------------
(add-hook 'org-after-prop-change-hook #'my/org-property-change-handler)
(add-hook 'org-after-todo-state-change-hook #'my/org-todo-state-handler)
(add-hook 'org-after-prop-change-hook #'gortium/org-property-change-handler)
(add-hook 'org-after-todo-state-change-hook #'gortium/org-todo-state-handler)
#+end_src
** Rescheduling task later
#+begin_src emacs-lisp
(defun my/org-smart-advance-date ()
(defun gortium/org-smart-advance-date ()
"Jump to next repeater occurrence or add 1 day.
Suppresses all logging, notes, and custom odometer hooks."
(interactive)
@@ -3519,9 +3517,9 @@ Suppresses all logging, notes, and custom odometer hooks."
(map! :after org
(:map org-mode-map
:localleader "L" #'my/org-smart-advance-date)
:localleader "L" #'gortium/org-smart-advance-date)
(:map org-agenda-mode-map
:localleader "L" #'my/org-smart-advance-date))
:localleader "L" #'gortium/org-smart-advance-date))
#+end_src
** Open link in other frame

View File

@@ -4,14 +4,14 @@
(setq fancy-splash-image (expand-file-name "hermes_logo_ascii.png" doom-user-dir))
;; 2. Define the quote function
(defun my-dashboard-quote ()
(defun gortium/dashboard-quote ()
(insert "\n" (+dashboard--center +dashboard--width "Simplicity is the ultimate sophistication.") "\n"))
;; 3. Override the functions list using the correct variable from the docs
(after! doom-dashboard
(setq +dashboard-functions
'(+dashboard-widget-banner
my-dashboard-quote
gortium/dashboard-quote
+dashboard-widget-loaded
+dashboard-widget-shortmenu
+dashboard-widget-footer)))
@@ -1906,7 +1906,7 @@ only injects when the project's context-tag matches current mu4e context."
(rx (or (: "http" (? "s") "://" (* nonl) "youtube.com" (* nonl))
(: "http" (? "s") "://" (* nonl) "youtu.be" (* nonl))))))
(defun my-elfeed-tube-add-to-emms ()
(defun gortium/elfeed-tube-add-to-emms ()
"Add the currently selected Elfeed video(s) to the EMMS playlist."
(interactive)
(let ((entries (if (eq major-mode 'elfeed-show-mode)
@@ -1922,10 +1922,10 @@ only injects when the project's context-tag matches current mu4e context."
;; Bind the function to 'e' in both elfeed views
(map! :map elfeed-search-mode-map
:n "e" #'my-elfeed-tube-add-to-emms)
:n "e" #'gortium/elfeed-tube-add-to-emms)
(map! :map elfeed-show-mode-map
:n "e" #'my-elfeed-tube-add-to-emms)
:n "e" #'gortium/elfeed-tube-add-to-emms)
(use-package! eaf
:load-path "~/.config/emacs/.local/straight/repos/emacs-application-framework"
@@ -2478,7 +2478,7 @@ and ensure the standard property drawer exists without overwriting existing data
;; ---------------------------------------------------------
;; 1. THE REUSABLE ENGINE (Domain Agnostic)
;; ---------------------------------------------------------
(defun my/org-metric-sync-engine (&key prop-name value-current prop-last-done prop-interval target-tag log-label)
(defun gortium/org-metric-sync-engine (&key prop-name value-current prop-last-done prop-interval target-tag log-label)
"Core logic to sync parent metrics to sub-tasks and log changes.
PROP-NAME: The property triggering the change (e.g., LAST_KM).
VALUE-CURRENT: The new value being set.
@@ -2489,7 +2489,7 @@ and ensure the standard property drawer exists without overwriting existing data
(save-excursion
;; A. Log the update to the Logbook with a timestamp
(when log-label
(org-add-log-setup 'note (format "%s: %s" log-label value-current) nil 'findpos))
(org-add-note (format "%s: %s" log-label value-current)))
;; B. Narrow scope to current header and scan sub-tasks
(org-narrow-to-subtree)
@@ -2506,7 +2506,7 @@ and ensure the standard property drawer exists without overwriting existing data
target-tag)
(widen)))
(defun my/org-metric-prompt-engine (&key state tag prop-parent-metric prop-task-done label-prompt)
(defun gortium/org-metric-prompt-engine (&key state tag prop-parent-metric prop-task-done label-prompt)
"Core logic to prompt for values when a task is marked DONE.
STATE: The new TODO state (e.g., DONE).
TAG: The tag identifying relevant tasks.
@@ -2532,45 +2532,45 @@ and ensure the standard property drawer exists without overwriting existing data
;; ---------------------------------------------------------
;; 2. THE DISPATCHERS (The Switchboard)
;; ---------------------------------------------------------
(defun my/org-property-change-handler (prop value)
(defun gortium/org-property-change-handler (prop value)
"Routes property changes to the correct sync parameters."
(cond
;; Case: F-150 Odometer
((string= prop "LAST_KM")
(my/org-metric-sync-engine
(gortium/org-metric-sync-engine
:prop-name prop :value-current value :prop-last-done "LAST_DONE_KM"
:prop-interval "INTERVAL_KM" :target-tag "SERVICE" :log-label "Odometer Update"))))
:prop-interval "INTERVAL_KM" :target-tag "SERVICE" :log-label "Odometer Update")))))
;; Case: Equipment/Industrial Hours
;; ((string= prop "LAST_HOURS")
;; (my/org-metric-sync-engine
;; (gortium/org-metric-sync-engine
;; :prop-name prop :value-current value :prop-last-done "LAST_DONE_HOURS"
;; :prop-interval "INTERVAL_HOURS" :target-tag "MAINTENANCE" :log-label "Usage Hours Logged"))))
(defun my/org-todo-state-handler ()
(defun gortium/org-todo-state-handler ()
"Safely routes DONE completions, catching any argument errors."
(interactive)
(condition-case err
(when (string= org-state "DONE")
(my/org-metric-prompt-engine
(gortium/org-metric-prompt-engine
:state "DONE"
:tag "SERVICE"
:prop-parent-metric "LAST_KM"
:prop-task-done "LAST_DONE_KM"
:label-prompt "Current Odometer"))
(error (message "Handler suppressed error: %s" (error-message-string err)))))
)
;; (my/org-metric-prompt-engine
(error (message "Handler suppressed error: %s" (error-message-string err)))))
;; (gortium/org-metric-prompt-engine
;; :state org-state :tag "MAINTENANCE" :prop-parent-metric "LAST_HOURS"
;; :prop-task-done "LAST_DONE_HOURS" :label-prompt "Equipment Hours"))
;; ---------------------------------------------------------
;; 3. THE HOOKS
;; ---------------------------------------------------------
(add-hook 'org-after-prop-change-hook #'my/org-property-change-handler)
(add-hook 'org-after-todo-state-change-hook #'my/org-todo-state-handler)
(add-hook 'org-after-prop-change-hook #'gortium/org-property-change-handler)
(add-hook 'org-after-todo-state-change-hook #'gortium/org-todo-state-handler)
(defun my/org-smart-advance-date ()
(defun gortium/org-smart-advance-date ()
"Jump to next repeater occurrence or add 1 day.
Suppresses all logging, notes, and custom odometer hooks."
(interactive)
@@ -2602,9 +2602,9 @@ Suppresses all logging, notes, and custom odometer hooks."
(map! :after org
(:map org-mode-map
:localleader "L" #'my/org-smart-advance-date)
:localleader "L" #'gortium/org-smart-advance-date)
(:map org-agenda-mode-map
:localleader "L" #'my/org-smart-advance-date))
:localleader "L" #'gortium/org-smart-advance-date))
;; Open link in another frame
(defun gortium/org-open-link-in-other-frame ()