emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Saving some kitten, plus some questions along the way
@ 2024-05-18 15:22 Stefan Monnier
  2024-05-19 11:56 ` Ihor Radchenko
  0 siblings, 1 reply; 8+ messages in thread
From: Stefan Monnier @ 2024-05-18 15:22 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/markdown, Size: 414 bytes --]

The patch below replaces a use of `eval` with `apply`, but along the way
I wondered about some of the details of `org-eval-in-calendar` (see the
FIXMEs), the most important of them being: why doesn't it use
`with-selected-window`?

Assuming the change from `eval` to `apply` is OK, I'll upgrade my patch
with an appropriate commit message, but I'd first like to understand
better what's at stake.


        Stefan

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: org.patch --]
[-- Type: text/x-diff, Size: 6935 bytes --]

diff --git a/lisp/org-keys.el b/lisp/org-keys.el
index 50e05efa1b..fc5fd53aa8 100644
--- a/lisp/org-keys.el
+++ b/lisp/org-keys.el
@@ -89,7 +89,6 @@
 (declare-function org-emphasize "org" (&optional char))
 (declare-function org-end-of-line "org" (&optional n))
 (declare-function org-entry-put "org" (pom property value))
-(declare-function org-eval-in-calendar "org" (form &optional keepdate))
 (declare-function org-calendar-goto-today-or-insert-dot "org" ())
 (declare-function org-calendar-goto-today "org" ())
 (declare-function org-calendar-backward-month "org" ())
@@ -390,9 +389,9 @@ COMMANDS is a list of alternating OLDDEF NEWDEF command names."
 ;;; Global bindings
 
 ;;;; Outline functions
-(define-key org-mode-map [menu-bar headings] 'undefined)
-(define-key org-mode-map [menu-bar hide] 'undefined)
-(define-key org-mode-map [menu-bar show] 'undefined)
+(define-key org-mode-map [menu-bar headings] #'undefined)
+(define-key org-mode-map [menu-bar hide] #'undefined)
+(define-key org-mode-map [menu-bar show] #'undefined)
 
 (define-key org-mode-map [remap outline-mark-subtree] #'org-mark-subtree)
 (define-key org-mode-map [remap outline-show-subtree] #'org-fold-show-subtree)
diff --git a/lisp/org.el b/lisp/org.el
index 4342ddd735..a95a67b829 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -14009,13 +14009,15 @@ user."
 	      (setq cal-frame
 		    (window-frame (get-buffer-window calendar-buffer 'visible)))
 	      (select-frame cal-frame))
-	    (org-eval-in-calendar '(setq cursor-type nil) t)
+	    ;; FIXME: Could we use `with-current-buffer' or do we really
+	    ;; need the `move-overlay' that's in `org-funcall-in-calendar'?
+	    (org-funcall-in-calendar (lambda () (setq cursor-type nil)) t)
 	    (unwind-protect
 		(progn
 		  (calendar-forward-day (- (time-to-days org-def)
 					   (calendar-absolute-from-gregorian
 					    (calendar-current-date))))
-		  (org-eval-in-calendar nil t)
+		  (org-funcall-in-calendar #'ignore t)
 		  (let* ((old-map (current-local-map))
 			 (map (copy-keymap calendar-mode-map))
 			 (minibuffer-local-map
@@ -14398,13 +14400,14 @@ user function argument order change dependent on argument order."
     (`european (list arg2 arg1 arg3))
     (`iso (list arg2 arg3 arg1))))
 
-(defun org-eval-in-calendar (form &optional keepdate)
-  "Eval FORM in the calendar window and return to current window.
+(defun org-funcall-in-calendar (func &optional keepdate &rest args)
+  "Call FUNC in the calendar window and return to current window.
 Unless KEEPDATE is non-nil, update `org-ans2' to the cursor date."
   (let ((sf (selected-frame))
 	(sw (selected-window)))
+    ;; FIXME: Use `with-selected-window'?
     (select-window (get-buffer-window calendar-buffer t))
-    (eval form t)
+    (apply func args)
     (when (and (not keepdate) (calendar-cursor-to-date))
       (let* ((date (calendar-cursor-to-date))
 	     (time (org-encode-time 0 0 0 (nth 1 date) (nth 0 date) (nth 2 date))))
@@ -14413,6 +14416,10 @@ Unless KEEPDATE is non-nil, update `org-ans2' to the cursor date."
     (select-window sw)
     (select-frame-set-input-focus sf)))
 
+(defun org-eval-in-calendar (func &optional keepdate)
+  (declare (obsolete org-funcall-in-calendar "2024"))
+  (org-funcall-in-calendar (lambda () (eval form t)) keepdate))
+
 (defun org-calendar-goto-today-or-insert-dot ()
   "Go to the current date, or insert a dot.
 
@@ -14423,81 +14430,81 @@ insert \".\"."
   (if (looking-back "^[^:]+: "
 		    (let ((inhibit-field-text-motion t))
 		      (line-beginning-position)))
-      (org-eval-in-calendar '(calendar-goto-today))
+      (org-funcall-in-calendar #'calendar-goto-today)
     (insert ".")))
 
 (defun org-calendar-goto-today ()
   "Reposition the calendar window so the current date is visible."
   (interactive)
-  (org-eval-in-calendar '(calendar-goto-today)))
+  (org-funcall-in-calendar #'calendar-goto-today))
 
 (defun org-calendar-backward-month ()
   "Move the cursor backward by one month."
   (interactive)
-  (org-eval-in-calendar '(calendar-backward-month 1)))
+  (org-funcall-in-calendar #'calendar-backward-month nil 1))
 
 (defun org-calendar-forward-month ()
   "Move the cursor forward by one month."
   (interactive)
-  (org-eval-in-calendar '(calendar-forward-month 1)))
+  (org-funcall-in-calendar #'calendar-forward-month nil 1))
 
 (defun org-calendar-backward-year ()
   "Move the cursor backward by one year."
   (interactive)
-  (org-eval-in-calendar '(calendar-backward-year 1)))
+  (org-funcall-in-calendar #'calendar-backward-year nil 1))
 
 (defun org-calendar-forward-year ()
   "Move the cursor forward by one year."
   (interactive)
-  (org-eval-in-calendar '(calendar-forward-year 1)))
+  (org-funcall-in-calendar #'calendar-forward-year nil 1))
 
 (defun org-calendar-backward-week ()
   "Move the cursor backward by one week."
   (interactive)
-  (org-eval-in-calendar '(calendar-backward-week 1)))
+  (org-funcall-in-calendar #'calendar-backward-week nil 1))
 
 (defun org-calendar-forward-week ()
   "Move the cursor forward by one week."
   (interactive)
-  (org-eval-in-calendar '(calendar-forward-week 1)))
+  (org-funcall-in-calendar #'calendar-forward-week nil 1))
 
 (defun org-calendar-backward-day ()
   "Move the cursor backward by one day."
   (interactive)
-  (org-eval-in-calendar '(calendar-backward-day 1)))
+  (org-funcall-in-calendar #'calendar-backward-day nil 1))
 
 (defun org-calendar-forward-day ()
   "Move the cursor forward by one day."
   (interactive)
-  (org-eval-in-calendar '(calendar-forward-day 1)))
+  (org-funcall-in-calendar #'calendar-forward-day nil 1))
 
 (defun org-calendar-view-entries ()
   "Prepare and display a buffer with diary entries."
   (interactive)
-  (org-eval-in-calendar '(diary-view-entries))
+  (org-funcall-in-calendar #'diary-view-entries)
   (message ""))
 
 (defun org-calendar-scroll-month-left ()
   "Scroll the displayed calendar left by one month."
   (interactive)
-  (org-eval-in-calendar '(calendar-scroll-left 1)))
+  (org-funcall-in-calendar #'calendar-scroll-left nil 1))
 
 (defun org-calendar-scroll-month-right ()
   "Scroll the displayed calendar right by one month."
   (interactive)
-  (org-eval-in-calendar '(calendar-scroll-right 1)))
+  (org-funcall-in-calendar #'calendar-scroll-right nil 1))
 
 (defun org-calendar-scroll-three-months-left ()
   "Scroll the displayed calendar left by three months."
   (interactive)
-  (org-eval-in-calendar
-   '(calendar-scroll-left-three-months 1)))
+  (org-funcall-in-calendar
+   #'calendar-scroll-left-three-months nil 1))
 
 (defun org-calendar-scroll-three-months-right ()
   "Scroll the displayed calendar right by three months."
   (interactive)
-  (org-eval-in-calendar
-   '(calendar-scroll-right-three-months 1)))
+  (org-funcall-in-calendar
+   #'calendar-scroll-right-three-months nil 1))
 
 (defun org-calendar-select ()
   "Return to `org-read-date' with the date currently selected.

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: Saving some kitten, plus some questions along the way
  2024-05-18 15:22 Saving some kitten, plus some questions along the way Stefan Monnier
@ 2024-05-19 11:56 ` Ihor Radchenko
  2024-05-19 14:40   ` Stefan Monnier
  0 siblings, 1 reply; 8+ messages in thread
From: Ihor Radchenko @ 2024-05-19 11:56 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-orgmode

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> The patch below replaces a use of `eval` with `apply`, but along the way
> I wondered about some of the details of `org-eval-in-calendar` (see the
> FIXMEs), the most important of them being: why doesn't it use
> `with-selected-window`?

Thanks!
I do not see any clear reason. Just old code from early days of Org mode.

> -	    (org-eval-in-calendar '(setq cursor-type nil) t)
> +	    ;; FIXME: Could we use `with-current-buffer' or do we really
> +	    ;; need the `move-overlay' that's in `org-funcall-in-calendar'?
> +	    (org-funcall-in-calendar (lambda () (setq cursor-type nil)) t)

`move-overlay' is important - this is additional decoration that Org
mode uses to indicate "current" date in the calendar while the focus is
on other window and the cursor may not be clearly visible.

> -(defun org-eval-in-calendar (form &optional keepdate)
> -  "Eval FORM in the calendar window and return to current window.
> +(defun org-funcall-in-calendar (func &optional keepdate &rest args)
> +  "Call FUNC in the calendar window and return to current window.

Why not a macro? Having to write lambda may be awkward.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Saving some kitten, plus some questions along the way
  2024-05-19 11:56 ` Ihor Radchenko
@ 2024-05-19 14:40   ` Stefan Monnier
  2024-05-19 14:45     ` Ihor Radchenko
  0 siblings, 1 reply; 8+ messages in thread
From: Stefan Monnier @ 2024-05-19 14:40 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode

>> -	    (org-eval-in-calendar '(setq cursor-type nil) t)
>> +	    ;; FIXME: Could we use `with-current-buffer' or do we really
>> +	    ;; need the `move-overlay' that's in `org-funcall-in-calendar'?
>> +	    (org-funcall-in-calendar (lambda () (setq cursor-type nil)) t)
>
> `move-overlay' is important - this is additional decoration that Org
> mode uses to indicate "current" date in the calendar while the focus is
> on other window and the cursor may not be clearly visible.

I understand it's important in general, but the question is for this
specific use of `org-funcall-in-calendar` where all we do (apparently)
is to set `cursor-type` which shouldn't require any change to the
overlay (nor does it require to `select-window`), or should it?

Along the same lines, maybe:

	(progn
	  (calendar-forward-day (- (time-to-days org-def)
				   (calendar-absolute-from-gregorian
				    (calendar-current-date))))
	  (org-funcall-in-calendar #'ignore t)
	  (let* ((old-map (current-local-map))
		 (map (copy-keymap calendar-mode-map))
		 (minibuffer-local-map

should turn into something like:

	(let ((days (- (time-to-days org-def)
				   (calendar-absolute-from-gregorian
				    (calendar-current-date)))))
	  (org-funcall-in-calendar #'calendar-forward-day t days)
	  (let* ((old-map (current-local-map))
		 (map (copy-keymap calendar-mode-map))
		 (minibuffer-local-map

so it's clear why we need to use `org-funcall-in-calendar`?

>> -(defun org-eval-in-calendar (form &optional keepdate)
>> -  "Eval FORM in the calendar window and return to current window.
>> +(defun org-funcall-in-calendar (func &optional keepdate &rest args)
>> +  "Call FUNC in the calendar window and return to current window.
> Why not a macro?  Having to write lambda may be awkward.

[ Hmm... in my book, writing `lambda` should not be considered awkward.  ]

So far there are only two uses of `org-funcall-in-calendar` which go
through `lambda`, one of them is quoted and discussed above and the
other is the backward compatibility wrapper `org-eval-in-calendar`, so
I'm not sure it's worth the trouble.  But if you want, I can include
a macro for it, of course.


        Stefan



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Saving some kitten, plus some questions along the way
  2024-05-19 14:40   ` Stefan Monnier
@ 2024-05-19 14:45     ` Ihor Radchenko
  2024-05-19 21:24       ` Stefan Monnier
  0 siblings, 1 reply; 8+ messages in thread
From: Ihor Radchenko @ 2024-05-19 14:45 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-orgmode

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>>> -	    (org-eval-in-calendar '(setq cursor-type nil) t)
>>> +	    ;; FIXME: Could we use `with-current-buffer' or do we really
>>> +	    ;; need the `move-overlay' that's in `org-funcall-in-calendar'?
>>> +	    (org-funcall-in-calendar (lambda () (setq cursor-type nil)) t)
>>
>> `move-overlay' is important - this is additional decoration that Org
>> mode uses to indicate "current" date in the calendar while the focus is
>> on other window and the cursor may not be clearly visible.
>
> I understand it's important in general, but the question is for this
> specific use of `org-funcall-in-calendar` where all we do (apparently)
> is to set `cursor-type` which shouldn't require any change to the
> overlay (nor does it require to `select-window`), or should it?

No, it should not, and it does not require `select-window'.

> Along the same lines, maybe:
>
> 	(progn
> 	  (calendar-forward-day (- (time-to-days org-def)
> 				   (calendar-absolute-from-gregorian
> 				    (calendar-current-date))))
> 	  (org-funcall-in-calendar #'ignore t)
> 	  (let* ((old-map (current-local-map))
> 		 (map (copy-keymap calendar-mode-map))
> 		 (minibuffer-local-map
>
> should turn into something like:
>
> 	(let ((days (- (time-to-days org-def)
> 				   (calendar-absolute-from-gregorian
> 				    (calendar-current-date)))))
> 	  (org-funcall-in-calendar #'calendar-forward-day t days)
> 	  (let* ((old-map (current-local-map))
> 		 (map (copy-keymap calendar-mode-map))
> 		 (minibuffer-local-map
>
> so it's clear why we need to use `org-funcall-in-calendar`?

Yes. Looks reasonable.

>>> -(defun org-eval-in-calendar (form &optional keepdate)
>>> -  "Eval FORM in the calendar window and return to current window.
>>> +(defun org-funcall-in-calendar (func &optional keepdate &rest args)
>>> +  "Call FUNC in the calendar window and return to current window.
>> Why not a macro?  Having to write lambda may be awkward.
>
> [ Hmm... in my book, writing `lambda` should not be considered awkward.  ]
>
> So far there are only two uses of `org-funcall-in-calendar` which go
> through `lambda`, one of them is quoted and discussed above and the
> other is the backward compatibility wrapper `org-eval-in-calendar`, so
> I'm not sure it's worth the trouble.  But if you want, I can include
> a macro for it, of course.

Not necessary. Lambda is also ok, I just slightly prefer macro.
The only reason why I call lambda "awkward" is because it is more
typing.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Saving some kitten, plus some questions along the way
  2024-05-19 14:45     ` Ihor Radchenko
@ 2024-05-19 21:24       ` Stefan Monnier
  2024-05-20 11:10         ` Ihor Radchenko
  2024-05-21 10:55         ` Max Nikulin
  0 siblings, 2 replies; 8+ messages in thread
From: Stefan Monnier @ 2024-05-19 21:24 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 565 bytes --]

>> I understand it's important in general, but the question is for this
>> specific use of `org-funcall-in-calendar` where all we do (apparently)
>> is to set `cursor-type` which shouldn't require any change to the
>> overlay (nor does it require to `select-window`), or should it?
> No, it should not, and it does not require `select-window'.

OK, changed it to `with-current-buffer`.

I pushed the resulting patch (along with three other patches resulting
from running the tests) to `scratch/org` on `elpa.git`.

You can also find them attached,


        Stefan

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-org-in-calendar-Prefer-apply-to-eval.patch --]
[-- Type: text/x-diff, Size: 8209 bytes --]

From 30f64453a570004524de07aa352f7c631414df7c Mon Sep 17 00:00:00 2001
From: Stefan Monnier <monnier@iro.umontreal.ca>
Date: Sun, 19 May 2024 17:12:36 -0400
Subject: [PATCH 1/4] (org-*-in-calendar): Prefer `apply` to `eval

* lisp/org.el (org-funcall-in-calendar): Rename from `org-eval-in-calendar`.
Use `apply` rather than `eval`.  Use `with-selected-window` rather than
cooking our own version of it.  Update all callers.
(org-read-date): Use `with-current-buffer` to set `cursor-type` since
it's not affected by the selected window.
Move the `calendar-forward-day` call to `org-funcall-in-calendar` to
clarify the need to update `org-date-ovl`.
(org-eval-in-calendar): New backward compatibility function.

* lisp/org-keys.el (org-eval-in-calendar): Remove unused declaration.
---
 lisp/org-keys.el |  7 +++--
 lisp/org.el      | 66 +++++++++++++++++++++++++-----------------------
 2 files changed, 37 insertions(+), 36 deletions(-)

diff --git a/lisp/org-keys.el b/lisp/org-keys.el
index 50e05efa1b..fc5fd53aa8 100644
--- a/lisp/org-keys.el
+++ b/lisp/org-keys.el
@@ -89,7 +89,6 @@
 (declare-function org-emphasize "org" (&optional char))
 (declare-function org-end-of-line "org" (&optional n))
 (declare-function org-entry-put "org" (pom property value))
-(declare-function org-eval-in-calendar "org" (form &optional keepdate))
 (declare-function org-calendar-goto-today-or-insert-dot "org" ())
 (declare-function org-calendar-goto-today "org" ())
 (declare-function org-calendar-backward-month "org" ())
@@ -390,9 +389,9 @@ COMMANDS is a list of alternating OLDDEF NEWDEF command names."
 ;;; Global bindings
 
 ;;;; Outline functions
-(define-key org-mode-map [menu-bar headings] 'undefined)
-(define-key org-mode-map [menu-bar hide] 'undefined)
-(define-key org-mode-map [menu-bar show] 'undefined)
+(define-key org-mode-map [menu-bar headings] #'undefined)
+(define-key org-mode-map [menu-bar hide] #'undefined)
+(define-key org-mode-map [menu-bar show] #'undefined)
 
 (define-key org-mode-map [remap outline-mark-subtree] #'org-mark-subtree)
 (define-key org-mode-map [remap outline-show-subtree] #'org-fold-show-subtree)
diff --git a/lisp/org.el b/lisp/org.el
index 4342ddd735..9604887623 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -14009,13 +14009,15 @@ user."
 	      (setq cal-frame
 		    (window-frame (get-buffer-window calendar-buffer 'visible)))
 	      (select-frame cal-frame))
-	    (org-eval-in-calendar '(setq cursor-type nil) t)
+	    ;; FIXME: Not sure we need `with-current-buffer' but I couldn't
+            ;; convince myself that we're always in `calendar-buffer' after
+            ;; the call to `calendar'.
+	    (with-current-buffer calendar-buffer (setq cursor-type nil))
 	    (unwind-protect
-		(progn
-		  (calendar-forward-day (- (time-to-days org-def)
-					   (calendar-absolute-from-gregorian
-					    (calendar-current-date))))
-		  (org-eval-in-calendar nil t)
+		(let ((days (- (time-to-days org-def)
+			       (calendar-absolute-from-gregorian
+				(calendar-current-date)))))
+		  (org-funcall-in-calendar #'calendar-forward-day t days)
 		  (let* ((old-map (current-local-map))
 			 (map (copy-keymap calendar-mode-map))
 			 (minibuffer-local-map
@@ -14398,20 +14400,20 @@ user function argument order change dependent on argument order."
     (`european (list arg2 arg1 arg3))
     (`iso (list arg2 arg3 arg1))))
 
-(defun org-eval-in-calendar (form &optional keepdate)
-  "Eval FORM in the calendar window and return to current window.
+(defun org-funcall-in-calendar (func &optional keepdate &rest args)
+  "Call FUNC in the calendar window and return to current window.
 Unless KEEPDATE is non-nil, update `org-ans2' to the cursor date."
-  (let ((sf (selected-frame))
-	(sw (selected-window)))
-    (select-window (get-buffer-window calendar-buffer t))
-    (eval form t)
+  (with-selected-window (get-buffer-window calendar-buffer t)
+    (apply func args)
     (when (and (not keepdate) (calendar-cursor-to-date))
       (let* ((date (calendar-cursor-to-date))
 	     (time (org-encode-time 0 0 0 (nth 1 date) (nth 0 date) (nth 2 date))))
 	(setq org-ans2 (format-time-string "%Y-%m-%d" time))))
-    (move-overlay org-date-ovl (1- (point)) (1+ (point)) (current-buffer))
-    (select-window sw)
-    (select-frame-set-input-focus sf)))
+    (move-overlay org-date-ovl (1- (point)) (1+ (point)) (current-buffer))))
+
+(defun org-eval-in-calendar (form &optional keepdate)
+  (declare (obsolete org-funcall-in-calendar "2024"))
+  (org-funcall-in-calendar (lambda () (eval form t)) keepdate))
 
 (defun org-calendar-goto-today-or-insert-dot ()
   "Go to the current date, or insert a dot.
@@ -14423,81 +14425,81 @@ insert \".\"."
   (if (looking-back "^[^:]+: "
 		    (let ((inhibit-field-text-motion t))
 		      (line-beginning-position)))
-      (org-eval-in-calendar '(calendar-goto-today))
+      (org-funcall-in-calendar #'calendar-goto-today)
     (insert ".")))
 
 (defun org-calendar-goto-today ()
   "Reposition the calendar window so the current date is visible."
   (interactive)
-  (org-eval-in-calendar '(calendar-goto-today)))
+  (org-funcall-in-calendar #'calendar-goto-today))
 
 (defun org-calendar-backward-month ()
   "Move the cursor backward by one month."
   (interactive)
-  (org-eval-in-calendar '(calendar-backward-month 1)))
+  (org-funcall-in-calendar #'calendar-backward-month nil 1))
 
 (defun org-calendar-forward-month ()
   "Move the cursor forward by one month."
   (interactive)
-  (org-eval-in-calendar '(calendar-forward-month 1)))
+  (org-funcall-in-calendar #'calendar-forward-month nil 1))
 
 (defun org-calendar-backward-year ()
   "Move the cursor backward by one year."
   (interactive)
-  (org-eval-in-calendar '(calendar-backward-year 1)))
+  (org-funcall-in-calendar #'calendar-backward-year nil 1))
 
 (defun org-calendar-forward-year ()
   "Move the cursor forward by one year."
   (interactive)
-  (org-eval-in-calendar '(calendar-forward-year 1)))
+  (org-funcall-in-calendar #'calendar-forward-year nil 1))
 
 (defun org-calendar-backward-week ()
   "Move the cursor backward by one week."
   (interactive)
-  (org-eval-in-calendar '(calendar-backward-week 1)))
+  (org-funcall-in-calendar #'calendar-backward-week nil 1))
 
 (defun org-calendar-forward-week ()
   "Move the cursor forward by one week."
   (interactive)
-  (org-eval-in-calendar '(calendar-forward-week 1)))
+  (org-funcall-in-calendar #'calendar-forward-week nil 1))
 
 (defun org-calendar-backward-day ()
   "Move the cursor backward by one day."
   (interactive)
-  (org-eval-in-calendar '(calendar-backward-day 1)))
+  (org-funcall-in-calendar #'calendar-backward-day nil 1))
 
 (defun org-calendar-forward-day ()
   "Move the cursor forward by one day."
   (interactive)
-  (org-eval-in-calendar '(calendar-forward-day 1)))
+  (org-funcall-in-calendar #'calendar-forward-day nil 1))
 
 (defun org-calendar-view-entries ()
   "Prepare and display a buffer with diary entries."
   (interactive)
-  (org-eval-in-calendar '(diary-view-entries))
+  (org-funcall-in-calendar #'diary-view-entries)
   (message ""))
 
 (defun org-calendar-scroll-month-left ()
   "Scroll the displayed calendar left by one month."
   (interactive)
-  (org-eval-in-calendar '(calendar-scroll-left 1)))
+  (org-funcall-in-calendar #'calendar-scroll-left nil 1))
 
 (defun org-calendar-scroll-month-right ()
   "Scroll the displayed calendar right by one month."
   (interactive)
-  (org-eval-in-calendar '(calendar-scroll-right 1)))
+  (org-funcall-in-calendar #'calendar-scroll-right nil 1))
 
 (defun org-calendar-scroll-three-months-left ()
   "Scroll the displayed calendar left by three months."
   (interactive)
-  (org-eval-in-calendar
-   '(calendar-scroll-left-three-months 1)))
+  (org-funcall-in-calendar
+   #'calendar-scroll-left-three-months nil 1))
 
 (defun org-calendar-scroll-three-months-right ()
   "Scroll the displayed calendar right by three months."
   (interactive)
-  (org-eval-in-calendar
-   '(calendar-scroll-right-three-months 1)))
+  (org-funcall-in-calendar
+   #'calendar-scroll-right-three-months nil 1))
 
 (defun org-calendar-select ()
   "Return to `org-read-date' with the date currently selected.
-- 
2.39.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-mk-default.mk-BTEST-Remove-l-cl.patch --]
[-- Type: text/x-diff, Size: 1876 bytes --]

From 3bb14f3c7065c42b310a7d761be3a0d369cda334 Mon Sep 17 00:00:00 2001
From: Stefan Monnier <monnier@iro.umontreal.ca>
Date: Sun, 19 May 2024 17:15:21 -0400
Subject: [PATCH 2/4] mk/default.mk (BTEST): Remove `-l cl`

The CL library is deprecated and it's not needed here any more.
I suspect other `-l` could be removed here since `org-test` loads
those libraries anyway.
---
 mk/default.mk | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/mk/default.mk b/mk/default.mk
index 979a6c07e6..4690ef035b 100644
--- a/mk/default.mk
+++ b/mk/default.mk
@@ -78,20 +78,20 @@ BTEST_LOAD  = \
 	--eval '(add-to-list `load-path (concat default-directory "testing"))'
 BTEST_INIT  = $(BTEST_PRE) $(BTEST_LOAD) $(BTEST_POST)
 
-BTEST = $(BATCH) $(BTEST_INIT) \
-	  -l org-batch-test-init \
-	  --eval '(setq \
-		org-batch-test t \
-		org-babel-load-languages \
-		  (quote ($(foreach ob-lang,\
-				$(BTEST_OB_LANGUAGES) emacs-lisp shell org,\
-				$(lst-ob-lang)))) \
-		org-test-select-re "$(BTEST_RE)" \
-		)' \
-	  -l org-loaddefs.el \
-	  -l cl -l testing/org-test.el \
-	  -l ert -l org -l ox -l ol \
-	  $(foreach req,$(BTEST_EXTRA),$(req-extra)) \
+BTEST = $(BATCH) $(BTEST_INIT) 						    \
+	  -l org-batch-test-init 					    \
+	  --eval '(setq 						    \
+		org-batch-test t 					    \
+		org-babel-load-languages 				    \
+		  (quote ($(foreach ob-lang,				    \
+				$(BTEST_OB_LANGUAGES) emacs-lisp shell org, \
+				$(lst-ob-lang)))) 			    \
+		org-test-select-re "$(BTEST_RE)" 			    \
+		)' 							    \
+	  -l org-loaddefs.el 						    \
+	  -l testing/org-test.el 					    \
+	  -l ert -l org -l ox -l ol 					    \
+	  $(foreach req,$(BTEST_EXTRA),$(req-extra)) 			    \
 	  --eval '(org-test-run-batch-tests org-test-select-re)'
 
 # Running a plain emacs with no config and this Org mode loaded.  This
-- 
2.39.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: 0003-testing-org-test.el-toplevel-Remove-dead-code.patch --]
[-- Type: text/x-diff, Size: 1835 bytes --]

From f471f5b16c4ebf2f079779e5691e38aae9a6b705 Mon Sep 17 00:00:00 2001
From: Stefan Monnier <monnier@iro.umontreal.ca>
Date: Sun, 19 May 2024 17:18:08 -0400
Subject: [PATCH 3/4] testing/org-test.el (<toplevel>): Remove dead code

(featurep 'org) is always non-nil here since we have a (require 'org)
further up.  I suspect other `require`s nearby could be removed or
moved to toplevel.
---
 testing/org-test.el | 29 ++++++++++-------------------
 1 file changed, 10 insertions(+), 19 deletions(-)

diff --git a/testing/org-test.el b/testing/org-test.el
index d9fe33284c..8060e1d210 100644
--- a/testing/org-test.el
+++ b/testing/org-test.el
@@ -48,25 +48,16 @@
 			(file-name-directory
 			 (or load-file-name buffer-file-name))))
 	 (org-lisp-dir (expand-file-name
-			(concat org-test-dir "../lisp"))))
-
-    (unless (featurep 'org)
-      (setq load-path (cons org-lisp-dir load-path))
-      (require 'org)
-      (require 'org-id)
-      (require 'ox)
-      (org-babel-do-load-languages
-       'org-babel-load-languages '((shell . t) (org . t))))
-
-    (let ((load-path (cons org-test-dir
-			   (cons (expand-file-name "jump" org-test-dir)
-				 load-path))))
-      (require 'cl-lib)
-      (require 'ert)
-      (require 'ert-x)
-      (when (file-exists-p (expand-file-name "jump/jump.el" org-test-dir))
-	(require 'jump)
-	(require 'which-func)))))
+			(concat org-test-dir "../lisp")))
+	 (load-path (cons org-test-dir
+			  (cons (expand-file-name "jump" org-test-dir)
+			        load-path))))
+    (require 'cl-lib)
+    (require 'ert)
+    (require 'ert-x)
+    (when (file-exists-p (expand-file-name "jump/jump.el" org-test-dir))
+      (require 'jump)
+      (require 'which-func))))
 
 (defconst org-test-default-test-file-name "tests.el"
   "For each defun a separate file with tests may be defined.
-- 
2.39.2


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #5: 0004-testing-lisp-.el-Fix-second-arg-to-signal.patch --]
[-- Type: text/x-diff, Size: 15484 bytes --]

From dc62e4a1f943f7ca49b3075d9160dc19856fae7b Mon Sep 17 00:00:00 2001
From: Stefan Monnier <monnier@iro.umontreal.ca>
Date: Sun, 19 May 2024 17:19:51 -0400
Subject: [PATCH 4/4] testing/lisp/*.el: Fix second arg to `signal`

The second argument to `signal` should be a list, as explained in its
docstring.  Fix `missing-test-dependency` signals accordingly.
---
 testing/lisp/test-ob-C.el            | 2 +-
 testing/lisp/test-ob-R.el            | 4 ++--
 testing/lisp/test-ob-awk.el          | 2 +-
 testing/lisp/test-ob-calc.el         | 2 +-
 testing/lisp/test-ob-clojure.el      | 2 +-
 testing/lisp/test-ob-eshell.el       | 2 +-
 testing/lisp/test-ob-fortran.el      | 2 +-
 testing/lisp/test-ob-haskell-ghci.el | 4 ++--
 testing/lisp/test-ob-java.el         | 2 +-
 testing/lisp/test-ob-julia.el        | 4 ++--
 testing/lisp/test-ob-lua.el          | 2 +-
 testing/lisp/test-ob-maxima.el       | 2 +-
 testing/lisp/test-ob-octave.el       | 2 +-
 testing/lisp/test-ob-perl.el         | 2 +-
 testing/lisp/test-ob-python.el       | 2 +-
 testing/lisp/test-ob-ruby.el         | 4 ++--
 testing/lisp/test-ob-scheme.el       | 6 +++---
 testing/lisp/test-ob-sed.el          | 2 +-
 testing/lisp/test-ob-shell.el        | 2 +-
 testing/lisp/test-ob-sql.el          | 2 +-
 testing/lisp/test-ob-sqlite.el       | 2 +-
 testing/lisp/test-org-ctags.el       | 2 +-
 testing/lisp/test-org-tempo.el       | 2 +-
 testing/lisp/test-ox-ascii.el        | 2 +-
 testing/lisp/test-ox-beamer.el       | 2 +-
 testing/lisp/test-ox-latex.el        | 2 +-
 testing/lisp/test-ox-texinfo.el      | 2 +-
 27 files changed, 33 insertions(+), 33 deletions(-)

diff --git a/testing/lisp/test-ob-C.el b/testing/lisp/test-ob-C.el
index c70534a51f..5399aed122 100644
--- a/testing/lisp/test-ob-C.el
+++ b/testing/lisp/test-ob-C.el
@@ -20,7 +20,7 @@
 
 ;;; Code:
 (unless (featurep 'ob-C)
-  (signal 'missing-test-dependency "Support for C code blocks"))
+  (signal 'missing-test-dependency '("Support for C code blocks")))
 
 (ert-deftest ob-C/simple-program ()
   "Hello world program."
diff --git a/testing/lisp/test-ob-R.el b/testing/lisp/test-ob-R.el
index 9ffbf3afd9..0d291bf543 100644
--- a/testing/lisp/test-ob-R.el
+++ b/testing/lisp/test-ob-R.el
@@ -22,7 +22,7 @@
 (org-test-for-executable "R")
 (require 'ob-core)
 (unless (featurep 'ess)
-  (signal 'missing-test-dependency "ESS"))
+  (signal 'missing-test-dependency '("ESS")))
 (defvar ess-ask-for-ess-directory)
 (defvar ess-history-file)
 (defvar ess-r-post-run-hook)
@@ -32,7 +32,7 @@
 (declare-function ess-calculate-width "ext:ess-inf" (opt))
 
 (unless (featurep 'ob-R)
-  (signal 'missing-test-dependency "Support for R code blocks"))
+  (signal 'missing-test-dependency '("Support for R code blocks")))
 
 (ert-deftest test-ob-R/simple-session ()
   (let (ess-ask-for-ess-directory ess-history-file)
diff --git a/testing/lisp/test-ob-awk.el b/testing/lisp/test-ob-awk.el
index 874d2c0268..b3a2a50fce 100644
--- a/testing/lisp/test-ob-awk.el
+++ b/testing/lisp/test-ob-awk.el
@@ -21,7 +21,7 @@
 ;;; Code:
 (org-test-for-executable "awk")
 (unless (featurep 'ob-awk)
-  (signal 'missing-test-dependency "Support for Awk code blocks"))
+  (signal 'missing-test-dependency '("Support for Awk code blocks")))
 
 (ert-deftest ob-awk/input-none ()
   "Test with no input file"
diff --git a/testing/lisp/test-ob-calc.el b/testing/lisp/test-ob-calc.el
index 12f97279f6..f6e8a5a2fd 100644
--- a/testing/lisp/test-ob-calc.el
+++ b/testing/lisp/test-ob-calc.el
@@ -21,7 +21,7 @@
 (require 'ob-calc)
 
 (unless (featurep 'ob-calc)
-  (signal 'missing-test-dependency "Support for Calc code blocks"))
+  (signal 'missing-test-dependency '("Support for Calc code blocks")))
 
 (ert-deftest ob-calc/simple-program-mult ()
   "Test of simple multiplication."
diff --git a/testing/lisp/test-ob-clojure.el b/testing/lisp/test-ob-clojure.el
index 33052c98c9..4836917b3a 100644
--- a/testing/lisp/test-ob-clojure.el
+++ b/testing/lisp/test-ob-clojure.el
@@ -25,7 +25,7 @@
 ;;; Code:
 
 (unless (featurep 'ob-clojure)
-  (signal 'missing-test-dependency "Support for Clojure code blocks"))
+  (signal 'missing-test-dependency '("Support for Clojure code blocks")))
 
 ;; FIXME: The old tests where totally off.  We need to write new tests.
 
diff --git a/testing/lisp/test-ob-eshell.el b/testing/lisp/test-ob-eshell.el
index 0d704b16a3..5d0da8d991 100644
--- a/testing/lisp/test-ob-eshell.el
+++ b/testing/lisp/test-ob-eshell.el
@@ -24,7 +24,7 @@
 
 ;;; Code:
 (unless (featurep 'ob-eshell)
-  (signal 'missing-test-dependency "Support for Eshell code blocks"))
+  (signal 'missing-test-dependency '("Support for Eshell code blocks")))
 
 (ert-deftest ob-eshell/execute ()
   "Test ob-eshell execute."
diff --git a/testing/lisp/test-ob-fortran.el b/testing/lisp/test-ob-fortran.el
index 4947d142b7..209a966b16 100644
--- a/testing/lisp/test-ob-fortran.el
+++ b/testing/lisp/test-ob-fortran.el
@@ -21,7 +21,7 @@
 ;;; Code:
 (org-test-for-executable "gfortran")
 (unless (featurep 'ob-fortran)
-  (signal 'missing-test-dependency "Support for Fortran code blocks"))
+  (signal 'missing-test-dependency '("Support for Fortran code blocks")))
 
 (ert-deftest ob-fortran/simple-program ()
   "Test of hello world program."
diff --git a/testing/lisp/test-ob-haskell-ghci.el b/testing/lisp/test-ob-haskell-ghci.el
index 990addcd44..6eca0a141a 100644
--- a/testing/lisp/test-ob-haskell-ghci.el
+++ b/testing/lisp/test-ob-haskell-ghci.el
@@ -32,9 +32,9 @@
 (require 'org-test "../testing/org-test")
 (org-test-for-executable "ghci")
 (unless (featurep 'haskell-mode)
-  (signal 'missing-test-dependency "haskell-mode"))
+  (signal 'missing-test-dependency '("haskell-mode")))
 (unless (featurep 'haskell)
-  (signal 'missing-test-dependency "haskell"))
+  (signal 'missing-test-dependency '("haskell")))
 
 
 ;;; Helpers
diff --git a/testing/lisp/test-ob-java.el b/testing/lisp/test-ob-java.el
index e0c19fe03c..5f00917e51 100644
--- a/testing/lisp/test-ob-java.el
+++ b/testing/lisp/test-ob-java.el
@@ -27,7 +27,7 @@
 ;; ob-java is needed for linter tests as well.  org-lint relies on
 ;; default header arg value.
 (unless (featurep 'ob-java)
-  (signal 'missing-test-dependency "Support for java code blocks"))
+  (signal 'missing-test-dependency '("Support for java code blocks")))
 
 ;;; No Java required
 
diff --git a/testing/lisp/test-ob-julia.el b/testing/lisp/test-ob-julia.el
index 4472972624..c0d21fbd85 100644
--- a/testing/lisp/test-ob-julia.el
+++ b/testing/lisp/test-ob-julia.el
@@ -23,9 +23,9 @@
 (org-test-for-executable "julia")
 (require 'ob-core)
 (unless (featurep 'ob-julia)
-  (signal 'missing-test-dependency "Support for julia code blocks"))
+  (signal 'missing-test-dependency '("Support for julia code blocks")))
 (unless (featurep 'ess)
-  (signal 'missing-test-dependency "ESS"))
+  (signal 'missing-test-dependency '("ESS")))
 
 (ert-deftest test-ob-julia/colnames-yes-header-argument ()
   (should
diff --git a/testing/lisp/test-ob-lua.el b/testing/lisp/test-ob-lua.el
index 0a60c68caf..864d5107a3 100644
--- a/testing/lisp/test-ob-lua.el
+++ b/testing/lisp/test-ob-lua.el
@@ -20,7 +20,7 @@
 
 ;;; Code:
 (unless (featurep 'ob-lua)
-  (signal 'missing-test-dependency "Support for Lua code blocks"))
+  (signal 'missing-test-dependency '("Support for Lua code blocks")))
 
 (ert-deftest test-ob-lua/simple-value ()
   "Test associative array return by value."
diff --git a/testing/lisp/test-ob-maxima.el b/testing/lisp/test-ob-maxima.el
index 653ed40417..4320c46137 100644
--- a/testing/lisp/test-ob-maxima.el
+++ b/testing/lisp/test-ob-maxima.el
@@ -20,7 +20,7 @@
 
 (org-test-for-executable "maxima")
 (unless (featurep 'ob-maxima)
-  (signal 'missing-test-dependency "Support for Maxima code blocks"))
+  (signal 'missing-test-dependency '("Support for Maxima code blocks")))
 
 (ert-deftest ob-maxima/integer-input ()
   "Test of integer input"
diff --git a/testing/lisp/test-ob-octave.el b/testing/lisp/test-ob-octave.el
index dfcfc01906..3c58fad741 100644
--- a/testing/lisp/test-ob-octave.el
+++ b/testing/lisp/test-ob-octave.el
@@ -20,7 +20,7 @@
 
 (org-test-for-executable "octave")
 (unless (featurep 'ob-octave)
-  (signal 'missing-test-dependency "Support for Octave code blocks"))
+  (signal 'missing-test-dependency '("Support for Octave code blocks")))
 
 (ert-deftest ob-octave/input-none ()
   "Number output"
diff --git a/testing/lisp/test-ob-perl.el b/testing/lisp/test-ob-perl.el
index 5826e8cca2..e079d09d9b 100644
--- a/testing/lisp/test-ob-perl.el
+++ b/testing/lisp/test-ob-perl.el
@@ -21,7 +21,7 @@
 ;;; Code:
 (org-test-for-executable "perl")
 (unless (featurep 'ob-perl)
-  (signal 'missing-test-dependency "Support for perl code blocks"))
+  (signal 'missing-test-dependency '("Support for perl code blocks")))
 
 (ert-deftest test-ob-perl/simple-output ()
   (org-test-with-temp-text "
diff --git a/testing/lisp/test-ob-python.el b/testing/lisp/test-ob-python.el
index e3c6a40096..9ee76f2a8d 100644
--- a/testing/lisp/test-ob-python.el
+++ b/testing/lisp/test-ob-python.el
@@ -22,7 +22,7 @@
 (org-test-for-executable "python")
 (require 'ob-core)
 (unless (featurep 'ob-python)
-  (signal 'missing-test-dependency "Support for Python code blocks"))
+  (signal 'missing-test-dependency '("Support for Python code blocks")))
 
 (ert-deftest test-ob-python/colnames-yes-header-argument ()
   (should
diff --git a/testing/lisp/test-ob-ruby.el b/testing/lisp/test-ob-ruby.el
index 2e4cd020be..27f96f6da3 100644
--- a/testing/lisp/test-ob-ruby.el
+++ b/testing/lisp/test-ob-ruby.el
@@ -19,9 +19,9 @@
 ;;; Code:
 (org-test-for-executable "ruby")
 (unless (featurep 'ob-ruby)
-  (signal 'missing-test-dependency "Support for Ruby code blocks"))
+  (signal 'missing-test-dependency '("Support for Ruby code blocks")))
 (unless (featurep 'inf-ruby)
-  (signal 'missing-test-dependency "inf-ruby"))
+  (signal 'missing-test-dependency '("inf-ruby")))
 
 (ert-deftest test-ob-ruby/session-output-1 ()
     (should (equal (org-test-with-temp-text "#+begin_src ruby :session org-test-ruby :results output
diff --git a/testing/lisp/test-ob-scheme.el b/testing/lisp/test-ob-scheme.el
index 3e9a4707c1..79ce2b4537 100644
--- a/testing/lisp/test-ob-scheme.el
+++ b/testing/lisp/test-ob-scheme.el
@@ -24,11 +24,11 @@
 ;;; Code:
 
 (unless (featurep 'ob-scheme)
-  (signal 'missing-test-dependency "Support for Scheme code blocks"))
+  (signal 'missing-test-dependency '("Support for Scheme code blocks")))
 (unless (featurep 'geiser)
-  (signal 'missing-test-dependency "geiser"))
+  (signal 'missing-test-dependency '("geiser")))
 (unless (version<= "27.1" emacs-version)
-  (signal 'missing-test-dependency "Geiser required for Scheme code blocks needs Emacs >=27.1"))
+  (signal 'missing-test-dependency '("Geiser required for Scheme code blocks needs Emacs >=27.1")))
 
 (ert-deftest test-ob-scheme/tables ()
   "Test table output."
diff --git a/testing/lisp/test-ob-sed.el b/testing/lisp/test-ob-sed.el
index a91aa54cce..c57c798994 100644
--- a/testing/lisp/test-ob-sed.el
+++ b/testing/lisp/test-ob-sed.el
@@ -23,7 +23,7 @@
 (require 'ob-sed)
 (org-test-for-executable "sed")
 (unless (featurep 'ob-sed)
-  (signal 'missing-test-dependency "Support for Sed code blocks"))
+  (signal 'missing-test-dependency '("Support for Sed code blocks")))
 
 (ert-deftest ob-sed-test/simple-execution-of-script ()
   "Test simple execution of script."
diff --git a/testing/lisp/test-ob-shell.el b/testing/lisp/test-ob-shell.el
index b760031b4e..9addd045bb 100644
--- a/testing/lisp/test-ob-shell.el
+++ b/testing/lisp/test-ob-shell.el
@@ -30,7 +30,7 @@
 (require 'org-macs)
 
 (unless (featurep 'ob-shell)
-  (signal 'missing-test-dependency "Support for Shell code blocks"))
+  (signal 'missing-test-dependency '("Support for Shell code blocks")))
 
 (org-test-for-executable "sh")
 
diff --git a/testing/lisp/test-ob-sql.el b/testing/lisp/test-ob-sql.el
index 919741571f..ac8a1ccb22 100644
--- a/testing/lisp/test-ob-sql.el
+++ b/testing/lisp/test-ob-sql.el
@@ -21,7 +21,7 @@
 ;;; Code:
 
 (unless (featurep 'ob-sql)
-  (signal 'missing-test-dependency "Support for sql code blocks"))
+  (signal 'missing-test-dependency '("Support for sql code blocks")))
 
 (defmacro ob-sql/command (&rest body)
   "Execute body and return the command that would have been executed."
diff --git a/testing/lisp/test-ob-sqlite.el b/testing/lisp/test-ob-sqlite.el
index 621a11b0b8..0d04643cf3 100644
--- a/testing/lisp/test-ob-sqlite.el
+++ b/testing/lisp/test-ob-sqlite.el
@@ -21,7 +21,7 @@
 ;;; Code:
 (org-test-for-executable "sqlite3")
 (unless (featurep 'ob-sqlite)
-  (signal 'missing-test-dependency "Support for sqlite code blocks"))
+  (signal 'missing-test-dependency '("Support for sqlite code blocks")))
 
 (ert-deftest ob-sqlite/table-variables-with-commas ()
   "Test of a table variable that contains commas. This guarantees that this code path results in a valid CSV."
diff --git a/testing/lisp/test-org-ctags.el b/testing/lisp/test-org-ctags.el
index b8e3e4d223..4e0ee37ffe 100644
--- a/testing/lisp/test-org-ctags.el
+++ b/testing/lisp/test-org-ctags.el
@@ -23,7 +23,7 @@
 ;; Alternative implementation for `test-org-ctags/mock-command'
 ;; is required for cmd.exe.
 (unless (string-equal "-c" shell-command-switch)
-  (signal 'missing-test-dependency "POSIX shell"))
+  (signal 'missing-test-dependency '("POSIX shell")))
 
 (require 'org-ctags)
 
diff --git a/testing/lisp/test-org-tempo.el b/testing/lisp/test-org-tempo.el
index 0760d45326..7382b6dc42 100644
--- a/testing/lisp/test-org-tempo.el
+++ b/testing/lisp/test-org-tempo.el
@@ -24,7 +24,7 @@
 (require 'org-tempo)
 
 (unless (featurep 'org-tempo)
-  (signal 'missing-test-dependency "org-tempo"))
+  (signal 'missing-test-dependency '("org-tempo")))
 
 (ert-deftest test-org-tempo/completion ()
   "Test that blocks and keywords are expanded correctly by org-tempo."
diff --git a/testing/lisp/test-ox-ascii.el b/testing/lisp/test-ox-ascii.el
index 2df1bd795a..0532b89ee1 100644
--- a/testing/lisp/test-ox-ascii.el
+++ b/testing/lisp/test-ox-ascii.el
@@ -25,7 +25,7 @@
 
 (require 'ox-ascii nil t)
 (unless (featurep 'ox-ascii)
-  (signal 'missing-test-dependency "org-export-ascii"))
+  (signal 'missing-test-dependency '("org-export-ascii")))
 
 \f
 
diff --git a/testing/lisp/test-ox-beamer.el b/testing/lisp/test-ox-beamer.el
index be83b12e03..f5743409f3 100644
--- a/testing/lisp/test-ox-beamer.el
+++ b/testing/lisp/test-ox-beamer.el
@@ -25,7 +25,7 @@
 
 (require 'ox-beamer nil t)
 (unless (featurep 'ox-beamer)
-  (signal 'missing-test-dependency "org-export-beamer"))
+  (signal 'missing-test-dependency '("org-export-beamer")))
 
 \f
 
diff --git a/testing/lisp/test-ox-latex.el b/testing/lisp/test-ox-latex.el
index d0be4e5a4c..892ac44374 100644
--- a/testing/lisp/test-ox-latex.el
+++ b/testing/lisp/test-ox-latex.el
@@ -25,7 +25,7 @@
 
 (require 'ox-latex nil t)
 (unless (featurep 'ox-latex)
-  (signal 'missing-test-dependency "org-export-latex"))
+  (signal 'missing-test-dependency '("org-export-latex")))
 
 \f
 
diff --git a/testing/lisp/test-ox-texinfo.el b/testing/lisp/test-ox-texinfo.el
index b67d2f4c17..b16a344e7e 100644
--- a/testing/lisp/test-ox-texinfo.el
+++ b/testing/lisp/test-ox-texinfo.el
@@ -27,7 +27,7 @@
 (eval-when-compile (require 'subr-x))
 
 (unless (featurep 'ox-texinfo)
-  (signal 'missing-test-dependency "org-export-texinfo"))
+  (signal 'missing-test-dependency '("org-export-texinfo")))
 
 \f
 ;;; TeX fragments
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: Saving some kitten, plus some questions along the way
  2024-05-19 21:24       ` Stefan Monnier
@ 2024-05-20 11:10         ` Ihor Radchenko
  2024-06-15 14:32           ` Ihor Radchenko
  2024-05-21 10:55         ` Max Nikulin
  1 sibling, 1 reply; 8+ messages in thread
From: Ihor Radchenko @ 2024-05-20 11:10 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-orgmode

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> OK, changed it to `with-current-buffer`.
>
> I pushed the resulting patch (along with three other patches resulting
> from running the tests) to `scratch/org` on `elpa.git`.
>
> You can also find them attached,

Thanks!

> Subject: [PATCH 1/4] (org-*-in-calendar): Prefer `apply` to `eval

Hmm... `...', not `...`. Convention is convention...

> -	    (org-eval-in-calendar '(setq cursor-type nil) t)
> +	    ;; FIXME: Not sure we need `with-current-buffer' but I couldn't
> +            ;; convince myself that we're always in `calendar-buffer' after
> +            ;; the call to `calendar'.
> +	    (with-current-buffer calendar-buffer (setq cursor-type nil))

Further ahead, the code uses `use-local-map'. So, if current buffer is
not `calendar-buffer', we are in trouble anyway. If you want to play safe,
just add an assertion after the call to `calendar', or wrap the whole
thing into `with-current-buffer'.

> -(defun org-eval-in-calendar (form &optional keepdate)
> -  "Eval FORM in the calendar window and return to current window.
> +(defun org-funcall-in-calendar (func &optional keepdate &rest args)
> +  "Call FUNC in the calendar window and return to current window.
>  Unless KEEPDATE is non-nil, update `org-ans2' to the cursor date."

You still left `org-ans2' kitten struggling, didn't you? :)

> +(defun org-eval-in-calendar (form &optional keepdate)
> +  (declare (obsolete org-funcall-in-calendar "2024"))

9.7, not 2024.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Saving some kitten, plus some questions along the way
  2024-05-19 21:24       ` Stefan Monnier
  2024-05-20 11:10         ` Ihor Radchenko
@ 2024-05-21 10:55         ` Max Nikulin
  1 sibling, 0 replies; 8+ messages in thread
From: Max Nikulin @ 2024-05-21 10:55 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-orgmode

On 20/05/2024 04:24, Stefan Monnier wrote:
> Subject: [PATCH 3/4] testing/org-test.el (<toplevel>): Remove dead code
> 
> (featurep 'org) is always non-nil here since we have a (require 'org)
> further up.  I suspect other `require`s nearby could be removed or
> moved to toplevel.

Just a guess. Perhaps earlier there was intentionally no (require 'org) 
to ensure that org-test.el loads Org from the sibling directory, not 
from the version bundled with Emacs. Stefan, it was you who added 
(require 'org) during switching to lexical binding.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Saving some kitten, plus some questions along the way
  2024-05-20 11:10         ` Ihor Radchenko
@ 2024-06-15 14:32           ` Ihor Radchenko
  0 siblings, 0 replies; 8+ messages in thread
From: Ihor Radchenko @ 2024-06-15 14:32 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-orgmode

Ihor Radchenko <yantar92@posteo.net> writes:

> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>
>> OK, changed it to `with-current-buffer`.
>>
>> I pushed the resulting patch (along with three other patches resulting
>> from running the tests) to `scratch/org` on `elpa.git`.
>>
>> You can also find them attached,
>
> Thanks!
>
>> Subject: [PATCH 1/4] (org-*-in-calendar): Prefer `apply` to `eval
>
> Hmm... `...', not `...`. Convention is convention...

Applied, onto main, after adjusting the commit messages.
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=4d4bc2086
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=3fa18371e
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=cb758720f
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=96d149a66

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-06-15 14:31 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-18 15:22 Saving some kitten, plus some questions along the way Stefan Monnier
2024-05-19 11:56 ` Ihor Radchenko
2024-05-19 14:40   ` Stefan Monnier
2024-05-19 14:45     ` Ihor Radchenko
2024-05-19 21:24       ` Stefan Monnier
2024-05-20 11:10         ` Ihor Radchenko
2024-06-15 14:32           ` Ihor Radchenko
2024-05-21 10:55         ` Max Nikulin

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).