[PATCH] ob-python: Fix async evaluation

2023-07-10 Thread Liu Hui
Hi,

To reproduce the bug:

1. create test.org:
──✀──
#+begin_src python :session "*Python 3*" :async t
1
#+end_src

# Local Variables:
# python-shell-buffer-name: "Python 3"
# End:
──✀──

2. emacs -Q -L  --eval "(require 'ob-python)"

3. Open test.org, then start a python shell with M-x run-python, which
should create a buffer named "*Python 3*"

4. Press C-c C-c on the src block. Then an error "No inferior Python
process running" is shown.
From 75ca16a21fe409aeb37b9bf0d97895c00f38d466 Mon Sep 17 00:00:00 2001
From: Liu Hui 
Date: Tue, 11 Jul 2023 10:49:07 +0800
Subject: [PATCH] ob-python: Fix async evaluation

* lisp/ob-python.el (org-babel-python-async-evaluate-session): Bind
`python-shell-buffer-name' inside the temp buffer.
---
 lisp/ob-python.el | 47 +--
 1 file changed, 25 insertions(+), 22 deletions(-)

diff --git a/lisp/ob-python.el b/lisp/ob-python.el
index 0e0539d7a..c15d45b96 100644
--- a/lisp/ob-python.el
+++ b/lisp/ob-python.el
@@ -400,28 +400,31 @@ (defun org-babel-python-async-evaluate-session
session (current-buffer)
"ob_comint_async_python_\\(.+\\)_\\(.+\\)"
'org-babel-chomp 'org-babel-python-async-value-callback)
-  (let ((python-shell-buffer-name (org-babel-python-without-earmuffs session)))
-(pcase result-type
-  (`output
-   (let ((uuid (org-id-uuid)))
- (with-temp-buffer
-   (insert (format org-babel-python-async-indicator "start" uuid))
-   (insert "\n")
-   (insert body)
-   (insert "\n")
-   (insert (format org-babel-python-async-indicator "end" uuid))
-   (python-shell-send-buffer))
- uuid))
-  (`value
-   (let ((tmp-results-file (org-babel-temp-file "python-"))
- (tmp-src-file (org-babel-temp-file "python-")))
- (with-temp-file tmp-src-file (insert body))
- (with-temp-buffer
-   (insert (org-babel-python-format-session-value tmp-src-file tmp-results-file result-params))
-   (insert "\n")
-   (insert (format org-babel-python-async-indicator "file" tmp-results-file))
-   (python-shell-send-buffer))
- tmp-results-file)
+  (pcase result-type
+(`output
+ (let ((uuid (org-id-uuid)))
+   (with-temp-buffer
+ (insert (format org-babel-python-async-indicator "start" uuid))
+ (insert "\n")
+ (insert body)
+ (insert "\n")
+ (insert (format org-babel-python-async-indicator "end" uuid))
+ (let ((python-shell-buffer-name
+(org-babel-python-without-earmuffs session)))
+   (python-shell-send-buffer)))
+   uuid))
+(`value
+ (let ((tmp-results-file (org-babel-temp-file "python-"))
+   (tmp-src-file (org-babel-temp-file "python-")))
+   (with-temp-file tmp-src-file (insert body))
+   (with-temp-buffer
+ (insert (org-babel-python-format-session-value tmp-src-file tmp-results-file result-params))
+ (insert "\n")
+ (insert (format org-babel-python-async-indicator "file" tmp-results-file))
+ (let ((python-shell-buffer-name
+(org-babel-python-without-earmuffs session)))
+   (python-shell-send-buffer)))
+   tmp-results-file
 
 (provide 'ob-python)
 
-- 
2.25.1



Re: [PATCH] org.el: Remove undefined dynamic variable `org-log-states' from example

2023-07-10 Thread Max Nikulin

On 11/07/2023 06:11, Evgenii Klimov wrote:

I added `org-summary-todo' example function, that are advertized in
`org-after-todo-statistics-hook', to my init file (with
lexical-binding: t) and got a compilation warning:

   Warning (bytecomp): Unused lexical variable `org-log-states'


May it be a typo? There is the `org-todo-log-states' variable added in

: 70b6cc5da 2008-01-31 11:36:18 +0100 Carsten Dominik: Release 5.10a



[PATCH] org.el: Remove undefined dynamic variable `org-log-states' from example

2023-07-10 Thread Evgenii Klimov
I added `org-summary-todo' example function, that are advertized in
`org-after-todo-statistics-hook', to my init file (with
lexical-binding: t) and got a compilation warning:

  Warning (bytecomp): Unused lexical variable `org-log-states'

since this variable is undefined. The command:

  git log -G 'org-log-states[^-]' --patch -- lisp/

shows its first appearance in commit
2c0812caf14e674d938d80d05678576c0cefcc83 but only in docstring.

Running ~find~ also didn't show its definition:

  find -H . -type f -exec grep --color=auto -i -nH --null \
-e org-log-states\[\^-\] \{\} +

But there are =org-log-states-order-reversed=, but it doesn't seem to
be relevant.

PS: I didn't add TINYCHANGE since I have reached the contribution
limit but FSF didn't respond yet.

>From a3e50c5799acb216ccb2c1ae6883d73ac36e4291 Mon Sep 17 00:00:00 2001
From: Evgenii Klimov 
Date: Mon, 10 Jul 2023 23:00:41 +0100
Subject: [PATCH] org.el: Remove undefined dynamic variable `org-log-states'
 from example

* lisp/org.el (org-after-todo-statistics-hook): Remove undefined
dynamic variable `org-log-states' from docstring example.

* doc/org-manual.org (Breaking Down Tasks into Subtasks): The same
thing in doc example.

`org-log-states' was never defined throughout the whole repo history,
its removal helps to avoid compilation warning.
---
 doc/org-manual.org | 2 +-
 lisp/org.el| 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/doc/org-manual.org b/doc/org-manual.org
index 987a29354..8a58bb31e 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -4648,7 +4648,7 @@ all children are done, you can use the following setup:
 #+begin_src emacs-lisp
 (defun org-summary-todo (n-done n-not-done)
   "Switch entry to DONE when all subentries are done, to TODO otherwise."
-  (let (org-log-done org-log-states)   ; turn off logging
+  (let (org-log-done)   ; turn off logging
 (org-todo (if (= n-not-done 0) "DONE" "TODO"
 
 (add-hook 'org-after-todo-statistics-hook #'org-summary-todo)
diff --git a/lisp/org.el b/lisp/org.el
index 62278ec77..9df56c700 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -9755,7 +9755,7 @@ when there is a statistics cookie in the headline!
 
  (defun org-summary-todo (n-done n-not-done)
\"Switch entry to DONE when all subentries are done, to TODO otherwise.\"
-   (let (org-log-done org-log-states)   ; turn off logging
+   (let (org-log-done)   ; turn off logging
  (org-todo (if (= n-not-done 0) \"DONE\" \"TODO\"")
 
 (defvar org-todo-statistics-hook nil
-- 
2.34.1



Re: move siblings

2023-07-10 Thread Samuel Wales
no, i want to move in a single command, not drag.

as if
m-x org-move-this-entry-to-top-same-level
m-x org-move-to-bottom-same-level


On 7/10/23, Dominik Schrempf  wrote:
> Hi!
>
> Are you looking for =org-shiftmetadown= and sibling functions? I think
> they are bound to SHIFT-META-ArrowDown, and so on, by default.
>
> Cheers,
> Dominik
>
> Samuel Wales  writes:
>
>> * aa
>> ** a
>> ** b
>> ** c
>>
>> is there a command to move entry at point to below c, or to above a?
>


-- 
The Kafka Pandemic

A blog about science, health, human rights, and misopathy:
https://thekafkapandemic.blogspot.com



Re: move siblings

2023-07-10 Thread Dominik Schrempf
Hi!

Are you looking for =org-shiftmetadown= and sibling functions? I think
they are bound to SHIFT-META-ArrowDown, and so on, by default.

Cheers,
Dominik

Samuel Wales  writes:

> * aa
> ** a
> ** b
> ** c
>
> is there a command to move entry at point to below c, or to above a?



move siblings

2023-07-10 Thread Samuel Wales
* aa
** a
** b
** c

is there a command to move entry at point to below c, or to above a?

-- 
The Kafka Pandemic

A blog about science, health, human rights, and misopathy:
https://thekafkapandemic.blogspot.com



Re: [PATCH] org-element-timestamp-interpreter: Return daterange anyway, if DATERANGE is non-nil

2023-07-10 Thread Ilya Chernyshov

Hi.

Preserved old behavior for `org-element-timestamp-interpreter'
function for :range-type set to `nil'. The new function

The new function takes into account :range-type value when interpreting
ranges and throws error when :range-type set for `active'/`inactive'
types.

>From aa21a84fa38324f455cb17ac32e656e1242c2135 Mon Sep 17 00:00:00 2001
From: Ilya Chernyshov 
Date: Sat, 18 Feb 2023 14:55:39 +0700
Subject: [PATCH] lisp/org-element.el: Add new timestamp property :range-type

* lisp/org-element (org-element-timestamp-interpreter): Preserve old
behavior when :range-type is `nil'.  Take into account :range-type
value when interpreting ranges.  When :range-type is `timerange',
return a timerange ().  If :range-type is
`daterange' return a daterange (<...>--<...>).  When :range-type is
nil, return a daterange (as it was before).  When :range-type is
`daterange' or `timerange' and :type is `active'/`inactive', throw an
error.
(org-element-timestamp-parser): Add :range-type property.

* testing/lisp/test-org-element
(test-org-element/timestamp-interpreter): Add new tests.
(test-org-element/timestamp-parser): Add tests for :range-type
property.

* etc/ORG-NEWS (Major changes and additions to Org API): Add news about this property.
---
 etc/ORG-NEWS |   7 +
 lisp/org-element.el  | 171 +++--
 testing/lisp/test-org-element.el | 211 ++-
 3 files changed, 290 insertions(+), 99 deletions(-)

diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index d04e92275..d8d2275d9 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -200,6 +200,13 @@ a newly created one.
 Previously, one had to use
 
 : (apply #'org-element-create 'section nil (org-element-contents node))
+ New property ~:range-type~ for org-element timestamp object
+
+~org-element-timestamp-parser~ now adds =:range-type= property to each
+timestamp object.  Possible values: ~timerange~, ~daterange~, ~nil~.
+
+~org-element-timestamp-interpreter~ takes into account this property
+and returns approptiate timestamp string.
 
 *** ~org-priority=show~ command no longer adjusts for scheduled/deadline
 
diff --git a/lisp/org-element.el b/lisp/org-element.el
index bfb1d206e..5cbc57aab 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -4043,7 +4043,7 @@ Assume point is at the target."
   "Parse time stamp at point, if any.
 
 When at a time stamp, return a new syntax node of `timestamp' type
-containing `:type', `:raw-value', `:year-start', `:month-start',
+containing `:type', `:range-type', `:raw-value', `:year-start', `:month-start',
 `:day-start', `:hour-start', `:minute-start', `:year-end',
 `:month-end', `:day-end', `:hour-end', `:minute-end',
 `:repeater-type', `:repeater-value', `:repeater-unit',
@@ -4077,6 +4077,10 @@ Assume point is at the beginning of the timestamp."
 			 (activep 'active)
 			 ((or date-end time-range) 'inactive-range)
 			 (t 'inactive)))
+ (range-type (cond
+  (date-end 'daterange)
+  (time-range 'timerange)
+  (t nil)))
 	 (repeater-props
 	  (and (not diaryp)
 		   (string-match "\\([.+]?\\+\\)\\([0-9]+\\)\\([hdwmy]\\)"
@@ -4123,6 +4127,7 @@ Assume point is at the beginning of the timestamp."
 	(org-element-create
  'timestamp
 	 (nconc (list :type type
+  :range-type range-type
 		  :raw-value raw-value
 		  :year-start year-start
 		  :month-start month-start
@@ -4142,99 +4147,77 @@ Assume point is at the beginning of the timestamp."
 
 (defun org-element-timestamp-interpreter (timestamp _)
   "Interpret TIMESTAMP object as Org syntax."
-  (let* ((repeat-string
-	  (concat
-	   (pcase (org-element-property :repeater-type timestamp)
-	 (`cumulate "+") (`catch-up "++") (`restart ".+"))
-	   (let ((val (org-element-property :repeater-value timestamp)))
-	 (and val (number-to-string val)))
-	   (pcase (org-element-property :repeater-unit timestamp)
-	 (`hour "h") (`day "d") (`week "w") (`month "m") (`year "y"
-	 (warning-string
-	  (concat
-	   (pcase (org-element-property :warning-type timestamp)
-	 (`first "--") (`all "-"))
-	   (let ((val (org-element-property :warning-value timestamp)))
-	 (and val (number-to-string val)))
-	   (pcase (org-element-property :warning-unit timestamp)
-	 (`hour "h") (`day "d") (`week "w") (`month "m") (`year "y"
-	 (build-ts-string
-	  ;; Build an Org timestamp string from TIME.  ACTIVEP is
-	  ;; non-nil when time stamp is active.  If WITH-TIME-P is
-	  ;; non-nil, add a time part.  HOUR-END and MINUTE-END
-	  ;; specify a time range in the timestamp.  REPEAT-STRING is
-	  ;; the repeater string, if any.
-	  (lambda (time activep  with-time-p hour-end minute-end)
-	(let ((ts (format-time-string
-   (org-time-stamp-format with-time-p)
-		   time)))
-	  (when (and hour-end minute-end)
-		(string-match "[012]?[0-9]:[0-5][0-9]" ts)
-		

Re: [BUG] Warning (org-element-cache): Org parser error (error "Invalid search bound (wrong side of point)")

2023-07-10 Thread Bhavin Gandhi
On Wed, 5 Jul 2023 at 23:45, Ihor Radchenko  wrote:
> Thanks for the report!
> May you increase your org-element--cache-diagnostics-ring-size 10x and
> try to record the backtrace again?
> I can see that org-data boundaries are incorrect (not at point-max), but
> cannot track down when exactly the boundaries are not updated properly.

So, I got the error again today. First I got following warning followed by
the original warning:

Received this when I added a new list item under one heading, the
heading mentioned in the warning is not the one where I added a new list
item.

⛔ Warning (org-element-cache): org-element--cache: Warning(file2.org):
Added org-data parent to non-headline element: (section (:begin 15073
:end 16104 :contents-begin 15073 :contents-end 16104 :robust-begin
15073 :robust-end 16102 :post-blank 0 :post-affiliated 15073 :mode
section :granularity element :cached t :parent (headline (:raw-value
"Project questions" :begin 15030 :end 16104 :pre-blank 0
:contents-begin 15073 :contents-end 16104 :robust-begin 15131
:robust-end 16102 :true-level 1 :level 1 :priority nil :tags nil
:todo-keyword "WAITING" :todo-type todo :post-blank 0
:footnote-section-p nil :archivedp nil :commentedp nil
:post-affiliated 15030 :CREATED "[2023-04-26 Wed 16:49]" :title
"Project questions" :mode nil :granularity element :cached nil :parent
(org-data (:begin 1 :contents-begin 1 :contents-end 1407670 :end
1407670 :robust-begin 3 :robust-end 1407668 :post-blank 0
:post-affiliated 1 :path "/home/bhavin/work/orgfiles/file2.org" :mode
org-data :CATEGORY "file2" :cached t)) :org-element--cache-sync-key
(11 . 15010))) :org-element--cache-sync-key (11 . 15052)))

Will see if I can share the whole backtrace.

And then while doing something in Agenda (I think that was clock out or
save), I got:

⛔ Warning (org-element-cache): org-element--cache: Warning(file2.org):
Org parser error in file2.org::#.
Resetting.
 The error was: (error "Invalid search bound (wrong side of point)")

I think this has something to do with headings which have many list
items, the warnings I have received are from a different file than the
previous one.


--
Bhavin Gandhi (bhavin192) | https://geeksocket.in



Re: [PATCH v2] org-faq.org: Inline comments

2023-07-10 Thread Max Nikulin

On 08/07/2023 16:31, Ihor Radchenko wrote:

- it is what we use ourselves in WORG sources.



Max Nikulin writes:

I have not found it in the worg repository. There are enough @@html:@@
with a handful of @@latex:@@.


Yeah, not in WORG.
https://orgmode.org/quickstart.html#text-comments


It makes the FAQ entry having no value if your suggestions are taken 
into account. (I would add a link to annotating that is another sort of 
comments instead of dropping content further.) So I am giving up and 
leaving opportunity to propose changes to somebody else.


The section in quickstart was added in

64922ca 2020-10-04 14:28:00 -0400 Tom Gillespie: quickstart add sections 
for comments and macros at the end


I am surprises that quickstart is more detailed than the manual. However 
I have no idea how to have this section in both documents with proper 
balance in respect to details. Literal copy may be distracting for 
readers familiar with quickstart.


Bing rates quickstart reasonably, but Google avoids it and I have no 
idea why. Some hypotheses:
- quickstart uses generic metadata for the whole site, not specific for 
this page

-  repeating  has display:none property
- invalid markup in index.html (a pitfall with affiliated keywords 
breaking paragraphs) for the link to quickstart:







class="org-svg" title="Start using Org. You'll never stop.">







I am unsure, but I would expect something like




+#+begin_src org
+The following line may become a patagraph separator.
+@@comment: might give unexpected effect @@
+Put some text before @@comment: a better variant
+@@ and after instread.
+#+end_src


May you please elaborate?
If you see inline export block starting a paragraph, it is a bug.


I failed to convince you that it is a general issue, not a LaTeX 
specific one.


Ihor Radchenko to emacs-orgmode… Re: [BUG] No space after footnote with 
org-export-with-footnotes set to nil [9.6.1 ( @ 
/Users/test/.emacs.d/elpa/28.0/develop/org-9.6.1/)] Tue, 14 Mar 2023 
12:19:11 +. https://list.orgmode.org/87fsa7o79c.fsf@localhost


try to export to MarkDown. Even for LaTeX the fix is in the development 
branch only. There are enough users of built-in Org that deserve to be 
warned.






Feature request: adjust ~org-agenda-format-item~ to let the user choose the first level included in breadcrumbs

2023-07-10 Thread M. Pger
Dear All,

Including "%b" in the org agenda prefix formats (org-agenda-prefix-format​) 
allows to display entries' outline paths, which is super useful to get 
project-oriented agenda views/todo-list.

Consider a project 'Foobar Report'. In the agenda view/todo-list, it would look 
like the following:
```
PROJECT Foobar Report
Foobar Report->TODO Task1
Foobar Report->Task1->TODO Subtask1.1
Foobar Report->Task1->TODO Subtask1.2
Foobar Report->TODO Task2
Foobar Report->Task2-> TODO Subtask2.1
Foobar Report->Task2-> TODO Subtask2.2
```

In such a setting, having 'Foobar Report' at the beginning of each line is not 
really useful and can impair readability. To tell Org to only print breadcrumbs 
starting at e.g. level 2 (i.e. skipping the 'Foobar Report' part of the 
breadcrumbs), I followed the first part of 
https://list.orgmode.org/CAGEgU=hgnxj7tsgv6pvdsewfwp_ivwe8wru+uh8hjh_7nnr...@mail.gmail.com/
 and modified the following part of org-agenda-format-item​:
```
(when org-prefix-has-breadcrumbs
(setq breadcrumbs
(org-with-point-at (org-get-at-bol 'org-marker)
(let ((s (org-format-outline-path (org-get-outline-path)
(1- (frame-width))
nil org-agenda-breadcrumbs-separator)))
(if (eq "" s) "" (concat s org-agenda-breadcrumbs-separator))
```
by replacing (org-get-outline-path) with
​```
(nthcdr (1- org-agenda-breadcrumbs-start-level)
(org-get-outline-path))

​```
while setting a custom variable org-agenda-breadcrumbs-start-level​ to 2. It 
works well.

Would the Org devs/active contributors be willing to implement such 
modification (maybe a cleaner version, with a better custom variable name?) in 
the next release of Org?

Best,

MP

PS: Note that I tried to implement the same using advice-add​, but miserably 
failed and decided to go for a complete redefinition of org-agenda-format-item 
(more lines, but less pain).

​

Re: [BUG] Error in data input and output format for org-columns--summary-estimate

2023-07-10 Thread Ihor Radchenko
and...@fedeli.eu writes:

>#+PROPERTY: Effort_ALL 0 0:10 0:30 1:00 2:00 3:00 4:00 5:00 6:00 7:00
>
>#+COLUMNS: %30ITEM(Task) %30Effort(Estimated Effort){est+} %CLOCKSUM
>...
>Originally produces
>image.png
>That shows that days and months are wrongly counted the same

Thanks!
Confirmed.

>> The matter is related to the fact that org-columns--summary-estimate, 
> from org-colview.el, uses function string-to-number to take value on ranges; 
> acting this way

>   Both issues can be very simply addressed by adoption of 
> org-duration-to-minutes as
>
>   input adapted and org-duration-from-minutes as output adapter.
>   A similar concern affects also the simpler case of a single value instead 
> of a range (second pcase branch)

This will not be backwards-compatible.
Some people may abuse this summary type to count something that is not
time, like cost.

We rather need something like the attached diff.
However, this will use `org-duration-format', which may not always be
desirable - the default value will force days even when all the estimates
are months:

3m
3m-4m
---
180d 0:00 - 210d 0:00

diff --git a/lisp/org-colview.el b/lisp/org-colview.el
index 7aa5ef645..da9a11104 100644
--- a/lisp/org-colview.el
+++ b/lisp/org-colview.el
@@ -1345,18 +1345,32 @@ (defun org-columns--summary-estimate (estimates _)
 The mean and variance of the result will be the sum of the means
 and variances (respectively) of the individual estimates."
   (let ((mean 0)
-(var 0))
+(var 0)
+(durationp
+ (catch :no-match
+   (dolist (e estimates)
+ (dolist (val (split-string e "-"))
+   (unless (org-duration-p val) (throw :no-match nil
+   'all-values-are-durations)))
 (dolist (e estimates)
-  (pcase (mapcar #'string-to-number (split-string e "-"))
+  (pcase (mapcar
+  (if durationp
+  #'org-duration-to-minutes
+#'string-to-number)
+  (split-string e "-"))
 	(`(,low ,high)
 	 (let ((m (/ (+ low high) 2.0)))
 	   (cl-incf mean m)
 	   (cl-incf var (- (/ (+ (* low low) (* high high)) 2.0) (* m m)
 	(`(,value) (cl-incf mean value
 (let ((sd (sqrt var)))
-  (format "%s-%s"
-	  (format "%.0f" (- mean sd))
-	  (format "%.0f" (+ mean sd))
+  (if durationp
+  (format "%s - %s"
+  (org-duration-from-minutes (- mean sd))
+  (org-duration-from-minutes (+ mean sd)))
+(format "%s-%s"
+	(format "%.0f" (- mean sd))
+	(format "%.0f" (+ mean sd)))
 
 
 

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at .
Support Org development at ,
or support my work at 


Re: [BUG] Source block indentation does not work properly for yaml-mode [9.6.6 ( @ /home/user/.emacs.d/elpa/org-9.6.6/)]

2023-07-10 Thread Ihor Radchenko
Sébastien Miquel  writes:

> Subject: [PATCH] test-org-src.el: Work around `current-column' bug in older
>  emacs
>
> * testing/lisp/test-org-src.el (test-org-src/indented-blocks): Work
> around `current-column' not working in the presence of display strings
> in older emacs.

Applied, onto main. Thanks!
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=67e819d6e

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at .
Support Org development at ,
or support my work at 



Re: [PATCH] ox-html.el: Fix relative links with :html-link-use-abs-url

2023-07-10 Thread Ihor Radchenko
Akira Kyle  writes:

> From e9b8b782dbf956c855e2e3cdec5b9e8aa47d47c1 Mon Sep 17 00:00:00 2001
> From: Akira Kyle 
> Date: Mon, 27 Feb 2023 12:12:32 -0700
> Subject: [PATCH] org-html-link: Fix relative links with :html-link-use-abs-url

Applied, onto main, adding TINYCHANGE cookie to the commit message.
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=8fa7f0279

You are now listed as Org contributor.
https://git.sr.ht/~bzg/worg/commit/faf027f8

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at .
Support Org development at ,
or support my work at