emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/embark d1069bb4e5 1/3: Unify the org-heading and org-re


From: ELPA Syncer
Subject: [elpa] externals/embark d1069bb4e5 1/3: Unify the org-heading and org-remote-heading types
Date: Thu, 14 Sep 2023 12:57:57 -0400 (EDT)

branch: externals/embark
commit d1069bb4e50d93843dc77226b3984342cc6e0945
Author: Omar Antolín <omar.antolin@gmail.com>
Commit: Omar Antolín <omar.antolin@gmail.com>

    Unify the org-heading and org-remote-heading types
    
    The only price of the unification is how ugly
    embark-org-heading-default-action is. 🙃
---
 embark-org.el | 50 ++++++++++++++++++++++++++++++++------------------
 1 file changed, 32 insertions(+), 18 deletions(-)

diff --git a/embark-org.el b/embark-org.el
index 7650980a21..4b406ec8b3 100644
--- a/embark-org.el
+++ b/embark-org.el
@@ -554,7 +554,11 @@ REST are the remaining arguments."
 
 (keymap-set embark-encode-map "o" 'embark-org-export-in-place-map)
 
-;;; Org remote headings, such as agenda items
+;;; References to Org headings, such as agenda items
+
+;; These are targets that represent an org heading but not in the
+;; current buffer, instead they have a text property named
+;; `org-marker' that points to the actual heading.
 
 (defun embark-org-target-agenda-item ()
   "Target Org agenda item at point."
@@ -562,16 +566,14 @@ REST are the remaining arguments."
              (get-text-property (line-beginning-position) 'org-marker))
     (let ((start (+ (line-beginning-position) (current-indentation)))
           (end (line-end-position)))
-      `(org-remote-heading ,(buffer-substring start end) ,start . ,end))))
+      `(org-heading ,(buffer-substring start end) ,start . ,end))))
 
 (let ((tail (memq 'embark-org-target-element-context embark-target-finders)))
   (cl-pushnew 'embark-org-target-agenda-item (cdr tail)))
 
-(add-to-list 'embark-keymap-alist '(org-remote-heading embark-org-heading-map))
-
-(cl-defun embark-org--at-remote-heading
+(cl-defun embark-org--at-org-heading
     (&rest rest &key run target &allow-other-keys)
-  "RUN the action at the location of the remote heading.
+  "RUN the action at the location of the heading TARGET refers to.
 The location is given by the `org-marker' text property of
 target.  Applies RUN to the REST of the arguments."
   (if-let ((marker (get-text-property 0 'org-marker target)))
@@ -579,38 +581,50 @@ target.  Applies RUN to the REST of the arguments."
         (apply run :target target rest))
     (apply run :target target rest)))
 
-(defun embark-org-goto-remote-heading (&rest args)
-  "Jump to org remote heading TARGET."
-  (when-let ((target (if (cdr args) (plist-get args :target) (car args)))
-             (marker (get-text-property 0 'org-marker target)))
+(cl-defun embark-org-goto-heading (&key target &allow-other-keys)
+  "Jump to the org heading TARGET refers to."
+  (when-let ((marker (get-text-property 0 'org-marker target)))
     (pop-to-buffer (marker-buffer marker))
     (widen)
     (goto-char marker)
     (org-fold-reveal)
     (pulse-momentary-highlight-one-line)))
 
-(defconst embark-org--invisible-jump-to-remote-heading
+(defun embark-org-heading-default-action (target)
+  "Default action for Org headings.
+There are two types of heading targets: the heading at point in a
+normal org buffer, and references to org headings in some other
+buffer (for example, org agenda items). For references the
+default action is to jump to the reference, and for the heading
+at point, the default action is whatever is bound to RET in
+`embark-org-heading-map' or `org-todo' if RET is unbound."
+  (if (get-text-property 0 'org-marker target)
+      (embark-org-goto-heading :target target)
+    (command-execute
+     (or (keymap-lookup embark-org-heading-map "RET") #'org-todo))))
+
+(defconst embark-org--invisible-jump-to-heading
   '(org-tree-to-indirect-buffer
     org-refile
     org-clock-in
     org-clock-out
     org-archive-subtree-default-with-confirmation
     org-store-link)
-  "Org remote heading actions for which we don't display the heading's 
buffer.")
+  "Org heading actions which won't display the heading's buffer.")
 
-(setf (alist-get 'org-remote-heading embark-default-action-overrides)
-      #'embark-org-goto-remote-heading)
+(setf (alist-get 'org-heading embark-default-action-overrides)
+      #'embark-org-heading-default-action)
 
 (map-keymap
  (lambda (_key cmd)
    (unless (or (where-is-internal cmd (list embark-general-map))
-               (memq cmd embark-org--invisible-jump-to-remote-heading))
-     (cl-pushnew 'embark-org-goto-remote-heading
+               (memq cmd embark-org--invisible-jump-to-heading))
+     (cl-pushnew 'embark-org-goto-heading
                  (alist-get cmd embark-pre-action-hooks))))
  embark-org-heading-map)
 
-(dolist (cmd embark-org--invisible-jump-to-remote-heading)
-  (cl-pushnew 'embark-org--at-remote-heading
+(dolist (cmd embark-org--invisible-jump-to-heading)
+  (cl-pushnew 'embark-org--at-heading
               (alist-get cmd embark-around-action-hooks)))
 
 (provide 'embark-org)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]