emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [BUG] link abbreviations do not work inside property drawers [9.5.2 (release_9.5.2-38-g682ccd @ /home/ignacio/repos/emacs/lisp/org/)]
@ 2022-04-23  9:53 Ignacio Casso
  2022-04-24  7:40 ` Ihor Radchenko
  0 siblings, 1 reply; 10+ messages in thread
From: Ignacio Casso @ 2022-04-23  9:53 UTC (permalink / raw)
  To: emacs-orgmode

Hello,

Link abbreviations do not work inside property drawers and are instead
confused with internal links. The following org file illustrates this
behavior.

#+LINK: org-manual https://orgmode.org/manual/

* Heading
  :PROPERTIES:
  :myprop:  [[org-manual:Hyperlinks.html]]
  :END:
  - Opening this link will move point to heading below

* org-manual:Hyperlinks.html

* Another Heading
  :PROPERTIES:
  :myprop:  [[org-manual:Link-Abbreviations.html]]
  :END:
  - Opening this link will result in the following prompt:
    - No match: create this as a new heading? (yes or no)

* Yet Another Heading
  [[org-manual:Link-Abbreviations.html]]
  - Opening this link will browse
  https://orgmode.org/manual/Link-Abbreviations.html, as it should


I know that there is discussion of whether timestamps and links should
work or not inside property drawers, but since they currently work, I
think link abbreviations should be supported too. Let me know if you
agree and I'll debug the issue and send a patch with a fix proposal.

Regards,

Ignacio


Emacs  : GNU Emacs 29.0.50 (build 44, x86_64-pc-linux-gnu, GTK+ Version 3.24.20, cairo version 1.16.0)
 of 2022-04-23
Package: Org mode version 9.5.2 (release_9.5.2-38-g682ccd @ /home/ignacio/repos/emacs/lisp/org/)


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

* Re: [BUG] link abbreviations do not work inside property drawers [9.5.2 (release_9.5.2-38-g682ccd @ /home/ignacio/repos/emacs/lisp/org/)]
  2022-04-23  9:53 [BUG] link abbreviations do not work inside property drawers [9.5.2 (release_9.5.2-38-g682ccd @ /home/ignacio/repos/emacs/lisp/org/)] Ignacio Casso
@ 2022-04-24  7:40 ` Ihor Radchenko
  2022-04-24  9:45   ` Ignacio Casso
  0 siblings, 1 reply; 10+ messages in thread
From: Ihor Radchenko @ 2022-04-24  7:40 UTC (permalink / raw)
  To: Ignacio Casso; +Cc: emacs-orgmode

Ignacio Casso <ignaciocasso@hotmail.com> writes:

> Link abbreviations do not work inside property drawers and are instead
> confused with internal links. The following org file illustrates this
> behavior.

This is to be expected. org-open-at-point does the following:

       ;; No valid link at point.  For convenience, look if something
       ;; looks like a link under point in some specific places.
       ((memq type '(comment comment-block node-property keyword))
	(call-interactively #'org-open-at-point-global))

That is, links are only partially recognised inside comments, node
properties, and keywords.

> I know that there is discussion of whether timestamps and links should
> work or not inside property drawers, but since they currently work, I
> think link abbreviations should be supported too. Let me know if you
> agree and I'll debug the issue and send a patch with a fix proposal.

I do not think that it is an easy problem to solve properly.

In the discussion you referenced [1] Nicolas raised the problem that we
cannot modify org-element parser to support links in more contexts as it
may create various issues (e.g. in exporter).

Without modifying the parser, supporting abbreviations will require code
duplication or referring to internal org-element functions - a fragile
approach.

I am currently tinkering with an idea to implement several parser
contexts, similar to optional argument in org-at-timestamp-p.
Basically, org-element parser could allow using multiple
named org-element-object-restrictions: 'agenda, 'export, 'lax, etc.
This is not ideal, as Org syntax will be more complex. However, multiple
interpretations of Org syntax are already implemented de facto (e.g.
org-at-timestamp-p). So, centralising the parsing into org-element could
be beneficial.

Probably, the contexts might be defined by let-bound
org-element-parser-context value.

Best,
Ihor

[1] https://orgmode.org/list/877d8llha9.fsf@nicolasgoaziou.fr 


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

* Re: [BUG] link abbreviations do not work inside property drawers [9.5.2 (release_9.5.2-38-g682ccd @ /home/ignacio/repos/emacs/lisp/org/)]
  2022-04-24  7:40 ` Ihor Radchenko
@ 2022-04-24  9:45   ` Ignacio Casso
  2022-04-26  8:49     ` Ihor Radchenko
  0 siblings, 1 reply; 10+ messages in thread
From: Ignacio Casso @ 2022-04-24  9:45 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode


Ihor Radchenko <yantar92@gmail.com> writes:

> Ignacio Casso <ignaciocasso@hotmail.com> writes:
>
>> Link abbreviations do not work inside property drawers and are instead
>> confused with internal links. The following org file illustrates this
>> behavior.
>
> This is to be expected. org-open-at-point does the following:
>
>        ;; No valid link at point.  For convenience, look if something
>        ;; looks like a link under point in some specific places.
>        ((memq type '(comment comment-block node-property keyword))
> 	(call-interactively #'org-open-at-point-global))
>
> That is, links are only partially recognised inside comments, node
> properties, and keywords.
>
>> I know that there is discussion of whether timestamps and links should
>> work or not inside property drawers, but since they currently work, I
>> think link abbreviations should be supported too. Let me know if you
>> agree and I'll debug the issue and send a patch with a fix proposal.
>
> I do not think that it is an easy problem to solve properly.
>
> In the discussion you referenced [1] Nicolas raised the problem that we
> cannot modify org-element parser to support links in more contexts as it
> may create various issues (e.g. in exporter).
>
> Without modifying the parser, supporting abbreviations will require code
> duplication or referring to internal org-element functions - a fragile
> approach.
>
> I am currently tinkering with an idea to implement several parser
> contexts, similar to optional argument in org-at-timestamp-p.
> Basically, org-element parser could allow using multiple
> named org-element-object-restrictions: 'agenda, 'export, 'lax, etc.
> This is not ideal, as Org syntax will be more complex. However, multiple
> interpretations of Org syntax are already implemented de facto (e.g.
> org-at-timestamp-p). So, centralising the parsing into org-element could
> be beneficial.
>
> Probably, the contexts might be defined by let-bound
> org-element-parser-context value.
>
> Best,
> Ihor
>
> [1] https://orgmode.org/list/877d8llha9.fsf@nicolasgoaziou.fr 

Actually, I have investigated a little bit and I think the issue is more simple
than that:

- Link abbreviations rely in the variables `org-link-abbrev-alist' for
  global abbreviations and `org-link-abbrev-alist-local' for
  abbreviations defined with #+LINK for a single org file.

- `org-open-at-point-global' opens links with
  `org-link-open-from-string' as opposed to `org-open-at-point', which
  uses `org-link-open'.

- `org-link-open-from-string' ends up using `org-link-open' too, but
  inside a `with-temp-buffer' form:

    (defun org-link-open-from-string (s &optional arg)
      ...
      (pcase (with-temp-buffer
    	   (let ((org-inhibit-startup nil))
    	     (insert s)
    	     (org-mode)
    	     (goto-char (point-min))
    	     (org-element-link-parser)))
        (`nil (user-error "No valid link in %S" s))
        (link (org-link-open link arg))))

- But in a temporal buffer, `org-link-abbrev-alist-local' is nil, and
  thus all abbreviations defined with #+LINK are lost.


So a simple solution to this would be preserving the value of
`org-link-abbrev-alist-local' when switching to the temporal buffer. I
think this is orthogonal to the issue of the parser, and it's a bug on
its own, since as a user I would expect that evaluating
`org-link-open-from-string' would use my current buffer's local values
of variables.

What do you think? If you agree, I can send a patch fixing it in two
lines with something like this:

  (let ((org-link-abbrev-alist
         (append org-link-abbrev-alist org-link-abbrev-alist-local)))
    (pcase (with-temp-buffer ...) ...))

or this:

  (let ((tmp-var (org-link-abbrev-alist-local)))
    (pcase (with-temp-buffer
             (setq org-link-abbrev-alist-local tmp-var)
             ...) ...))

P.S. There is another variable defined with `defvar-local' in ol.el:
`org-target-link-regexp'. I don't know what it is used for but it could
potentially suffer from the same problem.


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

* Re: [BUG] link abbreviations do not work inside property drawers [9.5.2 (release_9.5.2-38-g682ccd @ /home/ignacio/repos/emacs/lisp/org/)]
  2022-04-24  9:45   ` Ignacio Casso
@ 2022-04-26  8:49     ` Ihor Radchenko
  2022-04-26  9:07       ` Ignacio Casso
  0 siblings, 1 reply; 10+ messages in thread
From: Ihor Radchenko @ 2022-04-26  8:49 UTC (permalink / raw)
  To: Ignacio Casso; +Cc: emacs-orgmode

Ignacio Casso <ignaciocasso@hotmail.com> writes:

> Actually, I have investigated a little bit and I think the issue is more simple
> than that:
>
> - Link abbreviations rely in the variables `org-link-abbrev-alist' for
>   global abbreviations and `org-link-abbrev-alist-local' for
>   abbreviations defined with #+LINK for a single org file.
>
> - `org-open-at-point-global' opens links with
>   `org-link-open-from-string' as opposed to `org-open-at-point', which
>   uses `org-link-open'.
>
> - `org-link-open-from-string' ends up using `org-link-open' too, but
>   inside a `with-temp-buffer' form:
> ...
> So a simple solution to this would be preserving the value of
> `org-link-abbrev-alist-local' when switching to the temporal buffer. I
> think this is orthogonal to the issue of the parser, and it's a bug on
> its own, since as a user I would expect that evaluating
> `org-link-open-from-string' would use my current buffer's local values
> of variables.

I am not sure if using current buffer in `org-link-open-from-string' is
to be expected. This function is not tied to buffer, just to string.
Imagine a situation when user function retrieves the link string from
another buffer and then calls `org-link-org-from-string' in the context
of current buffer. What you are proposing is going to change the current
behaviour of `org-link-open-from-string' beyond the discussed problem.

Instead of changing the default behaviour of
`org-link-open-from-string', I would introduce an optional parameter
holding the desired context. The parameter can be set to an Org buffer.
That buffer's context will be used.

> P.S. There is another variable defined with `defvar-local' in ol.el:
> `org-target-link-regexp'. I don't know what it is used for but it could
> potentially suffer from the same problem.

A clean solution would do something similar to
org-export--generate-copy-script.

Best,
Ihor



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

* Re: [BUG] link abbreviations do not work inside property drawers [9.5.2 (release_9.5.2-38-g682ccd @ /home/ignacio/repos/emacs/lisp/org/)]
  2022-04-26  8:49     ` Ihor Radchenko
@ 2022-04-26  9:07       ` Ignacio Casso
  2022-04-26 13:52         ` Ihor Radchenko
  0 siblings, 1 reply; 10+ messages in thread
From: Ignacio Casso @ 2022-04-26  9:07 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode


Ihor Radchenko <yantar92@gmail.com> writes:

> Ignacio Casso <ignaciocasso@hotmail.com> writes:
>
>> So a simple solution to this would be preserving the value of
>> `org-link-abbrev-alist-local' when switching to the temporal buffer. I
>> think this is orthogonal to the issue of the parser, and it's a bug on
>> its own, since as a user I would expect that evaluating
>> `org-link-open-from-string' would use my current buffer's local values
>> of variables.
>
> I am not sure if using current buffer in `org-link-open-from-string' is
> to be expected. This function is not tied to buffer, just to string.
> Imagine a situation when user function retrieves the link string from
> another buffer and then calls `org-link-org-from-string' in the context
> of current buffer. What you are proposing is going to change the current
> behaviour of `org-link-open-from-string' beyond the discussed problem.
>
> Instead of changing the default behaviour of
> `org-link-open-from-string', I would introduce an optional parameter
> holding the desired context. The parameter can be set to an Org buffer.
> That buffer's context will be used.

I agree that changing the current behavior of
`org-link-open-from-string' may be problematic, however I don't think
that it's worth to introduce the optional argument just for this "bug".
I would just use the let from I suggested:

  (let ((org-link-abbrev-alist
         (append org-link-abbrev-alist org-link-abbrev-alist-local)))
    ...)

but instead of doing it in the definition of
`org-link-open-from-string', do it in `org-open-at-point-global',
like this:

(cond ((org-in-regexp org-link-any-re)
       (let ((org-link-abbrev-alist
              (append org-link-abbrev-alist org-link-abbrev-alist-local)))
	 (org-link-open-from-string (match-string-no-properties 0))))
      ...)

or in `org-open-at-point', like this:

  (cond
   ...
   ((memq type '(comment comment-block node-property keyword))
    (let ((org-link-abbrev-alist
           (append org-link-abbrev-alist org-link-abbrev-alist-local)))
      (call-interactively #'org-open-at-point-global)))
   ...)

What do you think?

--Ignacio


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

* Re: [BUG] link abbreviations do not work inside property drawers [9.5.2 (release_9.5.2-38-g682ccd @ /home/ignacio/repos/emacs/lisp/org/)]
  2022-04-26  9:07       ` Ignacio Casso
@ 2022-04-26 13:52         ` Ihor Radchenko
  2022-04-26 14:46           ` Ignacio Casso
  0 siblings, 1 reply; 10+ messages in thread
From: Ihor Radchenko @ 2022-04-26 13:52 UTC (permalink / raw)
  To: Ignacio Casso; +Cc: emacs-orgmode

Ignacio Casso <ignaciocasso@hotmail.com> writes:

> I agree that changing the current behavior of
> `org-link-open-from-string' may be problematic, however I don't think
> that it's worth to introduce the optional argument just for this
> "bug".

Makes sense. I am going ahead of what is currently on main. 

> (cond ((org-in-regexp org-link-any-re)
>        (let ((org-link-abbrev-alist
>               (append org-link-abbrev-alist org-link-abbrev-alist-local)))
> 	 (org-link-open-from-string (match-string-no-properties 0))))
>       ...)
> ...
> What do you think?

I do not like this idea. There is also org-link-abbrev-alist-local and
potentially other variables to be introduced in future. We should not
rely too much on internal workings of ol.el.

A better approach could be using org-link-expand-abbrev. It is an API
function and should be forward-compatible.

Best,
Ihor


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

* Re: [BUG] link abbreviations do not work inside property drawers [9.5.2 (release_9.5.2-38-g682ccd @ /home/ignacio/repos/emacs/lisp/org/)]
  2022-04-26 13:52         ` Ihor Radchenko
@ 2022-04-26 14:46           ` Ignacio Casso
  2022-04-27  4:25             ` Ihor Radchenko
  0 siblings, 1 reply; 10+ messages in thread
From: Ignacio Casso @ 2022-04-26 14:46 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode


>> (cond ((org-in-regexp org-link-any-re)
>>        (let ((org-link-abbrev-alist
>>               (append org-link-abbrev-alist org-link-abbrev-alist-local)))
>> 	 (org-link-open-from-string (match-string-no-properties 0))))
>>       ...)
>> ...
>> What do you think?
>
> I do not like this idea. There is also org-link-abbrev-alist-local and
> potentially other variables to be introduced in future. We should not
> rely too much on internal workings of ol.el.
>
> A better approach could be using org-link-expand-abbrev. It is an API
> function and should be forward-compatible.

Do you mean something like this?

(defun org-open-at-point-global ()
    ...
    (cond ((org-in-regexp org-link-any-re)
	   (org-link-open-from-string
            (org-link-expand-abbrev (match-string-no-properties 0))))
          ...))

Right now that is not enough because `org-link-expand-abbrev' only works
for links without square brackets, like "abbrev:suffix", and
`org-link-any-re' matches links with square brackets, like
"[[abbrev:suffix]]". That could be easily worked around in
`org-open-at-point-global' but maybe it would be better to change
`org-link-expand-abbrev' to work with both forms.

Let me know if you want me to send a patch implementing any of those
options or any other that you see fit. Otherwise, I know enough now to
fix the issue in my own config, so we can leave at that.

Regards,

--Ignacio


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

* Re: [BUG] link abbreviations do not work inside property drawers [9.5.2 (release_9.5.2-38-g682ccd @ /home/ignacio/repos/emacs/lisp/org/)]
  2022-04-26 14:46           ` Ignacio Casso
@ 2022-04-27  4:25             ` Ihor Radchenko
  2022-04-27  6:46               ` Ignacio Casso
  0 siblings, 1 reply; 10+ messages in thread
From: Ihor Radchenko @ 2022-04-27  4:25 UTC (permalink / raw)
  To: Ignacio Casso; +Cc: emacs-orgmode

Ignacio Casso <ignaciocasso@hotmail.com> writes:

>> A better approach could be using org-link-expand-abbrev. It is an API
>> function and should be forward-compatible.
>
> Do you mean something like this?
>
> (defun org-open-at-point-global ()
>     ...
>     (cond ((org-in-regexp org-link-any-re)
> 	   (org-link-open-from-string
>             (org-link-expand-abbrev (match-string-no-properties 0))))
>           ...))
>
> Right now that is not enough because `org-link-expand-abbrev' only works
> for links without square brackets, like "abbrev:suffix", and
> `org-link-any-re' matches links with square brackets, like
> "[[abbrev:suffix]]". That could be easily worked around in
> `org-open-at-point-global' but maybe it would be better to change
> `org-link-expand-abbrev' to work with both forms.

Fair point. Then, the most future-proof way would be calling
org-element-link-parser. It should take care about abbrev expansion and
other edge cases. Then, you just need to use :raw-link property of the
parsed link element.

Best,
Ihor


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

* Re: [BUG] link abbreviations do not work inside property drawers [9.5.2 (release_9.5.2-38-g682ccd @ /home/ignacio/repos/emacs/lisp/org/)]
  2022-04-27  4:25             ` Ihor Radchenko
@ 2022-04-27  6:46               ` Ignacio Casso
  2022-04-27  9:18                 ` tony aldon
  0 siblings, 1 reply; 10+ messages in thread
From: Ignacio Casso @ 2022-04-27  6:46 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode


Ihor Radchenko <yantar92@gmail.com> writes:

> Ignacio Casso <ignaciocasso@hotmail.com> writes:
>
>>> A better approach could be using org-link-expand-abbrev. It is an API
>>> function and should be forward-compatible.
>>
>> Do you mean something like this?
>>
>> (defun org-open-at-point-global ()
>>     ...
>>     (cond ((org-in-regexp org-link-any-re)
>> 	   (org-link-open-from-string
>>             (org-link-expand-abbrev (match-string-no-properties 0))))
>>           ...))
>>
>> Right now that is not enough because `org-link-expand-abbrev' only works
>> for links without square brackets, like "abbrev:suffix", and
>> `org-link-any-re' matches links with square brackets, like
>> "[[abbrev:suffix]]". That could be easily worked around in
>> `org-open-at-point-global' but maybe it would be better to change
>> `org-link-expand-abbrev' to work with both forms.
>
> Fair point. Then, the most future-proof way would be calling
> org-element-link-parser. It should take care about abbrev expansion and
> other edge cases. Then, you just need to use :raw-link property of the
> parsed link element.
>
> Best,
> Ihor

And then we come full circle, since that is what is being done already
but in a temporal buffer (so without access to
`org-link-abbrev-alist-local'), and your original concerns in your first
reply apply: doing it inside `org-open-at-point' would duplicate a lot
of code.

So I guess the issue is not as orthogonal as I though with the one of
the parser and it would be complicated to fix it properly, as you said
in your first email. If no one else has reported this problem or replied
to this thread, I guess that probably the best thing to do is fixing
this in my own config and move on for now:

I'll copy here the advice that fixes it, in case anyone needs to add it
to their config too:

(defun my-advice (orig-fun &rest args)
  (let ((org-link-abbrev-alist
         (append org-link-abbrev-alist org-link-abbrev-alist-local)))
    (apply orig-fun args)))

(advice-add 'org-open-at-point-global :around 'my-advice)

Best regards, and thanks for taking a look at this,

--Ignacio


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

* Re: [BUG] link abbreviations do not work inside property drawers [9.5.2 (release_9.5.2-38-g682ccd @ /home/ignacio/repos/emacs/lisp/org/)]
  2022-04-27  6:46               ` Ignacio Casso
@ 2022-04-27  9:18                 ` tony aldon
  0 siblings, 0 replies; 10+ messages in thread
From: tony aldon @ 2022-04-27  9:18 UTC (permalink / raw)
  To: Ignacio Casso; +Cc: emacs-orgmode, Ihor Radchenko

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

I quietly followed the conversation.  Thank you for the advice.

On Wed, Apr 27, 2022 at 9:06 AM Ignacio Casso <ignaciocasso@hotmail.com>
wrote:

>
> Ihor Radchenko <yantar92@gmail.com> writes:
>
> > Ignacio Casso <ignaciocasso@hotmail.com> writes:
> >
> >>> A better approach could be using org-link-expand-abbrev. It is an API
> >>> function and should be forward-compatible.
> >>
> >> Do you mean something like this?
> >>
> >> (defun org-open-at-point-global ()
> >>     ...
> >>     (cond ((org-in-regexp org-link-any-re)
> >>         (org-link-open-from-string
> >>             (org-link-expand-abbrev (match-string-no-properties 0))))
> >>           ...))
> >>
> >> Right now that is not enough because `org-link-expand-abbrev' only works
> >> for links without square brackets, like "abbrev:suffix", and
> >> `org-link-any-re' matches links with square brackets, like
> >> "[[abbrev:suffix]]". That could be easily worked around in
> >> `org-open-at-point-global' but maybe it would be better to change
> >> `org-link-expand-abbrev' to work with both forms.
> >
> > Fair point. Then, the most future-proof way would be calling
> > org-element-link-parser. It should take care about abbrev expansion and
> > other edge cases. Then, you just need to use :raw-link property of the
> > parsed link element.
> >
> > Best,
> > Ihor
>
> And then we come full circle, since that is what is being done already
> but in a temporal buffer (so without access to
> `org-link-abbrev-alist-local'), and your original concerns in your first
> reply apply: doing it inside `org-open-at-point' would duplicate a lot
> of code.
>
> So I guess the issue is not as orthogonal as I though with the one of
> the parser and it would be complicated to fix it properly, as you said
> in your first email. If no one else has reported this problem or replied
> to this thread, I guess that probably the best thing to do is fixing
> this in my own config and move on for now:
>
> I'll copy here the advice that fixes it, in case anyone needs to add it
> to their config too:
>
> (defun my-advice (orig-fun &rest args)
>   (let ((org-link-abbrev-alist
>          (append org-link-abbrev-alist org-link-abbrev-alist-local)))
>     (apply orig-fun args)))
>
> (advice-add 'org-open-at-point-global :around 'my-advice)
>
> Best regards, and thanks for taking a look at this,
>
> --Ignacio
>
>

[-- Attachment #2: Type: text/html, Size: 3205 bytes --]

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

end of thread, other threads:[~2022-04-27  9:20 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-23  9:53 [BUG] link abbreviations do not work inside property drawers [9.5.2 (release_9.5.2-38-g682ccd @ /home/ignacio/repos/emacs/lisp/org/)] Ignacio Casso
2022-04-24  7:40 ` Ihor Radchenko
2022-04-24  9:45   ` Ignacio Casso
2022-04-26  8:49     ` Ihor Radchenko
2022-04-26  9:07       ` Ignacio Casso
2022-04-26 13:52         ` Ihor Radchenko
2022-04-26 14:46           ` Ignacio Casso
2022-04-27  4:25             ` Ihor Radchenko
2022-04-27  6:46               ` Ignacio Casso
2022-04-27  9:18                 ` tony aldon

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).