On 05/07/2023 17:35, Ihor Radchenko wrote:
However, you will see many more failures with Emacs 26 on the latest
main.

With the couple of attached patches the only failing test is

Test test-org/delete-indentation backtrace:
  signal(wrong-number-of-arguments ((0 . 1) 3))
  apply(signal (wrong-number-of-arguments ((0 . 1) 3)))
  (setq value-20142 (apply fn-20140 args-20141))
  (unwind-protect (setq value-20142 (apply fn-20140 args-20141)) (setq
  (if (unwind-protect (setq value-20142 (apply fn-20140 args-20141)) (
  (let (form-description-20144) (if (unwind-protect (setq value-20142
  (let ((value-20142 (quote ert-form-evaluation-aborted-20143))) (let
  (let* ((fn-20140 (function equal)) (args-20141 (condition-case err (
  (closure (t) nil (let* ((fn-20140 (function equal)) (args-20141 (con
  ert--run-test-internal(#s(ert--test-execution-info :test #s(ert-test
  ert-run-test(#s(ert-test :name test-org/delete-indentation :document
  ert-run-or-rerun-test(#s(ert--stats :selector "\\(org\\|ob\\|ox\\)"
  ert-run-tests("\\(org\\|ob\\|ox\\)" #f(compiled-function (event-type
  ert-run-tests-batch("\\(org\\|ob\\|ox\\)")
  ert-run-tests-batch-and-exit("\\(org\\|ob\\|ox\\)")
  (let ((org-id-track-globally t) (org-test-selector (if org-test-sele
  org-test-run-batch-tests("\\(org\\|ob\\|ox\\)")
  eval((org-test-run-batch-tests org-test-select-re))
  command-line-1(("--eval" "(setq vc-handled-backends nil org-startup-
  command-line()
  normal-top-level()
Test test-org/delete-indentation condition:
    (wrong-number-of-arguments
     (0 . 1)
     3)
   FAILED   935/1069  test-org/delete-indentation
From b0076919e3d13c5d788afd2d5c15e90d4fefbaa0 Mon Sep 17 00:00:00 2001
From: Max Nikulin <maniku...@gmail.com>
Date: Wed, 5 Jul 2023 22:44:33 +0700
Subject: [PATCH 1/2] org-element.el: Fix Emacs-26 compatibility

* org-element.el (org-element--current-element-re): Use `rx-to-string'
instead of `rx' to expand variables.
(org-element--cache-setup-change-functions): Avoid multiple variables in
`setq-local'.

Reported as: Justin to emacs-orgmode. [BUG] org-element loading fails
with "regexp" argument not "stringp" Tue, 4 Jul 2023 19:51:44 -0400.
https://list.orgmode.org/2ff109c7-b3ec-27ac-e75d-ae5ddac14...@vallon.homeip.net
---
 lisp/org-element.el | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/lisp/org-element.el b/lisp/org-element.el
index bfb1d206e..1c9707573 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -4278,20 +4278,20 @@ ;;; Parsing Element Starting At Point
 ;; point.
 
 (defconst org-element--current-element-re
-  (rx
-   (or
-    (group-n 1 (regexp org-element--latex-begin-environment-nogroup))
-    (group-n 2 (regexp org-element-drawer-re-nogroup))
-    (group-n 3 (regexp "[ \t]*:\\( \\|$\\)"))
-    (group-n 7 (regexp org-element-dynamic-block-open-re-nogroup))
-    (seq (group-n 4 (regexp "[ \t]*#\\+"))
-         (or
-          (seq "BEGIN_" (group-n 5 (1+ (not space))))
-          (group-n 6 "CALL:")
-          (group-n 8 (1+ (not space)) ":")))
-    (group-n 9 (regexp org-footnote-definition-re))
-    (group-n 10 (regexp "[ \t]*-----+[ \t]*$"))
-    (group-n 11 "%%(")))
+  (rx-to-string
+   `(or
+     (group-n 1 (regexp ,org-element--latex-begin-environment-nogroup))
+     (group-n 2 (regexp ,org-element-drawer-re-nogroup))
+     (group-n 3 (regexp "[ \t]*:\\( \\|$\\)"))
+     (group-n 7 (regexp ,org-element-dynamic-block-open-re-nogroup))
+     (seq (group-n 4 (regexp "[ \t]*#\\+"))
+          (or
+           (seq "BEGIN_" (group-n 5 (1+ (not space))))
+           (group-n 6 "CALL:")
+           (group-n 8 (1+ (not space)) ":")))
+     (group-n 9 (regexp ,org-footnote-definition-re))
+     (group-n 10 (regexp "[ \t]*-----+[ \t]*$"))
+     (group-n 11 "%%(")))
   "Bulk regexp matching multiple elements in a single regexp.
 This is a bit more efficient compared to invoking regexp search
 multiple times.")
@@ -6916,8 +6916,8 @@ (defun org-element--cache-setup-change-functions ()
     ;; Clear copied local cache to avoid extra memory usage.
     ;; We only use cache stored in the base buffer.
     (when (buffer-base-buffer)
-      (setq-local org-element--cache nil
-                  org-element--headline-cache nil))
+      (setq-local org-element--cache nil)
+      (setq-local org-element--headline-cache nil))
     (add-hook 'before-change-functions
 	      #'org-element--cache-before-change nil t)
     ;; Run `org-element--cache-after-change' early to handle cases
-- 
2.25.1

From 2f2d330e90b10a86aa6b3b9ff279bc012b339396 Mon Sep 17 00:00:00 2001
From: Max Nikulin <maniku...@gmail.com>
Date: Wed, 5 Jul 2023 22:50:44 +0700
Subject: [PATCH 2/2] org-compat.el: Define `flatten-tree' for Emacs-26
 compatibility

* lisp/org-compat.el (flatten-tree): New compatibility function
earlier used as `org-protocol-flatten'.
* lisp/org-protocol.el (org-protocol-flatten): Remove the definition
of the function.
(org-protocol-flatten-greedy): Use `flatten-tree' instead of
`org-protocol-flatten'.

Reported as: Justin to emacs-orgmode. [PATCH] org-src: flatten-tree is
Emacs 27.1; require compat. Tue, 4 Jul 2023 19:21:05 -0400.
https://list.orgmode.org/0288575b-fde8-0e7d-ac74-1f0ac93ce...@vallon.homeip.net
---
 lisp/org-compat.el   | 15 +++++++++++++++
 lisp/org-protocol.el | 24 ++++--------------------
 2 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/lisp/org-compat.el b/lisp/org-compat.el
index c5ab655d2..7017a5859 100644
--- a/lisp/org-compat.el
+++ b/lisp/org-compat.el
@@ -203,6 +203,21 @@   (defun org-format-prompt (prompt default &rest format-args)
 
 ;;; Emacs < 27.1 compatibility
 
+;; `flatten-tree' was added in Emacs 27.1.
+(unless (fboundp 'flatten-tree)
+  (defun flatten-tree (list)
+    "Transform LIST into a flat list.
+
+Greedy handlers might receive a list like this from emacsclient:
+\((\"/dir/org-protocol:/greedy:/~/path1\" (23 . 12)) (\"/dir/param\"))
+where \"/dir/\" is the absolute path to emacsclients working directory.
+This function transforms it into a flat list."
+    (if list
+        (if (consp list)
+            (append (flatten-tree (car list))
+                    (flatten-tree (cdr list)))
+          (list list)))))
+
 (if (version< emacs-version "29")
     ;; A stub when `combine-change-calls' was not yet there or had
     ;; critical bugs (see Emacs bug#60467).
diff --git a/lisp/org-protocol.el b/lisp/org-protocol.el
index 2b07a377e..a0d003363 100644
--- a/lisp/org-protocol.el
+++ b/lisp/org-protocol.el
@@ -328,7 +328,7 @@ (defun org-protocol-flatten-greedy (param-list &optional strip-path replacement)
 Greedy handlers might receive a list like this from emacsclient:
 \((\"/dir/org-protocol:/greedy:/~/path1\" (23 . 12)) (\"/dir/param\"))
 where \"/dir/\" is the absolute path to emacsclient's working directory.  This
-function transforms it into a flat list using `org-protocol-flatten' and
+function transforms it into a flat list using `flatten-tree' and
 transforms the elements of that list as follows:
 
 If STRIP-PATH is non-nil, remove the \"/dir/\" prefix from all members of
@@ -343,9 +343,9 @@ (defun org-protocol-flatten-greedy (param-list &optional strip-path replacement)
 `org-protocol-reverse-list-of-files' was set to t and the returned list will
 reflect that.  emacsclient's first parameter will be the first one in the
 returned list."
-  (let* ((l (org-protocol-flatten (if org-protocol-reverse-list-of-files
-				      param-list
-				    (reverse param-list))))
+  (let* ((l (flatten-tree (if org-protocol-reverse-list-of-files
+                              param-list
+                            (reverse param-list))))
 	 (trigger (car l))
 	 (len 0)
 	 dir
@@ -368,22 +368,6 @@ (defun org-protocol-flatten-greedy (param-list &optional strip-path replacement)
 	  ret)
       l)))
 
-;; `flatten-tree' was added in Emacs 27.1.
-(defalias 'org-protocol-flatten
-  (if (fboundp 'flatten-tree) 'flatten-tree
-    (lambda (list)
-      "Transform LIST into a flat list.
-
-Greedy handlers might receive a list like this from emacsclient:
-\((\"/dir/org-protocol:/greedy:/~/path1\" (23 . 12)) (\"/dir/param\"))
-where \"/dir/\" is the absolute path to emacsclients working directory.
-This function transforms it into a flat list."
-      (if list
-	  (if (consp list)
-	      (append (org-protocol-flatten (car list))
-		      (org-protocol-flatten (cdr list)))
-	    (list list))))))
-
 (defun org-protocol-parse-parameters (info &optional new-style default-order)
   "Return a property list of parameters from INFO.
 If NEW-STYLE is non-nil, treat INFO as a query string (ex:
-- 
2.25.1

Reply via email to