aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/org-capture-config.el74
1 files changed, 19 insertions, 55 deletions
diff --git a/modules/org-capture-config.el b/modules/org-capture-config.el
index 393f1d97b..18e130dc6 100644
--- a/modules/org-capture-config.el
+++ b/modules/org-capture-config.el
@@ -400,34 +400,21 @@ never split the small floating frame."
cj/org-capture--display-sole-window))
;; The desktop quick-capture popup is launched globally (no browser selection,
-;; no mu4e message, no pdf/epub buffer), so most templates make no sense there:
-;; the context fields (%:link, %i) come up empty or point at the daemon's last
-;; buffer, and the pdf templates error outright. `cj/quick-capture' offers only
-;; Task, Bug, and Event; Task and Bug file to the global inbox rather than a
-;; project todo.org, since a desktop capture has no meaningful project context.
-;; It also closes the popup frame on every exit path (abort, error, finalize) —
-;; `org-capture' only runs `org-capture-after-finalize-hook' on a completed
-;; capture, so a q/C-g at the template menu or an erroring template would
-;; otherwise orphan the frame. The Hyprland script calls this instead of
-;; `org-capture'.
-
-(defun cj/--org-capture-popup-templates (templates inbox)
- "Return the desktop-popup subset of TEMPLATES: Task, Bug, Event.
-Task (\"t\") and Bug (\"b\") are retargeted to INBOX's \"Inbox\" headline;
-Event (\"e\") passes through unchanged. All other templates are dropped.
-Template bodies and properties are preserved."
- (delq nil
- (mapcar
- (lambda (entry)
- (pcase (car-safe entry)
- ((or "t" "b")
- ;; (KEY DESC TYPE TARGET TEMPLATE . PROPS) -> retarget TARGET
- (append (list (nth 0 entry) (nth 1 entry) (nth 2 entry)
- (list 'file+headline inbox "Inbox"))
- (nthcdr 4 entry)))
- ("e" entry)
- (_ nil)))
- templates)))
+;; no mu4e message, no pdf/epub buffer), so the context-dependent templates make
+;; no sense there. `cj/quick-capture' captures a single Task straight into the
+;; global inbox -- no template menu -- under its "Inbox" headline, since a
+;; desktop capture has no meaningful project context. It closes the popup frame
+;; on every exit path (abort, error, finalize): `org-capture' runs
+;; `org-capture-after-finalize-hook' only on a completed capture, so a C-g or an
+;; erroring template would otherwise orphan the frame. The Hyprland script
+;; calls this instead of `org-capture'.
+
+(defun cj/--quick-capture-template (inbox)
+ "Return the desktop quick-capture template: a single Task into INBOX's Inbox.
+INBOX is the inbox file path; the Task files under its \"Inbox\" headline."
+ (list (list "t" "Task" 'entry
+ (list 'file+headline inbox "Inbox")
+ "* TODO %?" :prepend t)))
(defun cj/org-capture--popup-frame ()
"Return a live frame named \"org-capture\" (the quick-capture popup), or nil."
@@ -438,8 +425,8 @@ Template bodies and properties are preserved."
(defun cj/quick-capture ()
"Org-capture entry point for the Hyprland desktop popup (frame \"org-capture\").
-Offers only Task, Bug, and Event; Task and Bug file to the global inbox.
-Closes the popup frame on abort or error so a stray selection never orphans it.
+Captures a single Task into the global inbox, with no template menu.
+Closes the popup frame on abort or error so a stray launch never orphans it.
Selects the \"org-capture\" frame by name before capturing rather than trusting
the ambient selected frame: the launching =emacsclient -c -e= runs before
@@ -450,34 +437,11 @@ daemon's main frame and the capture would otherwise land there."
(condition-case err
(progn
(when frame (select-frame-set-input-focus frame))
- (let ((org-capture-templates
- (cj/--org-capture-popup-templates org-capture-templates inbox-file)))
- (org-capture)))
+ (let ((org-capture-templates (cj/--quick-capture-template inbox-file)))
+ (org-capture nil "t")))
(quit (cj/org-capture--delete-popup-frame))
(error (message "Quick-capture: %s" (error-message-string err))
(cj/org-capture--delete-popup-frame)))))
-;; The template menu's "C — Customize org-capture-templates" special makes no
-;; sense in the desktop popup (it would open a Customize buffer in the floating
-;; frame). Strip it from the menu when the selection runs in the popup frame,
-;; keeping "q — Abort". `org-mks' is the menu primitive; advising it (gated on
-;; the frame name) catches the capture template selection without touching
-;; org-mks's other callers.
-
-(defun cj/--org-capture-popup-strip-specials (specials)
- "Remove the \"C\" Customize entry from org-mks SPECIALS, keeping the rest.
-SPECIALS is the org-mks specials alist (e.g. the Customize and Abort entries)."
- (delq nil (mapcar (lambda (s) (unless (equal (car-safe s) "C") s)) specials)))
-
-(defun cj/org-capture--popup-mks-advice (orig table title &optional prompt specials)
- "Around-advice for `org-mks': hide the Customize special in the quick-capture popup.
-ORIG is the real `org-mks'; TABLE TITLE PROMPT SPECIALS are its arguments."
- (funcall orig table title prompt
- (if (cj/org-capture--popup-frame-p)
- (cj/--org-capture-popup-strip-specials specials)
- specials)))
-
-(advice-add 'org-mks :around #'cj/org-capture--popup-mks-advice)
-
(provide 'org-capture-config)
;;; org-capture-config.el ends here.