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

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

[elpa] externals/org 2e012db31a: org.el: Make sure `org-add-log-note' ru


From: ELPA Syncer
Subject: [elpa] externals/org 2e012db31a: org.el: Make sure `org-add-log-note' runs at the end of Org command
Date: Mon, 26 Sep 2022 08:57:58 -0400 (EDT)

branch: externals/org
commit 2e012db31a8dbae0f859b8fbfc899aeed3e34244
Author: Bhavin Gandhi <bhavin192@geeksocket.in>
Commit: Ihor Radchenko <yantar92@gmail.com>

    org.el: Make sure `org-add-log-note' runs at the end of Org command
    
    * lisp/org.el (org-add-log-setup): Save `this-command' and
    `recursion-depth' before adding the `org-add-log-note' to
    `post-command-hook'.
    (org-add-log-note): Execute only if the current `(recursion-depth)'
    and `this-command' are same as the ones we saved during the log-setup.
    
    (org-log-note-this-command):
    (org-log-note-recursion-depth): New variables storing `this-command'
    and `recursion-depth'.
    
    This change tries to make sure that we run the `org-add-log-note' only
    after the current Org command has finished executing.  Previously, the
    `post-command-hook' was getting triggered if the Org command in turn
    runs some other command.
    
    Fixes the bug originally reported by Michael Powe.
    
    Bhavin Gandhi. [BUG] org-auto-repeat-maybe: error "Can’t expand
    minibuffer to full frame" and missing log note.
    Sat, 18 Jun 2022 23:30:50 +0530.
    
https://list.orgmode.org/CAOn=hbcsOCO++We0XgRHFoxxCEXROCpyGd1nCjzKYy-9LckQZg@mail.gmail.com/
    
    Relevant discussion on bug-gnu-emacs: https://debbugs.gnu.org/56425
---
 lisp/org.el | 68 ++++++++++++++++++++++++++++++++++---------------------------
 1 file changed, 38 insertions(+), 30 deletions(-)

diff --git a/lisp/org.el b/lisp/org.el
index b16e99685f..036384a04b 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -10275,6 +10275,10 @@ WHAT entry will also be removed."
   "Remembered current time.
 So that dynamically scoped `org-extend-today-until' affects
 timestamps in state change log.")
+(defvar org-log-note-this-command
+  "`this-command' when `org-add-log-setup' is called.")
+(defvar org-log-note-recursion-depth
+  "`recursion-depth' when `org-add-log-setup' is called.")
 
 (defvar org-log-post-message nil
   "Message to be displayed after a log note has been stored.
@@ -10355,6 +10359,8 @@ EXTRA is additional text that will be inserted into the 
notes buffer."
        org-log-note-how how
        org-log-note-extra extra
        org-log-note-effective-time (org-current-effective-time)
+        org-log-note-this-command this-command
+        org-log-note-recursion-depth (recursion-depth)
         org-log-setup t)
   (add-hook 'post-command-hook 'org-add-log-note 'append))
 
@@ -10383,37 +10389,39 @@ EXTRA is additional text that will be inserted into 
the notes buffer."
 
 (defun org-add-log-note (&optional _purpose)
   "Pop up a window for taking a note, and add this note later."
-  (remove-hook 'post-command-hook 'org-add-log-note)
-  (setq org-log-setup nil)
-  (setq org-log-note-window-configuration (current-window-configuration))
-  (delete-other-windows)
-  (move-marker org-log-note-return-to (point))
-  (pop-to-buffer-same-window (marker-buffer org-log-note-marker))
-  (goto-char org-log-note-marker)
-  (org-switch-to-buffer-other-window "*Org Note*")
-  (erase-buffer)
-  (if (memq org-log-note-how '(time state))
-      (org-store-log-note)
-    (let ((org-inhibit-startup t)) (org-mode))
-    (insert (format "# Insert note for %s.
+  (when (and (equal org-log-note-this-command this-command)
+             (= org-log-note-recursion-depth (recursion-depth)))
+    (remove-hook 'post-command-hook 'org-add-log-note)
+    (setq org-log-setup nil)
+    (setq org-log-note-window-configuration (current-window-configuration))
+    (delete-other-windows)
+    (move-marker org-log-note-return-to (point))
+    (pop-to-buffer-same-window (marker-buffer org-log-note-marker))
+    (goto-char org-log-note-marker)
+    (org-switch-to-buffer-other-window "*Org Note*")
+    (erase-buffer)
+    (if (memq org-log-note-how '(time state))
+        (org-store-log-note)
+      (let ((org-inhibit-startup t)) (org-mode))
+      (insert (format "# Insert note for %s.
 # Finish with C-c C-c, or cancel with C-c C-k.\n\n"
-                   (cl-case org-log-note-purpose
-                     (clock-out "stopped clock")
-                     (done  "closed todo item")
-                     (reschedule "rescheduling")
-                     (delschedule "no longer scheduled")
-                     (redeadline "changing deadline")
-                     (deldeadline "removing deadline")
-                     (refile "refiling")
-                     (note "this entry")
-                     (state
-                      (format "state change from \"%s\" to \"%s\""
-                              (or org-log-note-previous-state "")
-                              (or org-log-note-state "")))
-                     (t (error "This should not happen")))))
-    (when org-log-note-extra (insert org-log-note-extra))
-    (setq-local org-finish-function 'org-store-log-note)
-    (run-hooks 'org-log-buffer-setup-hook)))
+                      (cl-case org-log-note-purpose
+                        (clock-out "stopped clock")
+                        (done  "closed todo item")
+                        (reschedule "rescheduling")
+                        (delschedule "no longer scheduled")
+                        (redeadline "changing deadline")
+                        (deldeadline "removing deadline")
+                        (refile "refiling")
+                        (note "this entry")
+                        (state
+                         (format "state change from \"%s\" to \"%s\""
+                                 (or org-log-note-previous-state "")
+                                 (or org-log-note-state "")))
+                        (t (error "This should not happen")))))
+      (when org-log-note-extra (insert org-log-note-extra))
+      (setq-local org-finish-function 'org-store-log-note)
+      (run-hooks 'org-log-buffer-setup-hook))))
 
 (defvar org-note-abort nil) ; dynamically scoped
 (defun org-store-log-note ()



reply via email to

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