* [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
@ 2023-02-24 17:03 Ken Mankoff
2023-02-24 18:33 ` Ken Mankoff
0 siblings, 1 reply; 21+ messages in thread
From: Ken Mankoff @ 2023-02-24 17:03 UTC (permalink / raw)
To: Org-mode
* ob-screen.el: (org-babel-execute:screen): Parse header params
for `:var', then inject into screen session.
(org-babel-variable-assignments:screen): Copied from
ob-shell.el org-babel-variable-assignments:shell
* etc/ORG-NEWS: Document as New Feature
This change only supports single-value variables
(e.g., ~:var x=42~), not tables or arrays as is
currently supported by some other languages.
---
etc/ORG-NEWS | 13 +++++++++++++
lisp/ob-screen.el | 21 +++++++++++++++++++++
2 files changed, 34 insertions(+)
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 87ecd77cd..d4b454d13 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -106,6 +106,19 @@ selection.
TODO state, priority, tags, statistics cookies, and COMMENT keywords
are allowed in the tree structure.
+*** ob-screen now supports :var header arguments
+
+The ~:var~ header arg now supports simple single-value variables
+(arrays and tables are not supported).
+
+#+BEGIN_src org
+,#+BEGIN_SRC screen :var x=42
+,echo $x
+,#+END_SRC
+#+END_src
+
+
+
* Version 9.6
** Important announcements and breaking changes
diff --git a/lisp/ob-screen.el b/lisp/ob-screen.el
index 269538e79..d8f361e50 100644
--- a/lisp/ob-screen.el
+++ b/lisp/ob-screen.el
@@ -55,11 +55,32 @@ In case you want to use a different screen than one selected by your $PATH")
(message "Sending source code block to interactive terminal session...")
(save-window-excursion
(let* ((session (cdr (assq :session params)))
+ (var-lines (org-babel-variable-assignments:screen params))
(socket (org-babel-screen-session-socketname session)))
(unless socket (org-babel-prep-session:screen session params))
+ (mapcar (lambda (var)
+ (org-babel-screen-session-execute-string session var))
+ var-lines)
(org-babel-screen-session-execute-string
session (org-babel-expand-body:generic body params)))))
+(defun org-babel-variable-assignments:screen (params)
+ "Return list of shell statements assigning the block's variables."
+ ;; From ob-shell but change function name from ":shell" to ":screen"
+ (let ((sep (cdr (assq :separator params)))
+ (hline (when (string= "yes" (cdr (assq :hlines params)))
+ (or (cdr (assq :hline-string params))
+ "hline"))))
+ (mapcar
+ (lambda (pair)
+ (if (string-suffix-p "bash" shell-file-name)
+ (org-babel--variable-assignments:bash
+ (car pair) (cdr pair) sep hline)
+ (org-babel--variable-assignments:sh-generic
+ (car pair) (cdr pair) sep hline)))
+ (org-babel--get-vars params))))
+
+
(defun org-babel-prep-session:screen (_session params)
"Prepare SESSION according to the header arguments specified in PARAMS."
(let* ((session (cdr (assq :session params)))
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-02-24 17:03 [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks Ken Mankoff
@ 2023-02-24 18:33 ` Ken Mankoff
2023-02-25 3:51 ` Max Nikulin
0 siblings, 1 reply; 21+ messages in thread
From: Ken Mankoff @ 2023-02-24 18:33 UTC (permalink / raw)
To: Org-mode
[-- Attachment #1: Type: text/plain, Size: 113 bytes --]
I realize the patch should be an attachment, not the body of the email. Sorry. R-sending as attachment.
-k.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-lisp-ob-screen.el-Support-var-header-args-for-babel-.patch --]
[-- Type: text/x-diff, Size: 3024 bytes --]
From 5a4707cc16fb5f10cd394762f41d50d8830db240 Mon Sep 17 00:00:00 2001
From: "Kenneth D. Mankoff" <mankoff@gmail.com>
Date: Mon, 20 Feb 2023 21:40:39 -0800
Subject: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel
blocks
* ob-screen.el: (org-babel-execute:screen): Parse header params
for `:var', then inject into screen session.
(org-babel-variable-assignments:screen): Copied from
ob-shell.el org-babel-variable-assignments:shell
* etc/ORG-NEWS: Document as New Feature
This change only supports single-value variables
(e.g., ~:var x=42~), not tables or arrays as is
currently supported by some other languages.
---
etc/ORG-NEWS | 13 +++++++++++++
lisp/ob-screen.el | 21 +++++++++++++++++++++
2 files changed, 34 insertions(+)
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 87ecd77cd..d4b454d13 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -106,6 +106,19 @@ selection.
TODO state, priority, tags, statistics cookies, and COMMENT keywords
are allowed in the tree structure.
+*** ob-screen now supports :var header arguments
+
+The ~:var~ header arg now supports simple single-value variables
+(arrays and tables are not supported).
+
+#+BEGIN_src org
+,#+BEGIN_SRC screen :var x=42
+,echo $x
+,#+END_SRC
+#+END_src
+
+
+
* Version 9.6
** Important announcements and breaking changes
diff --git a/lisp/ob-screen.el b/lisp/ob-screen.el
index 269538e79..d8f361e50 100644
--- a/lisp/ob-screen.el
+++ b/lisp/ob-screen.el
@@ -55,11 +55,32 @@ In case you want to use a different screen than one selected by your $PATH")
(message "Sending source code block to interactive terminal session...")
(save-window-excursion
(let* ((session (cdr (assq :session params)))
+ (var-lines (org-babel-variable-assignments:screen params))
(socket (org-babel-screen-session-socketname session)))
(unless socket (org-babel-prep-session:screen session params))
+ (mapcar (lambda (var)
+ (org-babel-screen-session-execute-string session var))
+ var-lines)
(org-babel-screen-session-execute-string
session (org-babel-expand-body:generic body params)))))
+(defun org-babel-variable-assignments:screen (params)
+ "Return list of shell statements assigning the block's variables."
+ ;; From ob-shell but change function name from ":shell" to ":screen"
+ (let ((sep (cdr (assq :separator params)))
+ (hline (when (string= "yes" (cdr (assq :hlines params)))
+ (or (cdr (assq :hline-string params))
+ "hline"))))
+ (mapcar
+ (lambda (pair)
+ (if (string-suffix-p "bash" shell-file-name)
+ (org-babel--variable-assignments:bash
+ (car pair) (cdr pair) sep hline)
+ (org-babel--variable-assignments:sh-generic
+ (car pair) (cdr pair) sep hline)))
+ (org-babel--get-vars params))))
+
+
(defun org-babel-prep-session:screen (_session params)
"Prepare SESSION according to the header arguments specified in PARAMS."
(let* ((session (cdr (assq :session params)))
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-02-24 18:33 ` Ken Mankoff
@ 2023-02-25 3:51 ` Max Nikulin
2023-02-25 15:14 ` Ken Mankoff
0 siblings, 1 reply; 21+ messages in thread
From: Max Nikulin @ 2023-02-25 3:51 UTC (permalink / raw)
To: emacs-orgmode; +Cc: Ken Mankoff
On 25/02/2023 01:33, Ken Mankoff wrote:
> Subject: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel
> blocks
Thank you for the patch. I suppose, suggestion to send patches as
attachments is added mostly to prevent patches inside HTML message body.
If a message could be feed to "git am" then it should be OK.
I am unsure if Org markup is suitable for commit messages (~:var~) since
it may appear in Emacs commit logs.
> +++ b/lisp/ob-screen.el
...
> +(defun org-babel-variable-assignments:screen (params)
> + "Return list of shell statements assigning the block's variables."
> + ;; From ob-shell but change function name from ":shell" to ":screen"
...
> + (if (string-suffix-p "bash" shell-file-name)
> + (org-babel--variable-assignments:bash
The code still depends on on ob-shell. Is there a reason why calling
`org-babel-variable-assignments:shell' is a worse variant than copy of
the whole function body?
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-02-25 3:51 ` Max Nikulin
@ 2023-02-25 15:14 ` Ken Mankoff
2023-02-25 15:19 ` Ken Mankoff
2023-02-25 16:05 ` Max Nikulin
0 siblings, 2 replies; 21+ messages in thread
From: Ken Mankoff @ 2023-02-25 15:14 UTC (permalink / raw)
To: Max Nikulin; +Cc: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 705 bytes --]
Hi Max,
On 2023-02-24 at 19:51 -08, Max Nikulin <manikulin@gmail.com> wrote:
> On 25/02/2023 01:33, Ken Mankoff wrote:
> I am unsure if Org markup is suitable for commit messages (~:var~)
> since it may appear in Emacs commit logs.
Fixed.
> The code still depends on on ob-shell. Is there a reason why calling
> `org-babel-variable-assignments:shell' is a worse variant than copy of
> the whole function body?
I didn't realize that was a dependency. I now use that function. This also means that arrays/tables/etc. are all supported by :var, although not in the default screen ":cmd sh" because sh doesn't support "declare", but it works with ":cmd bash".
Improved patch attached.
Thanks,
-k.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-lisp-ob-screen.el-Support-var-header-args-for-babel-.patch --]
[-- Type: text/x-diff, Size: 1834 bytes --]
From 580499925644cdb9c2dd8c783ec03c095bec7a86 Mon Sep 17 00:00:00 2001
From: "Kenneth D. Mankoff" <mankoff@gmail.com>
Date: Mon, 20 Feb 2023 21:40:39 -0800
Subject: [PATCH] lisp/ob-screen.el: Support var header args for babel blocks
* ob-screen.el: (org-babel-execute:screen): Parse header params
for `:var', then inject into screen session.
* etc/ORG-NEWS: Document as New Feature
---
etc/ORG-NEWS | 12 ++++++++++++
lisp/ob-screen.el | 4 ++++
2 files changed, 16 insertions(+)
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 87ecd77cd..0da686354 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -106,6 +106,18 @@ selection.
TODO state, priority, tags, statistics cookies, and COMMENT keywords
are allowed in the tree structure.
+*** ob-screen now supports :var header arguments
+
+The ~:var~ header arg is now supported.
+
+#+BEGIN_src org
+,#+BEGIN_SRC screen :var x=42
+,echo $x
+,#+END_SRC
+#+END_src
+
+
+
* Version 9.6
** Important announcements and breaking changes
diff --git a/lisp/ob-screen.el b/lisp/ob-screen.el
index 269538e79..bd8650f6b 100644
--- a/lisp/ob-screen.el
+++ b/lisp/ob-screen.el
@@ -55,8 +55,12 @@ In case you want to use a different screen than one selected by your $PATH")
(message "Sending source code block to interactive terminal session...")
(save-window-excursion
(let* ((session (cdr (assq :session params)))
+ (var-lines (org-babel-variable-assignments:shell params))
(socket (org-babel-screen-session-socketname session)))
(unless socket (org-babel-prep-session:screen session params))
+ (mapcar (lambda (var)
+ (org-babel-screen-session-execute-string session var))
+ var-lines)
(org-babel-screen-session-execute-string
session (org-babel-expand-body:generic body params)))))
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-02-25 15:14 ` Ken Mankoff
@ 2023-02-25 15:19 ` Ken Mankoff
2023-02-25 16:05 ` Max Nikulin
1 sibling, 0 replies; 21+ messages in thread
From: Ken Mankoff @ 2023-02-25 15:19 UTC (permalink / raw)
To: Max Nikulin; +Cc: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 921 bytes --]
I note that `org-babel-screen-test` fails, but it appears to fail before
this change too...
-k.
On Sat, Feb 25, 2023 at 7:14 AM Ken Mankoff <mankoff@gmail.com> wrote:
> Hi Max,
>
> On 2023-02-24 at 19:51 -08, Max Nikulin <manikulin@gmail.com> wrote:
> > On 25/02/2023 01:33, Ken Mankoff wrote:
> > I am unsure if Org markup is suitable for commit messages (~:var~)
> > since it may appear in Emacs commit logs.
>
> Fixed.
>
> > The code still depends on on ob-shell. Is there a reason why calling
> > `org-babel-variable-assignments:shell' is a worse variant than copy of
> > the whole function body?
>
> I didn't realize that was a dependency. I now use that function. This also
> means that arrays/tables/etc. are all supported by :var, although not in
> the default screen ":cmd sh" because sh doesn't support "declare", but it
> works with ":cmd bash".
>
> Improved patch attached.
>
> Thanks,
>
> -k.
>
>
>
>
[-- Attachment #2: Type: text/html, Size: 1433 bytes --]
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-02-25 15:14 ` Ken Mankoff
2023-02-25 15:19 ` Ken Mankoff
@ 2023-02-25 16:05 ` Max Nikulin
2023-02-25 16:47 ` Ken Mankoff
1 sibling, 1 reply; 21+ messages in thread
From: Max Nikulin @ 2023-02-25 16:05 UTC (permalink / raw)
To: Ken Mankoff; +Cc: emacs-orgmode
On 25/02/2023 22:14, Ken Mankoff wrote:
> On 2023-02-24 at 19:51 -08, Max Nikulin wrote:
>> The code still depends on on ob-shell. Is there a reason why calling
>> `org-babel-variable-assignments:shell' is a worse variant than copy of
>> the whole function body?
>
> I didn't realize that was a dependency. I now use that function. This
> also means that arrays/tables/etc. are all supported by :var, although
> not in the default screen ":cmd sh" because sh doesn't support
> "declare", but it works with ":cmd bash".
> + (var-lines (org-babel-variable-assignments:shell params))
> (socket (org-babel-screen-session-socketname session)))
I believe, it is safer to define `org-babel-variable-assignments:screen'
some way: alias, substitution, function that calls
`org-babel-variable-assignments:shell'. I am unsure which variant is
better. I see a couple of callers for specific language in ob-core.el.
I can not suggest anything specific concerning sh vs. bash. I have never
tried to pass tables to sh src blocks.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-02-25 16:05 ` Max Nikulin
@ 2023-02-25 16:47 ` Ken Mankoff
2023-02-26 10:11 ` Max Nikulin
2023-02-26 12:18 ` Ihor Radchenko
0 siblings, 2 replies; 21+ messages in thread
From: Ken Mankoff @ 2023-02-25 16:47 UTC (permalink / raw)
To: Max Nikulin; +Cc: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 389 bytes --]
Hi Max,
On 2023-02-25 at 08:05 -08, Max Nikulin <manikulin@gmail.com> wrote:
> I believe, it is safer to define
> `org-babel-variable-assignments:screen' some way: alias, substitution,
> function that calls `org-babel-variable-assignments:shell'. I am
> unsure which variant is better. I see a couple of callers for specific
> language in ob-core.el.
How's this with a defalias?
-k.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-lisp-ob-screen.el-Support-var-header-args-for-babel-.patch --]
[-- Type: text/x-diff, Size: 2183 bytes --]
From f7ca0258d72b3da5743b1134718b1d1f0d74491d Mon Sep 17 00:00:00 2001
From: "Kenneth D. Mankoff" <mankoff@gmail.com>
Date: Mon, 20 Feb 2023 21:40:39 -0800
Subject: [PATCH] lisp/ob-screen.el: Support var header args for babel blocks
* ob-screen.el: (org-babel-execute:screen): Parse header params
for `:var', then inject into screen session.
* etc/ORG-NEWS: Document as New Feature
---
etc/ORG-NEWS | 12 ++++++++++++
lisp/ob-screen.el | 8 ++++++++
2 files changed, 20 insertions(+)
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 87ecd77cd..0da686354 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -106,6 +106,18 @@ selection.
TODO state, priority, tags, statistics cookies, and COMMENT keywords
are allowed in the tree structure.
+*** ob-screen now supports :var header arguments
+
+The ~:var~ header arg is now supported.
+
+#+BEGIN_src org
+,#+BEGIN_SRC screen :var x=42
+,echo $x
+,#+END_SRC
+#+END_src
+
+
+
* Version 9.6
** Important announcements and breaking changes
diff --git a/lisp/ob-screen.el b/lisp/ob-screen.el
index 269538e79..6e6a31ea6 100644
--- a/lisp/ob-screen.el
+++ b/lisp/ob-screen.el
@@ -40,6 +40,10 @@
(require 'ob)
+;; Reuse the variable assignment code from ob-shell
+(defalias 'org-babel-variable-assignments:screen
+ 'org-babel-variable-assignments:shell)
+
(defvar org-babel-screen-location "screen"
"The command location for screen.
In case you want to use a different screen than one selected by your $PATH")
@@ -55,8 +59,12 @@ In case you want to use a different screen than one selected by your $PATH")
(message "Sending source code block to interactive terminal session...")
(save-window-excursion
(let* ((session (cdr (assq :session params)))
+ (var-lines (org-babel-variable-assignments:screen params))
(socket (org-babel-screen-session-socketname session)))
(unless socket (org-babel-prep-session:screen session params))
+ (mapcar (lambda (var)
+ (org-babel-screen-session-execute-string session var))
+ var-lines)
(org-babel-screen-session-execute-string
session (org-babel-expand-body:generic body params)))))
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-02-25 16:47 ` Ken Mankoff
@ 2023-02-26 10:11 ` Max Nikulin
2023-02-27 1:59 ` Ken Mankoff
2023-02-26 12:18 ` Ihor Radchenko
1 sibling, 1 reply; 21+ messages in thread
From: Max Nikulin @ 2023-02-26 10:11 UTC (permalink / raw)
To: Ken Mankoff; +Cc: emacs-orgmode
On 25/02/2023 23:47, Ken Mankoff wrote:
> On 2023-02-25 at 08:05 -08, Max Nikulin wrote:
>> I believe, it is safer to define
>> `org-babel-variable-assignments:screen' some way: alias, substitution,
>> function that calls `org-babel-variable-assignments:shell'. I am
>> unsure which variant is better. I see a couple of callers for specific
>> language in ob-core.el.
>
> How's this with a defalias?
I do not mind since ob-shell.el uses it for particular shell names.
Concerning tables as variable values, it seems sh receives them as TAB
separated text.
As to `org-babel-screen-test' perhaps the issue is additional newline
added after random number. I have not tried stepping through the
function in debugger though.
> diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
...
> +#+END_src
> +
> +
> +
> * Version 9.6
It seems top level headings were separated by single empty line.
> diff --git a/lisp/ob-screen.el b/lisp/ob-screen.el
...
;; Reuse the variable assignment code from ob-shell
> +(defalias 'org-babel-variable-assignments:screen
> + 'org-babel-variable-assignments:shell)
Have you tried to compile using make? I expect a warning due to missed
(require 'ob-shell).
I have no objections besides this couple of minor issues. I am not a
maintainer though.
P.S. My expectations based on the package name were that ob-screen is
intended for running commands on remote hosts. Reading the code I
noticed a couple of issues that may be fixed when you will decide to
touch this file next time:
- `org-babel-screen-session-socketname' does not respect
`org-babel-screen-location'
- `string-match' is used where it may be replaced by `string-match-p'
since match data is not used.
I noticed that ob-core besides org-babel-default-header-args:LANG uses
org-babel-header-args:LANG. The latter is not defined in ob-screen,
however I am unsure concerning its effect (completion?).
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-02-25 16:47 ` Ken Mankoff
2023-02-26 10:11 ` Max Nikulin
@ 2023-02-26 12:18 ` Ihor Radchenko
2023-02-27 1:59 ` Ken Mankoff
1 sibling, 1 reply; 21+ messages in thread
From: Ihor Radchenko @ 2023-02-26 12:18 UTC (permalink / raw)
To: Ken Mankoff; +Cc: Max Nikulin, emacs-orgmode
Ken Mankoff <mankoff@gmail.com> writes:
> From f7ca0258d72b3da5743b1134718b1d1f0d74491d Mon Sep 17 00:00:00 2001
> From: "Kenneth D. Mankoff" <mankoff@gmail.com>
> Date: Mon, 20 Feb 2023 21:40:39 -0800
> Subject: [PATCH] lisp/ob-screen.el: Support var header args for babel blocks
Thanks for the patch!
> +;; Reuse the variable assignment code from ob-shell
> +(defalias 'org-babel-variable-assignments:screen
> + 'org-babel-variable-assignments:shell)
This will work, but you are relying on implementation detail of
ob-shell.el. A more safe approach would be calling
org-babel-variable-assignments:LANG depending on the :cmd header arg.
For :cmd bash - org-babel-variable-assignments:bash, for :cmd fish -
org-babel-variable-assignments:fish.
To archive this, you can define a full
org-babel-variable-assignments:screen function that does what I described.
--
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] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-02-26 10:11 ` Max Nikulin
@ 2023-02-27 1:59 ` Ken Mankoff
2023-02-28 10:40 ` Ihor Radchenko
2023-03-02 13:38 ` [PATCH] " Max Nikulin
0 siblings, 2 replies; 21+ messages in thread
From: Ken Mankoff @ 2023-02-27 1:59 UTC (permalink / raw)
To: Max Nikulin; +Cc: emacs-orgmode
Hi Max,
On 2023-02-26 at 02:11 -08, Max Nikulin <manikulin@gmail.com> wrote:
> As to `org-babel-screen-test' perhaps the issue is additional newline
> added after random number. I have not tried stepping through the
> function in debugger though.
I haven't either. I'll see if I can figure out the issue with the help of the debugger.
> It seems top level headings were separated by single empty line.
Fixed.
> ;; Reuse the variable assignment code from ob-shell
>> +(defalias 'org-babel-variable-assignments:screen
>> + 'org-babel-variable-assignments:shell)
>
> Have you tried to compile using make? I expect a warning due to missed
> (require 'ob-shell).
Make did not complain about this, but did suggest mapcar -> mapc.
> P.S. My expectations based on the package name were that ob-screen is
> intended for running commands on remote hosts.
That too. But I also find it useful for running long commands on localhost without worrying about :async in emacs.
Another nice thing here is that this is, by default, session-based, and can be accessed outside of Org, while Bash blocks don't always play nice with sessions. I can, for example and all in Org Babel, spawn a screen session, ssh to a remote host, and then inject :var into the remote session. I find this quite powerful, and I haven't figured out how to do it with =BEGIN_SRC bash= or =BEGIN_SRC shell= blocks.
> Reading the code I noticed a couple of issues that may be fixed when
> you will decide to touch this file next time: -
> `org-babel-screen-session-socketname' does not respect
> `org-babel-screen-location' - `string-match' is used where it may be
> replaced by `string-match-p' since match data is not used.
Both fixed. Should these be separate patches (3 total), or two - one for the new feature, and one 'cleanup'?
> I noticed that ob-core besides org-babel-default-header-args:LANG uses
> org-babel-header-args:LANG. The latter is not defined in ob-screen,
> however I am unsure concerning its effect (completion?).
I don't understand this either.
-k.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-02-26 12:18 ` Ihor Radchenko
@ 2023-02-27 1:59 ` Ken Mankoff
2023-02-27 19:43 ` Ihor Radchenko
0 siblings, 1 reply; 21+ messages in thread
From: Ken Mankoff @ 2023-02-27 1:59 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: Max Nikulin, emacs-orgmode
Hi Ihor,
On 2023-02-26 at 04:18 -08, Ihor Radchenko <yantar92@posteo.net> wrote:
>> +;; Reuse the variable assignment code from ob-shell
>> +(defalias 'org-babel-variable-assignments:screen
>> + 'org-babel-variable-assignments:shell)
>
> This will work, but you are relying on implementation detail of
> ob-shell.el. A more safe approach would be calling
> org-babel-variable-assignments:LANG depending on the :cmd header arg.
> For :cmd bash - org-babel-variable-assignments:bash, for :cmd fish -
> org-babel-variable-assignments:fish.
>
> To archive this, you can define a full
> org-babel-variable-assignments:screen function that does what I
> described.
You're pushing my lisp skills here. Which is fine, but I might need some help.
In ob-shell I see
(defcustom org-babel-shell-names
'("sh" "bash" "zsh" "fish" "csh" "ash" "dash" "ksh" "mksh" "posh")
Should I create a function that, using case statement or something similar, checks for each of these and calls that flavor? I think I could do that.
But if I also see org-babel-shell-initialize in ob-shell that looks like it creates defaliases for each of these to (org-babel-execute:shell) and #'org-babel-variable-assignments:shell.
I'm not sure how that is very different from what I've done. I'm not sure what to do here, nor how to do what you suggest (yet - I've only read it so far, not spent a lot of time experimenting and searching, so I may be able to implement what I think is a solution to what you wrote, but I doubt it'll be what you expect).
-k.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-02-27 1:59 ` Ken Mankoff
@ 2023-02-27 19:43 ` Ihor Radchenko
0 siblings, 0 replies; 21+ messages in thread
From: Ihor Radchenko @ 2023-02-27 19:43 UTC (permalink / raw)
To: Ken Mankoff; +Cc: Max Nikulin, emacs-orgmode
Ken Mankoff <mankoff@gmail.com> writes:
>> To archive this, you can define a full
>> org-babel-variable-assignments:screen function that does what I
>> described.
>
> You're pushing my lisp skills here. Which is fine, but I might need some help.
>
> In ob-shell I see
>
> (defcustom org-babel-shell-names
> '("sh" "bash" "zsh" "fish" "csh" "ash" "dash" "ksh" "mksh" "posh")
>
> Should I create a function that, using case statement or something similar, checks for each of these and calls that flavor? I think I could do that.
Not each of these. AFAIU, :cmd header property in ob-screen defines
which shell to use. Knowing shell name, you can deduce the function name
to be used for variable assignments. See how it is done in
`org-babel-expand-src-block'.
> But if I also see org-babel-shell-initialize in ob-shell that looks like it creates defaliases for each of these to (org-babel-execute:shell) and #'org-babel-variable-assignments:shell.
The convention is for every possible #+begin_src lang to have
org-babel-variable-assignments:LANG.
ob-shell just tries to avoid unnecessary code duplication and instead of
writing identical org-babel-variable-assignments:sh
org-babel-variable-assignments:bash, org-babel-variables-assignents:zsh,
..., it generates them using a macro.
> I'm not sure how that is very different from what I've done. I'm not sure what to do here, nor how to do what you suggest (yet - I've only read it so far, not spent a lot of time experimenting and searching, so I may be able to implement what I think is a solution to what you wrote, but I doubt it'll be what you expect).
AFAIU, you don't need to juggle with macros as ob-shell does. Something
similar to `org-babel-expand-src-block' will do.
--
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] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-02-27 1:59 ` Ken Mankoff
@ 2023-02-28 10:40 ` Ihor Radchenko
2023-03-16 4:12 ` Ken Mankoff
2023-03-02 13:38 ` [PATCH] " Max Nikulin
1 sibling, 1 reply; 21+ messages in thread
From: Ihor Radchenko @ 2023-02-28 10:40 UTC (permalink / raw)
To: Ken Mankoff; +Cc: Max Nikulin, emacs-orgmode
Ken Mankoff <mankoff@gmail.com> writes:
>> I noticed that ob-core besides org-babel-default-header-args:LANG uses
>> org-babel-header-args:LANG. The latter is not defined in ob-screen,
>> however I am unsure concerning its effect (completion?).
>
> I don't understand this either.
It defines the expected values of header arguments.
Used in completion and by org-lint.
It is a good idea to define it, but mostly for completeness.
If the header args can be anything anyway, it will not affect anything
other than the code style.
--
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] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-02-27 1:59 ` Ken Mankoff
2023-02-28 10:40 ` Ihor Radchenko
@ 2023-03-02 13:38 ` Max Nikulin
1 sibling, 0 replies; 21+ messages in thread
From: Max Nikulin @ 2023-03-02 13:38 UTC (permalink / raw)
To: Ken Mankoff; +Cc: emacs-orgmode
On 27/02/2023 08:59, Ken Mankoff wrote:
>> Have you tried to compile using make? I expect a warning due to missed
>> (require 'ob-shell).
>
> Make did not complain about this, but did suggest mapcar -> mapc.
I did not expect it. However I still think, it is better to add such
require. It should not be an error if a user is going to use ob-screen
without explicitly loading ob-shell.
> Both fixed. Should these be separate patches (3 total), or two - one for
> the new feature, and one 'cleanup'?
I do not think it really matters if 2 minor fixes will be committed
separately or as a single patch.
>> I noticed that ob-core besides org-babel-default-header-args:LANG uses
>> org-babel-header-args:LANG. The latter is not defined in ob-screen,
>> however I am unsure concerning its effect (completion?).
>
> I don't understand this either.
Anyway it is unrelated to the patch we are currently discussing. It is
an option for the future.
As to calling org-babel-variable-assignments: for specific shell, as
Ihor suggests, it should be something like (untested)
(funcall (intern (concat "org-babel-variable-assignments:"
(plist-get params :cmd))
params)
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-02-28 10:40 ` Ihor Radchenko
@ 2023-03-16 4:12 ` Ken Mankoff
2023-03-16 10:22 ` Ihor Radchenko
0 siblings, 1 reply; 21+ messages in thread
From: Ken Mankoff @ 2023-03-16 4:12 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: Max Nikulin, emacs-orgmode
Hi Ihor and Max,
Just a follow-up note that I am unlikely to be able to complete this patch anytime soon. Re-alignment of priorities because my need for :var header support in Org Babel is mitigated by a different method of injecting variables into Org Babel sections: Use noweb.
I find this more powerful than =:var=. The examples below show (1) setting a bash environment variable in screen, or (2) printing from a Python prompt after sshing to a remote computer. It is language agnostic. Because it uses PROPERTIES and not :var, it also lets me work in Org Column View mode.
* Header
:PROPERTIES:
:foo: 42
:END:
#+NAME: ex1-screen-bash
#+BEGIN_SRC screen
export foo="<<get_property("foo")>>"
#+END_SRC
#+NAME: ex2-ssh-python
#+BEGIN_SRC bash
ssh somewhere
python
print("<<get_property("foo")>>")
#+END_SRC
#+CALL: ex2-ssh-python()
#+RESULTS:
: foo
The relevant section from my library-of-babel is:
* Properties into header args
:PROPERTIES:
:hellomessage: hello
:END:
https://emacs.stackexchange.com/questions/41922/
#+NAME: get_property
#+BEGIN_SRC emacs-lisp :var prop_name="" :results silent
(org-with-point-at org-babel-current-src-block-location
(org-entry-get nil prop_name t))
#+END_SRC
** Example Usage
*** Header arg
#+HEADER: :var prop_message=(org-entry-get nil "hellomessage" t)
#+BEGIN_SRC emacs-lisp
(message prop_message)
#+END_SRC
#+RESULTS:
: hello
*** Noweb
#+BEGIN_SRC emacs-lisp :noweb yes
(message "<<get_property("hellomessage")>>")
#+END_SRC
#+RESULTS:
: hello
#+BEGIN_SRC bash :noweb yes :results verbatim
echo "<<get_property("hellomessage")>>"
#+END_SRC
#+RESULTS:
: hello
If hope this helps someone if they need it.
-k.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-03-16 4:12 ` Ken Mankoff
@ 2023-03-16 10:22 ` Ihor Radchenko
2023-03-16 15:09 ` [PATCH v4] " Max Nikulin
0 siblings, 1 reply; 21+ messages in thread
From: Ihor Radchenko @ 2023-03-16 10:22 UTC (permalink / raw)
To: Ken Mankoff; +Cc: Max Nikulin, emacs-orgmode
Ken Mankoff <mankoff@gmail.com> writes:
> Just a follow-up note that I am unlikely to be able to complete this patch anytime soon. Re-alignment of priorities because my need for :var header support in Org Babel is mitigated by a different method of injecting variables into Org Babel sections: Use noweb.
Ok.
Canceled.
--
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] 21+ messages in thread
* [PATCH v4] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-03-16 10:22 ` Ihor Radchenko
@ 2023-03-16 15:09 ` Max Nikulin
2023-03-17 11:41 ` Max Nikulin
` (2 more replies)
0 siblings, 3 replies; 21+ messages in thread
From: Max Nikulin @ 2023-03-16 15:09 UTC (permalink / raw)
To: Ken Mankoff; +Cc: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 382 bytes --]
On 16/03/2023 17:22, Ihor Radchenko wrote:
> Canceled.
Anyway it does not work.
I have tried to "fix" `org-babel-variable-assignments:screen' by an
extra patch. Perhaps executable name aka :cmd and babel language should
not be rigidly coupled and it may be subject for further improvement.
Ken, you wrote that you have other patches for ob-screen.el. Do you plan
to sent them?
[-- Attachment #2: v4-0001-ob-screen.el-Support-var-for-screen-source-blocks.patch --]
[-- Type: text/x-patch, Size: 2190 bytes --]
From a654876c33a13dafac865fa9ea88176302d810c2 Mon Sep 17 00:00:00 2001
From: "Kenneth D. Mankoff" <mankoff@gmail.com>
Date: Mon, 20 Feb 2023 21:40:39 -0800
Subject: [PATCH v4 1/2] ob-screen.el: Support var for screen source blocks
* lisp/ob-screen.el (org-babel-execute:screen): Parse header params
for `:var', then inject into screen session.
* etc/ORG-NEWS: Document as New Feature
---
etc/ORG-NEWS | 10 ++++++++++
lisp/ob-screen.el | 8 ++++++++
2 files changed, 18 insertions(+)
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 4ca13af17..3f70dc99a 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -131,6 +131,16 @@ selection.
TODO state, priority, tags, statistics cookies, and COMMENT keywords
are allowed in the tree structure.
+*** ob-screen now supports :var header arguments
+
+The ~:var~ header arg is now supported.
+
+#+BEGIN_SRC org
+,#+BEGIN_SRC screen :var x=42
+,echo $x
+,#+END_SRC
+#+END_SRC
+
** Miscellaneous
*** Remove undocumented ~:target~ header parameter in ~ob-clojure~
diff --git a/lisp/ob-screen.el b/lisp/ob-screen.el
index 269538e79..6e6a31ea6 100644
--- a/lisp/ob-screen.el
+++ b/lisp/ob-screen.el
@@ -40,6 +40,10 @@ (org-assert-version)
(require 'ob)
+;; Reuse the variable assignment code from ob-shell
+(defalias 'org-babel-variable-assignments:screen
+ 'org-babel-variable-assignments:shell)
+
(defvar org-babel-screen-location "screen"
"The command location for screen.
In case you want to use a different screen than one selected by your $PATH")
@@ -55,8 +59,12 @@ (defun org-babel-execute:screen (body params)
(message "Sending source code block to interactive terminal session...")
(save-window-excursion
(let* ((session (cdr (assq :session params)))
+ (var-lines (org-babel-variable-assignments:screen params))
(socket (org-babel-screen-session-socketname session)))
(unless socket (org-babel-prep-session:screen session params))
+ (mapcar (lambda (var)
+ (org-babel-screen-session-execute-string session var))
+ var-lines)
(org-babel-screen-session-execute-string
session (org-babel-expand-body:generic body params)))))
--
2.25.1
[-- Attachment #3: v4-0002-ob-screen.el-Do-not-rely-on-org-babel-variable-as.patch --]
[-- Type: text/x-patch, Size: 2128 bytes --]
From 1781c8986346a7ea894269f827cce80bfd5cfa70 Mon Sep 17 00:00:00 2001
From: Max Nikulin <manikulin@gmail.com>
Date: Thu, 16 Mar 2023 21:50:24 +0700
Subject: [PATCH v4 2/2] ob-screen.el: Do not rely on
`org-babel-variable-assignments:shell'
* lisp/ob-screen.el (org-babel-variable-assignments:screen): Use `defun'
instead of `defalias' to call variable assignment function specific
to language obtained from the `:cmd' header argument.
`org-babel-variable-assignments:shell' might be considered as
implementation detail, see
Ihor Radchenko to emacs-orgmode. Re: [PATCH] lisp/ob-screen.el: Support
~:var~ header args for babel blocks. Sun, 26 Feb 2023 12:18:14 +0000.
<https://list.orgmode.org/87lekkzkl5.fsf@localhost>
The implemented approach is not optimal since it does not allow
to decouple interpreter executable (for example python3) and babel
language (for example python).
---
lisp/ob-screen.el | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/lisp/ob-screen.el b/lisp/ob-screen.el
index 6e6a31ea6..5d09fe585 100644
--- a/lisp/ob-screen.el
+++ b/lisp/ob-screen.el
@@ -39,10 +39,23 @@ (require 'org-macs)
(org-assert-version)
(require 'ob)
-
-;; Reuse the variable assignment code from ob-shell
-(defalias 'org-babel-variable-assignments:screen
- 'org-babel-variable-assignments:shell)
+(require 'ob-shell)
+
+(defun org-babel-variable-assignments:screen (params)
+ "Return list of statements to assign block variables.
+
+This is an experimental feature, `:cmd' property from PARAMS
+treated as language while actually it is command (executable) name.
+It works at least for shell interpreters."
+ (and
+ (alist-get :var params)
+ (let* ((cmd (alist-get :cmd params))
+ (lang (and cmd (file-name-base cmd)))
+ (func (and lang (intern
+ (concat "org-babel-variable-assignments:" lang)))))
+ (if (not (fboundp func))
+ (error "Babel language support for %s is not loaded" lang)
+ (funcall func params)))))
(defvar org-babel-screen-location "screen"
"The command location for screen.
--
2.25.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH v4] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-03-16 15:09 ` [PATCH v4] " Max Nikulin
@ 2023-03-17 11:41 ` Max Nikulin
2023-03-18 12:08 ` Ihor Radchenko
2023-03-19 14:42 ` Ken Mankoff
2 siblings, 0 replies; 21+ messages in thread
From: Max Nikulin @ 2023-03-17 11:41 UTC (permalink / raw)
To: emacs-orgmode
On 16/03/2023 22:09, Max Nikulin wrote:
> +(defun org-babel-variable-assignments:screen (params)
...> (defvar org-babel-screen-location "screen"
Perhaps `defun' should be moved below `defvar's.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v4] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-03-16 15:09 ` [PATCH v4] " Max Nikulin
2023-03-17 11:41 ` Max Nikulin
@ 2023-03-18 12:08 ` Ihor Radchenko
2023-03-19 14:42 ` Ken Mankoff
2 siblings, 0 replies; 21+ messages in thread
From: Ihor Radchenko @ 2023-03-18 12:08 UTC (permalink / raw)
To: Max Nikulin; +Cc: Ken Mankoff, emacs-orgmode
Max Nikulin <manikulin@gmail.com> writes:
> Ken, you wrote that you have other patches for ob-screen.el. Do you plan
> to sent them?
For context, Ken is the maintainer of ob-screen.
It is up to him is this feature is useful for ob-screen, with your
additions.
--
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] 21+ messages in thread
* Re: [PATCH v4] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-03-16 15:09 ` [PATCH v4] " Max Nikulin
2023-03-17 11:41 ` Max Nikulin
2023-03-18 12:08 ` Ihor Radchenko
@ 2023-03-19 14:42 ` Ken Mankoff
2023-03-21 14:12 ` Max Nikulin
2 siblings, 1 reply; 21+ messages in thread
From: Ken Mankoff @ 2023-03-19 14:42 UTC (permalink / raw)
To: Max Nikulin; +Cc: emacs-orgmode
[-- Attachment #1: Type: text/plain, Size: 236 bytes --]
Hi Max,
On 2023-03-16 at 11:09 -04, Max Nikulin <manikulin@gmail.com> wrote...
> Ken, you wrote that you have other patches for ob-screen.el. Do you
> plan to sent them?
Here is the other patch. Respect custom screen command.
-k.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0002-ob-screen.el-respect-custom-screen-location.patch --]
[-- Type: text/x-diff, Size: 877 bytes --]
From ff919de09e020fa053f5727f3b36026a3a773f88 Mon Sep 17 00:00:00 2001
From: "Kenneth D. Mankoff" <mankoff@gmail.com>
Date: Sun, 26 Feb 2023 17:38:54 -0800
Subject: [PATCH 2/2] ob-screen.el: respect custom screen location
---
lisp/ob-screen.el | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lisp/ob-screen.el b/lisp/ob-screen.el
index 6356d84dd..2013cf12d 100644
--- a/lisp/ob-screen.el
+++ b/lisp/ob-screen.el
@@ -98,7 +98,7 @@ In case you want to use a different screen than one selected by your $PATH")
(defun org-babel-screen-session-socketname (session)
"Check if SESSION exists by parsing output of \"screen -ls\"."
- (let* ((screen-ls (shell-command-to-string "screen -ls"))
+ (let* ((screen-ls (shell-command-to-string (concat org-babel-screen-location " -ls")))
(sockets (delq
nil
(mapcar
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH v4] lisp/ob-screen.el: Support ~:var~ header args for babel blocks
2023-03-19 14:42 ` Ken Mankoff
@ 2023-03-21 14:12 ` Max Nikulin
0 siblings, 0 replies; 21+ messages in thread
From: Max Nikulin @ 2023-03-21 14:12 UTC (permalink / raw)
To: Ken Mankoff; +Cc: emacs-orgmode
On 19/03/2023 21:42, Ken Mankoff wrote:
> Here is the other patch. Respect custom screen command.
Thanks, Ken.
> +++ b/lisp/ob-screen.el
> @@ -98,7 +98,7 @@ In case you want to use a different screen than one selected by your $PATH")
>
> (defun org-babel-screen-session-socketname (session)
> "Check if SESSION exists by parsing output of \"screen -ls\"."
> - (let* ((screen-ls (shell-command-to-string "screen -ls"))
> + (let* ((screen-ls (shell-command-to-string (concat org-babel-screen-location " -ls")))
Currently `org-babel-screen-location' is used as an argument of
`start-process', so if the value contains spaces or other shell special
characters they are not interpreted by shell. Since there is no
convenience function like process-to-string that accepts command as list
instead of string with a shell command, it is better to pass screen
location through `shell-quote-argument'.
You may try to create a directory with a space in its name, create a
symlink from this directory to /usr/bin/srceen, and set
`org-babel-screen-location' to the full path (with space).
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2023-03-21 14:13 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-24 17:03 [PATCH] lisp/ob-screen.el: Support ~:var~ header args for babel blocks Ken Mankoff
2023-02-24 18:33 ` Ken Mankoff
2023-02-25 3:51 ` Max Nikulin
2023-02-25 15:14 ` Ken Mankoff
2023-02-25 15:19 ` Ken Mankoff
2023-02-25 16:05 ` Max Nikulin
2023-02-25 16:47 ` Ken Mankoff
2023-02-26 10:11 ` Max Nikulin
2023-02-27 1:59 ` Ken Mankoff
2023-02-28 10:40 ` Ihor Radchenko
2023-03-16 4:12 ` Ken Mankoff
2023-03-16 10:22 ` Ihor Radchenko
2023-03-16 15:09 ` [PATCH v4] " Max Nikulin
2023-03-17 11:41 ` Max Nikulin
2023-03-18 12:08 ` Ihor Radchenko
2023-03-19 14:42 ` Ken Mankoff
2023-03-21 14:12 ` Max Nikulin
2023-03-02 13:38 ` [PATCH] " Max Nikulin
2023-02-26 12:18 ` Ihor Radchenko
2023-02-27 1:59 ` Ken Mankoff
2023-02-27 19:43 ` Ihor Radchenko
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.