emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [PATCH] Add support for shortdoc link type
@ 2024-05-01  3:29 Bruno Cardoso
  2024-05-01 11:00 ` Ihor Radchenko
  0 siblings, 1 reply; 21+ messages in thread
From: Bruno Cardoso @ 2024-05-01  3:29 UTC (permalink / raw)
  To: emacs-orgmode

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


Hi all,

This patch adds support for "shortdoc:" links.

Best,

Bruno.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ol-support-for-shortdoc-link-type.patch --]
[-- Type: text/x-patch, Size: 1865 bytes --]

diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 8dbc3292d..cfe894448 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -1357,6 +1357,10 @@ place the entry in the ~Misc~ category if ~TEXINFO_DIR_CATEGORY~ is missing.
 =TEXINFO_DIR_TITLE= is renamed to =TEXINFO_DIR_NAME=.
 The old name is obsolete.
 
+*** =ol.el=: Support for ~shortdoc~ link type
+
+Add support for storing and inserting links to ~shortdoc~ groups.
+
 ** New functions and changes in function arguments
 *** New optional argument =UPDATE-HEADING= for ~org-bibtex-yank~
 
diff --git a/lisp/ol.el b/lisp/ol.el
index f6d656982..f0088ae5f 100644
--- a/lisp/ol.el
+++ b/lisp/ol.el
@@ -1598,6 +1598,29 @@ PATH is a symbol name, as a string."
                          :follow #'org-link--open-help
                          :store #'org-link--store-help)
 
+;;;; "shortdoc" link type
+
+(defun org-link--open-shortdoc (group _)
+  "Open a \"shortdoc\" type link.
+GROUP is a symbol name."
+  (if (assoc (intern group) shortdoc--groups)
+      (shortdoc group)
+    (user-error "Unknown shortdoc group: %s" group)))
+
+(defun org-link--store-shortdoc (&optional _interactive?)
+  (when (eq major-mode 'shortdoc-mode)
+    (let* ((buffer (buffer-name))
+           (group (when (string-match "*Shortdoc \\(.*\\)\\*" buffer)
+                    (match-string 1 buffer))))
+      (when (assoc (intern group) shortdoc--groups)
+        (org-link-store-props :type "shortdoc"
+                              :link (format "shortdoc:%s" group)
+                              :description nil)))))
+
+(org-link-set-parameters "shortdoc"
+                         :follow #'org-link--open-shortdoc
+                         :store #'org-link--store-shortdoc)
+
 ;;;; "http", "https", "mailto", "ftp", and "news" link types
 (dolist (scheme '("ftp" "http" "https" "mailto" "news"))
   (org-link-set-parameters scheme

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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-01  3:29 [PATCH] Add support for shortdoc link type Bruno Cardoso
@ 2024-05-01 11:00 ` Ihor Radchenko
  2024-05-01 16:52   ` Bruno Cardoso
  0 siblings, 1 reply; 21+ messages in thread
From: Ihor Radchenko @ 2024-05-01 11:00 UTC (permalink / raw)
  To: Bruno Cardoso; +Cc: emacs-orgmode

Bruno Cardoso <cardoso.bc@gmail.com> writes:

> This patch adds support for "shortdoc:" links.

Thanks!

> --- a/etc/ORG-NEWS
> +++ b/etc/ORG-NEWS

You also need to document the new built-in link type in the manual.

> +(defun org-link--open-shortdoc (group _)
> +  "Open a \"shortdoc\" type link.
> +GROUP is a symbol name."
> +  (if (assoc (intern group) shortdoc--groups)
> +      (shortdoc group)
> +    (user-error "Unknown shortdoc group: %s" group)))

`shortdoc' function was only introduced in Emacs 29.
In Emacs 28, there is only `shortdoc-display-group'.
Please use the latter function, when `shortdoc' is not available.

In Emacs 27, shortdoc library is not yet present. So, please avoid
defining shortdoc: link type in Emacs <28.

-- 
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] Add support for shortdoc link type
  2024-05-01 11:00 ` Ihor Radchenko
@ 2024-05-01 16:52   ` Bruno Cardoso
  2024-05-01 17:55     ` Ihor Radchenko
  0 siblings, 1 reply; 21+ messages in thread
From: Bruno Cardoso @ 2024-05-01 16:52 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode

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


Hi Ihor,

Thanks for your comments. See attached the updated patch.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ol-support-for-shortdoc-link-type.patch --]
[-- Type: text/x-patch, Size: 3052 bytes --]

diff --git a/doc/org-manual.org b/doc/org-manual.org
index d66d95a22..c9e307c94 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -3372,6 +3372,10 @@ Here is the full set of built-in link types:
 
   Execute a shell command upon activation.
 
+- =shortdoc= ::
+
+  Link to short documentation summary for a function group.
+
 
 For =file:= and =id:= links, you can additionally specify a line
 number, or a text search string, separated by =::=.  In Org files, you
@@ -3413,6 +3417,7 @@ options:
 | irc        | =irc:/irc.com/#emacs/bob=                                          |
 | help       | =help:org-store-link=                                              |
 | info       | =info:org#External links=                                          |
+| shortdoc   | =shortdoc:text-properties=                                         |
 | shell      | =shell:ls *.org=                                                   |
 | elisp      | =elisp:(find-file "Elisp.org")= (Elisp form to evaluate)           |
 |            | =elisp:org-agenda= (interactive Elisp command)                     |
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 8dbc3292d..cfe894448 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -1357,6 +1357,10 @@ place the entry in the ~Misc~ category if ~TEXINFO_DIR_CATEGORY~ is missing.
 =TEXINFO_DIR_TITLE= is renamed to =TEXINFO_DIR_NAME=.
 The old name is obsolete.
 
+*** =ol.el=: Support for ~shortdoc~ link type
+
+Add support for storing and inserting links to ~shortdoc~ groups.
+
 ** New functions and changes in function arguments
 *** New optional argument =UPDATE-HEADING= for ~org-bibtex-yank~
 
diff --git a/lisp/ol.el b/lisp/ol.el
index f6d656982..b7b988581 100644
--- a/lisp/ol.el
+++ b/lisp/ol.el
@@ -1598,6 +1598,30 @@ PATH is a symbol name, as a string."
                          :follow #'org-link--open-help
                          :store #'org-link--store-help)
 
+;;;; "shortdoc" link type
+
+(when (version< "27" emacs-version)
+  (defun org-link--open-shortdoc (group _)
+    "Open a \"shortdoc\" type link.
+GROUP is a symbol name."
+    (if (assoc (intern group) shortdoc--groups)
+        (shortdoc-display-group group)
+      (user-error "Unknown shortdoc group: %s" group)))
+
+  (defun org-link--store-shortdoc (&optional _interactive?)
+    (when (eq major-mode 'shortdoc-mode)
+      (let* ((buffer (buffer-name))
+             (group (when (string-match "*Shortdoc \\(.*\\)\\*" buffer)
+                      (match-string 1 buffer))))
+        (when (assoc (intern group) shortdoc--groups)
+          (org-link-store-props :type "shortdoc"
+                                :link (format "shortdoc:%s" group)
+                                :description nil)))))
+
+  (org-link-set-parameters "shortdoc"
+                           :follow #'org-link--open-shortdoc
+                           :store #'org-link--store-shortdoc))
+
 ;;;; "http", "https", "mailto", "ftp", and "news" link types
 (dolist (scheme '("ftp" "http" "https" "mailto" "news"))
   (org-link-set-parameters scheme

[-- Attachment #3: Type: text/plain, Size: 1086 bytes --]



On 2024-05-01, 11:00 +0000, Ihor Radchenko <yantar92@posteo.net> wrote:

> Bruno Cardoso <cardoso.bc@gmail.com> writes:
>
>> This patch adds support for "shortdoc:" links.
>
> Thanks!
>
>> --- a/etc/ORG-NEWS
>> +++ b/etc/ORG-NEWS
>
> You also need to document the new built-in link type in the manual.
>
>> +(defun org-link--open-shortdoc (group _)
>> +  "Open a \"shortdoc\" type link.
>> +GROUP is a symbol name."
>> +  (if (assoc (intern group) shortdoc--groups)
>> +      (shortdoc group)
>> +    (user-error "Unknown shortdoc group: %s" group)))
>
> `shortdoc' function was only introduced in Emacs 29.
> In Emacs 28, there is only `shortdoc-display-group'.
> Please use the latter function, when `shortdoc' is not available.
>
> In Emacs 27, shortdoc library is not yet present. So, please avoid
> defining shortdoc: link type in Emacs <28.
>
> -- 
> 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 related	[flat|nested] 21+ messages in thread

* Re: [PATCH] Add support for shortdoc link type
  2024-05-01 16:52   ` Bruno Cardoso
@ 2024-05-01 17:55     ` Ihor Radchenko
  2024-05-01 19:24       ` Bruno Cardoso
  0 siblings, 1 reply; 21+ messages in thread
From: Ihor Radchenko @ 2024-05-01 17:55 UTC (permalink / raw)
  To: Bruno Cardoso; +Cc: emacs-orgmode

Bruno Cardoso <cardoso.bc@gmail.com> writes:

> Thanks for your comments. See attached the updated patch.

Thanks for the update!

> +- =shortdoc= ::
> +
> +  Link to short documentation summary for a function group.

Might be useful to throw a link to Emacs manual here - [[info:emacs#Name Help]]

> +*** =ol.el=: Support for ~shortdoc~ link type
> +Add support for storing and inserting links to ~shortdoc~ groups.

=shortdoc= I think. It is not ~code~, but rather =verbatim=.

> +  (defun org-link--store-shortdoc (&optional _interactive?)
> +    (when (eq major-mode 'shortdoc-mode)
> +      (let* ((buffer (buffer-name))
> +             (group (when (string-match "*Shortdoc \\(.*\\)\\*" buffer)
> +                      (match-string 1 buffer))))
> +        (when (assoc (intern group) shortdoc--groups)

This will err when GROUP is nil (string-match does not match).

> +  (org-link-set-parameters "shortdoc"
> +                           :follow #'org-link--open-shortdoc
> +                           :store #'org-link--store-shortdoc))

Maybe also implement :complete parameter? It should be relatively easy.

-- 
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] Add support for shortdoc link type
  2024-05-01 17:55     ` Ihor Radchenko
@ 2024-05-01 19:24       ` Bruno Cardoso
  2024-05-02 10:41         ` Max Nikulin
  0 siblings, 1 reply; 21+ messages in thread
From: Bruno Cardoso @ 2024-05-01 19:24 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode

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


On 2024-05-01, 17:55 +0000, Ihor Radchenko <yantar92@posteo.net> wrote:

> Bruno Cardoso <cardoso.bc@gmail.com> writes:
>
>> Thanks for your comments. See attached the updated patch.
>
> Thanks for the update!
>
>> +- =shortdoc= ::
>> +
>> +  Link to short documentation summary for a function group.
>
> Might be useful to throw a link to Emacs manual here - [[info:emacs#Name Help]]
>
>> +*** =ol.el=: Support for ~shortdoc~ link type
>> +Add support for storing and inserting links to ~shortdoc~ groups.
>
> =shortdoc= I think. It is not ~code~, but rather =verbatim=.
>
>> +  (defun org-link--store-shortdoc (&optional _interactive?)
>> +    (when (eq major-mode 'shortdoc-mode)
>> +      (let* ((buffer (buffer-name))
>> +             (group (when (string-match "*Shortdoc \\(.*\\)\\*" buffer)
>> +                      (match-string 1 buffer))))
>> +        (when (assoc (intern group) shortdoc--groups)
>
> This will err when GROUP is nil (string-match does not match).
>
>> +  (org-link-set-parameters "shortdoc"
>> +                           :follow #'org-link--open-shortdoc
>> +                           :store #'org-link--store-shortdoc))
>
> Maybe also implement :complete parameter? It should be relatively easy.
>

Thanks Ihor, here is the updated patch.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ol-support-for-shortdoc-link-type.patch --]
[-- Type: text/x-patch, Size: 3564 bytes --]

diff --git a/doc/org-manual.org b/doc/org-manual.org
index d66d95a22..15b79ae21 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -3372,6 +3372,10 @@ Here is the full set of built-in link types:
 
   Execute a shell command upon activation.
 
+- =shortdoc= ::
+
+Link to short documentation summary for a function group.  For more information, see [[info:emacs#Name Help][Help by Command or Variable Name]].
+
 
 For =file:= and =id:= links, you can additionally specify a line
 number, or a text search string, separated by =::=.  In Org files, you
@@ -3413,6 +3417,7 @@ options:
 | irc        | =irc:/irc.com/#emacs/bob=                                          |
 | help       | =help:org-store-link=                                              |
 | info       | =info:org#External links=                                          |
+| shortdoc   | =shortdoc:text-properties=                                         |
 | shell      | =shell:ls *.org=                                                   |
 | elisp      | =elisp:(find-file "Elisp.org")= (Elisp form to evaluate)           |
 |            | =elisp:org-agenda= (interactive Elisp command)                     |
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 8dbc3292d..b0f4cb287 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -1357,6 +1357,10 @@ place the entry in the ~Misc~ category if ~TEXINFO_DIR_CATEGORY~ is missing.
 =TEXINFO_DIR_TITLE= is renamed to =TEXINFO_DIR_NAME=.
 The old name is obsolete.
 
+*** =ol.el=: Support for =shortdoc= link type
+
+Add support for storing and inserting links to =shortdoc= groups.
+
 ** New functions and changes in function arguments
 *** New optional argument =UPDATE-HEADING= for ~org-bibtex-yank~
 
diff --git a/lisp/ol.el b/lisp/ol.el
index f6d656982..dd95f5d4c 100644
--- a/lisp/ol.el
+++ b/lisp/ol.el
@@ -1597,6 +1597,37 @@ PATH is a symbol name, as a string."
 (org-link-set-parameters "help"
                          :follow #'org-link--open-help
                          :store #'org-link--store-help)
+;;;; "shortdoc" link type
+(when (version< "27" emacs-version)
+  (defun org-link--open-shortdoc (group _)
+    "Open a \"shortdoc\" type link.
+GROUP is a symbol name."
+    (if (assoc (intern group) shortdoc--groups)
+        (shortdoc-display-group group)
+      (user-error "Unknown shortdoc group: %s" group)))
+
+  (defun org-link--store-shortdoc (&optional _interactive?)
+    "Store \"shortdoc\" type link."
+    (when (eq major-mode 'shortdoc-mode)
+      (let* ((buffer (buffer-name))
+             (group (when (string-match "*Shortdoc \\(.*\\)\\*" buffer)
+                      (match-string 1 buffer))))
+        (if (and group (assoc (intern group) shortdoc--groups))
+            (org-link-store-props :type "shortdoc"
+                                  :link (format "shortdoc:%s" group)
+                                  :description nil)
+          (user-error "Unknown shortdoc group: %s" group)))))
+
+  (defun org-link--complete-shortdoc ()
+    "Create a \"shortdoc\" link using completion."
+    (concat "shortdoc:"
+            (completing-read "Shortdoc summary for functions in: "
+                             (mapcar #'car shortdoc--groups))))
+
+  (org-link-set-parameters "shortdoc"
+                           :follow #'org-link--open-shortdoc
+                           :store #'org-link--store-shortdoc
+                           :complete #'org-link--complete-shortdoc))
 
 ;;;; "http", "https", "mailto", "ftp", and "news" link types
 (dolist (scheme '("ftp" "http" "https" "mailto" "news"))

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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-01 19:24       ` Bruno Cardoso
@ 2024-05-02 10:41         ` Max Nikulin
  2024-05-03 21:41           ` Bruno Cardoso
  0 siblings, 1 reply; 21+ messages in thread
From: Max Nikulin @ 2024-05-02 10:41 UTC (permalink / raw)
  To: Bruno Cardoso; +Cc: emacs-orgmode

On 02/05/2024 02:24, Bruno Cardoso wrote:
> +++ b/lisp/ol.el
> @@ -1597,6 +1597,37 @@ PATH is a symbol name, as a string."
>   (org-link-set-parameters "help"
>                            :follow #'org-link--open-help
>                            :store #'org-link--store-help)
> +;;;; "shortdoc" link type
> +(when (version< "27" emacs-version)
> +  (defun org-link--open-shortdoc (group _)
> +    "Open a \"shortdoc\" type link.
> +GROUP is a symbol name."
> +    (if (assoc (intern group) shortdoc--groups)
> +        (shortdoc-display-group group)
> +      (user-error "Unknown shortdoc group: %s" group)))

`condition-case' may help to avoid the internal `shortdoc--groups' 
variable here. As to completion, it is better to ask for public API. 
However emacs developers likely will decline such request.

Consider the following just as ideas.

- Support of search options. Buttons in help pages move point to 
specific functions.

<shortdoc:file::#find-file>

- At first I considered adding shortdoc to help links that may call 
either `describe-function' or `describe-variable', but it is unlikely 
possible.


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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-02 10:41         ` Max Nikulin
@ 2024-05-03 21:41           ` Bruno Cardoso
  2024-05-04  7:38             ` Max Nikulin
  0 siblings, 1 reply; 21+ messages in thread
From: Bruno Cardoso @ 2024-05-03 21:41 UTC (permalink / raw)
  To: Max Nikulin; +Cc: emacs-orgmode


On 2024-05-02, 17:41 +0700, Max Nikulin <manikulin@gmail.com> wrote:

> `condition-case' may help to avoid the internal `shortdoc--groups' 
> variable here. As to completion, it is better to ask for public API. 
> However emacs developers likely will decline such request.
>
> Consider the following just as ideas.
>
> - Support of search options. Buttons in help pages move point to 
> specific functions.
>
> <shortdoc:file::#find-file>
>
> - At first I considered adding shortdoc to help links that may call 
> either `describe-function' or `describe-variable', but it is unlikely 
> possible.

Hi Max,

Thanks for your suggestions. Indeed `condition-case' might be better there.

I implemented the search option by borrowing the regexp from `ol-info':

(defun org-link--open-shortdoc (path _)
  "Open a \"shortdoc\" type link.
PATH is a group name or \"group::#function\"."
  (string-match "\\`\\([^#:]*\\)\\(?:[#:]:?\\(.*\\)\\)?\\'" path)
  (let ((group (match-string 1 path))
        (fn (match-string 2 path)))
    (condition-case nil
        (progn
          (shortdoc-display-group group)
          (when fn
            (re-search-forward (concat "^(" (string-remove-prefix "#" fn))
                               nil t)
            (beginning-of-line)))
      (error (message "Unknown shortdoc group: %s" group)))))

It works, but I'm not quite sure if this is the best approach.

It curently matches all the cases below, as I got confused about the correct link syntax:

shortdoc:text-properties:get-pos-property
shortdoc:text-properties::get-pos-property
shortdoc:text-properties#get-pos-property
shortdoc:text-properties:#get-pos-property
shortdoc:text-properties::#get-pos-property


Best,

Bruno.


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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-03 21:41           ` Bruno Cardoso
@ 2024-05-04  7:38             ` Max Nikulin
  2024-05-04 17:33               ` Bruno Cardoso
  0 siblings, 1 reply; 21+ messages in thread
From: Max Nikulin @ 2024-05-04  7:38 UTC (permalink / raw)
  To: Bruno Cardoso; +Cc: emacs-orgmode

On 04/05/2024 04:41, Bruno Cardoso wrote:
> On 2024-05-02, 17:41 +0700, Max Nikulin wrote:
>>
>> <shortdoc:file::#find-file>
[...]
> I implemented the search option by borrowing the regexp from `ol-info':

It is necessary to maintain backward compatibility for `ol-info'. I do 
not know what kind of separator was added earlier: "::" or "#". I 
suppose, for new link type, rules more close to file: links may be used, see
(info "(org) Search Options")
https://orgmode.org/manual/Search-Options.html

That is why I suggested shortdoc:GROUP::#FUNCTION. This way 
shrotdoc:GROUP::SEARCH_STRING is possible as well.

>            (shortdoc-display-group group)
>            (when fn
>              (re-search-forward (concat "^(" (string-remove-prefix "#" fn))
>                                 nil t)

Notice that `shortdoc-display-group' has optional FUNCTION argument.

>              (beginning-of-line)))
>        (error (message "Unknown shortdoc group: %s" group)))))
> 
> It works, but I'm not quite sure if this is the best approach.

I do not have strong opinion as well. Some points to consider:
- Unambiguous parsing of link target.
- Flexibility it respect to later improvements.



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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-04  7:38             ` Max Nikulin
@ 2024-05-04 17:33               ` Bruno Cardoso
  2024-05-05 11:01                 ` Max Nikulin
  0 siblings, 1 reply; 21+ messages in thread
From: Bruno Cardoso @ 2024-05-04 17:33 UTC (permalink / raw)
  To: Max Nikulin; +Cc: emacs-orgmode

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


On 2024-05-04, 14:38 +0700, Max Nikulin <manikulin@gmail.com> wrote:

> It is necessary to maintain backward compatibility for `ol-info'. I do 
> not know what kind of separator was added earlier: "::" or "#". I 
> suppose, for new link type, rules more close to file: links may be used, see
> (info "(org) Search Options")
> https://orgmode.org/manual/Search-Options.html
>
> That is why I suggested shortdoc:GROUP::#FUNCTION. This way 
> shrotdoc:GROUP::SEARCH_STRING is possible as well.

I see, thanks for pointing it out. I modified the regexp to match this pattern.

> Notice that `shortdoc-display-group' has optional FUNCTION argument.

Yes, I completely missed that. I updated the patch to use the optional function argument instead.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ol-support-for-shortdoc-link-type.patch --]
[-- Type: text/x-patch, Size: 3829 bytes --]

diff --git a/doc/org-manual.org b/doc/org-manual.org
index d66d95a22..61ee0c63d 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -3372,6 +3372,10 @@ Here is the full set of built-in link types:
 
   Execute a shell command upon activation.
 
+- =shortdoc= ::
+
+Link to short documentation summary for a function group.  For more information, see [[info:emacs#Name Help][Help by Command or Variable Name]].
+
 
 For =file:= and =id:= links, you can additionally specify a line
 number, or a text search string, separated by =::=.  In Org files, you
@@ -3413,6 +3417,8 @@ options:
 | irc        | =irc:/irc.com/#emacs/bob=                                          |
 | help       | =help:org-store-link=                                              |
 | info       | =info:org#External links=                                          |
+| shortdoc   | =shortdoc:text-properties=                                         |
+|            | =shortdoc:text-properties::#get-pos-property=                      |
 | shell      | =shell:ls *.org=                                                   |
 | elisp      | =elisp:(find-file "Elisp.org")= (Elisp form to evaluate)           |
 |            | =elisp:org-agenda= (interactive Elisp command)                     |
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 87ebed751..f90c59ed3 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -1369,6 +1369,10 @@ place the entry in the ~Misc~ category if ~TEXINFO_DIR_CATEGORY~ is missing.
 =TEXINFO_DIR_TITLE= is renamed to =TEXINFO_DIR_NAME=.
 The old name is obsolete.
 
+*** =ol.el=: Support for =shortdoc= link type
+
+Add support for storing and inserting links to =shortdoc= groups.
+
 ** New functions and changes in function arguments
 *** New optional argument =UPDATE-HEADING= for ~org-bibtex-yank~
 
diff --git a/lisp/ol.el b/lisp/ol.el
index bc9682e4a..19ec7a32a 100644
--- a/lisp/ol.el
+++ b/lisp/ol.el
@@ -1582,6 +1582,41 @@ PATH is a symbol name, as a string."
                          :follow #'org-link--open-help
                          :store #'org-link--store-help)
 
+;;;; "shortdoc" link type
+(when (version< "27" emacs-version)
+  (defun org-link--open-shortdoc (path _)
+    "Open a \"shortdoc\" type link.
+PATH is a group name or \"group::#function\"."
+    (string-match "\\`\\([^#:]*\\)\\(::#?\\(.*\\)\\)?\\'" path)
+    (let ((group (match-string 1 path))
+          (fn (match-string 3 path)))
+      (condition-case nil
+          (shortdoc-display-group group (intern-soft fn))
+        (error (message "Unknown shortdoc group: %s" group)))))
+
+  (defun org-link--store-shortdoc (&optional _interactive?)
+    "Store \"shortdoc\" type link."
+    (when (eq major-mode 'shortdoc-mode)
+      (let* ((buffer (buffer-name))
+             (group (when (string-match "*Shortdoc \\(.*\\)\\*" buffer)
+                      (match-string 1 buffer))))
+        (if (and group (assoc (intern-soft group) shortdoc--groups))
+            (org-link-store-props :type "shortdoc"
+                                  :link (format "shortdoc:%s" group)
+                                  :description nil)
+          (user-error "Unknown shortdoc group: %s" group)))))
+
+  (defun org-link--complete-shortdoc ()
+    "Create a \"shortdoc\" link using completion."
+    (concat "shortdoc:"
+            (completing-read "Shortdoc summary for functions in: "
+                             (mapcar #'car shortdoc--groups))))
+
+  (org-link-set-parameters "shortdoc"
+                           :follow #'org-link--open-shortdoc
+                           :store #'org-link--store-shortdoc
+                           :complete #'org-link--complete-shortdoc))
+
 ;;;; "http", "https", "mailto", "ftp", and "news" link types
 (dolist (scheme '("ftp" "http" "https" "mailto" "news"))
   (org-link-set-parameters scheme

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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-04 17:33               ` Bruno Cardoso
@ 2024-05-05 11:01                 ` Max Nikulin
  2024-05-05 21:35                   ` Bruno Cardoso
  0 siblings, 1 reply; 21+ messages in thread
From: Max Nikulin @ 2024-05-05 11:01 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: Bruno Cardoso

On 05/05/2024 00:33, Bruno Cardoso wrote:
> 
> I updated the patch to use the optional function argument instead.

Thanks

> +++ b/doc/org-manual.org
> @@ -3372,6 +3372,10 @@ Here is the full set of built-in link types:
>  
>    Execute a shell command upon activation.
>  
> +- =shortdoc= ::
> +
> +Link to short documentation summary for a function group.  For more information, see [[info:emacs#Name Help][Help by Command or Variable Name]].

I would consider explicit mention that it is related to Emacs Lisp and 
perhaps that the origin of its name is the ~shortdoc-display-group~ user 
command. <info:elisp#Documentation Groups> might be a better link.

This line is rather long though I do not have a link where formatting 
conventions are documented.

> +++ b/etc/ORG-NEWS
> @@ -1369,6 +1369,10 @@ place the entry in the ~Misc~ category if ~TEXINFO_DIR_CATEGORY~ is missing.
>  =TEXINFO_DIR_TITLE= is renamed to =TEXINFO_DIR_NAME=.
>  The old name is obsolete.
>  
> +*** =ol.el=: Support for =shortdoc= link type
> +
> +Add support for storing and inserting links to =shortdoc= groups.

Again I am unsure that it is clear to all readers.

> +++ b/lisp/ol.el
> @@ -1582,6 +1582,41 @@ PATH is a symbol name, as a string."
>                           :follow #'org-link--open-help
>                           :store #'org-link--store-help)
>  
> +;;;; "shortdoc" link type
> +(when (version< "27" emacs-version)

Is it correct?

2a7488d42d8 2020-10-11 05:51:16 +0200 Lars Ingebrigtsen: Add support for 
displaying short documentation for function groups

git tag --contains 2a7488d42d8
emacs-28.0.90

> +  (defun org-link--open-shortdoc (path _)
> +    "Open a \"shortdoc\" type link.
> +PATH is a group name or \"group::#function\"."
> +    (string-match "\\`\\([^#:]*\\)\\(::#?\\(.*\\)\\)?\\'" path)

I think, it is enough to use [^:] since next group is started from "::". 
You may use use non-capturing group \\(?:::# ...\\) (requires update of 
next index below) unless you are going add search code back. I am unsure 
concerning your intentions. You dropped search code, but "#" after "::" 
is still optional.

> +    (let ((group (match-string 1 path))
> +          (fn (match-string 3 path)))
> +      (condition-case nil
> +          (shortdoc-display-group group (intern-soft fn))
> +        (error (message "Unknown shortdoc group: %s" group)))))

I do not have strong opinion what is better here: `user-error' (used in 
earlier revisions) or `error'. However I do not see the point of 
capturing original error and signalling another one if it is not 
`user-error'.



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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-05 11:01                 ` Max Nikulin
@ 2024-05-05 21:35                   ` Bruno Cardoso
  2024-05-06 10:55                     ` Max Nikulin
  0 siblings, 1 reply; 21+ messages in thread
From: Bruno Cardoso @ 2024-05-05 21:35 UTC (permalink / raw)
  To: Max Nikulin, emacs-orgmode

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


On 2024-05-05, 18:01 +0700, Max Nikulin <manikulin@gmail.com> wrote:

> I would consider explicit mention that it is related to Emacs Lisp and 
> perhaps that the origin of its name is the ~shortdoc-display-group~ user 
> command. <info:elisp#Documentation Groups> might be a better link.
>
> This line is rather long though I do not have a link where formatting 
> conventions are documented.

I expanded the description on `org-manual.org' and 'ORG-NEWS'.

>> +;;;; "shortdoc" link type
>> +(when (version< "27" emacs-version)
>
> Is it correct?
>
> 2a7488d42d8 2020-10-11 05:51:16 +0200 Lars Ingebrigtsen: Add support for 
> displaying short documentation for function groups
>
> git tag --contains 2a7488d42d8
> emacs-28.0.90

Fixed.

> I think, it is enough to use [^:] since next group is started from "::". 
> You may use use non-capturing group \\(?:::# ...\\) (requires update of 
> next index below) unless you are going add search code back. I am unsure 
> concerning your intentions. You dropped search code, but "#" after "::" 
> is still optional.

Thanks. I updated the regexp.

I had dropped the search code because I wasn't considering the search option properly. If I understand correctly, both "::" and "::#" should match a function OR a search string? (e.g.: `shortdoc:text-properties::#pos-property' will also search for "pos-property" in the shortdoc buffer). This is the current behavior in the attached patch.

> I do not have strong opinion what is better here: `user-error' (used in 
> earlier revisions) or `error'. However I do not see the point of 
> capturing original error and signalling another one if it is not 
> `user-error'.

Agreed. I replaced it with `user-error'.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ol-support-for-shortdoc-link-type.patch --]
[-- Type: text/x-patch, Size: 4127 bytes --]

diff --git a/doc/org-manual.org b/doc/org-manual.org
index 1feb5ed60..dd4cb6cd0 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -3382,6 +3382,13 @@ Here is the full set of built-in link types:
 
   Execute a shell command upon activation.
 
+- =shortdoc= ::
+
+  Link to short documentation summary for an Emacs Lisp function group.
+  Since Emacs 28, user command ~shortdoc-display-group~ lists all known
+  documentation groups. For more information, see [[info:emacs#Name Help]]
+  and [[info:elisp#Documentation Groups]].
+
 
 For =file:= and =id:= links, you can additionally specify a line
 number, or a text search string, separated by =::=.  In Org files, you
@@ -3423,6 +3430,8 @@ options:
 | irc        | =irc:/irc.com/#emacs/bob=                                          |
 | help       | =help:org-store-link=                                              |
 | info       | =info:org#External links=                                          |
+| shortdoc   | =shortdoc:text-properties=                                         |
+|            | =shortdoc:text-properties::#get-pos-property=                      |
 | shell      | =shell:ls *.org=                                                   |
 | elisp      | =elisp:(find-file "Elisp.org")= (Elisp form to evaluate)           |
 |            | =elisp:org-agenda= (interactive Elisp command)                     |
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 99dd8839c..1623873c0 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -1405,6 +1405,11 @@ place the entry in the ~Misc~ category if ~TEXINFO_DIR_CATEGORY~ is missing.
 =TEXINFO_DIR_TITLE= is renamed to =TEXINFO_DIR_NAME=.
 The old name is obsolete.
 
+*** =ol.el=: Support for =shortdoc= link type
+
+Add support for storing and inserting links to =shortdoc= documentation
+groups for Emacs Lisp functions.
+
 ** New functions and changes in function arguments
 *** New optional argument =UPDATE-HEADING= for ~org-bibtex-yank~
 
diff --git a/lisp/ol.el b/lisp/ol.el
index bc9682e4a..ff0b56378 100644
--- a/lisp/ol.el
+++ b/lisp/ol.el
@@ -1582,6 +1582,44 @@ PATH is a symbol name, as a string."
                          :follow #'org-link--open-help
                          :store #'org-link--store-help)
 
+;;;; "shortdoc" link type
+(when (version<= "28.0.90" emacs-version)
+  (defun org-link--open-shortdoc (path _)
+    "Open a \"shortdoc\" type link.
+PATH is a group name, \"group::#function\" or \"group::search_string\"."
+    (string-match "\\`\\([^:]*\\)\\(?:::#?\\(.*\\)\\)?\\'" path)
+    (let ((group (match-string 1 path))
+          (fn (match-string 2 path)))
+      (condition-case nil
+          (progn
+              (shortdoc-display-group group (intern-soft fn))
+              (unless (intern-soft fn)
+                (re-search-forward fn nil t)))
+        (user-error "Unknown shortdoc group: %s" group))))
+
+  (defun org-link--store-shortdoc (&optional _interactive?)
+    "Store \"shortdoc\" type link."
+    (when (eq major-mode 'shortdoc-mode)
+      (let* ((buffer (buffer-name))
+             (group (when (string-match "*Shortdoc \\(.*\\)\\*" buffer)
+                      (match-string 1 buffer))))
+        (if (and group (assoc (intern-soft group) shortdoc--groups))
+            (org-link-store-props :type "shortdoc"
+                                  :link (format "shortdoc:%s" group)
+                                  :description nil)
+          (user-error "Unknown shortdoc group: %s" group)))))
+
+  (defun org-link--complete-shortdoc ()
+    "Create a \"shortdoc\" link using completion."
+    (concat "shortdoc:"
+            (completing-read "Shortdoc summary for functions in: "
+                             (mapcar #'car shortdoc--groups))))
+
+  (org-link-set-parameters "shortdoc"
+                           :follow #'org-link--open-shortdoc
+                           :store #'org-link--store-shortdoc
+                           :complete #'org-link--complete-shortdoc))
+
 ;;;; "http", "https", "mailto", "ftp", and "news" link types
 (dolist (scheme '("ftp" "http" "https" "mailto" "news"))
   (org-link-set-parameters scheme

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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-05 21:35                   ` Bruno Cardoso
@ 2024-05-06 10:55                     ` Max Nikulin
  2024-05-08  1:11                       ` Bruno Cardoso
  0 siblings, 1 reply; 21+ messages in thread
From: Max Nikulin @ 2024-05-06 10:55 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: Bruno Cardoso

On 06/05/2024 04:35, Bruno Cardoso wrote:
> Fixed.

I have tried the patch. It mostly works, so I do not insist on further 
polishing. However it should be resent with proper description.

> I had dropped the search code because I wasn't considering the search
> option properly. If I understand correctly, both "::" and "::#" should
> match a function OR a search string? (e.g.:
> `shortdoc:text-properties::#pos-property' will also search for
> "pos-property" in the shortdoc buffer). This is the current behavior in
> the attached patch.

It seems my comments have led mostly to confusion rather than 
improvements. I am sorry for that. I have in mind 2 kind of links:
- <shortdoc:string::#try-completion> that may be handled solely by 
`shortdoc-display-group' with second argument.
- <shortdoc::string::identical contents> that should cause
   (shortdoc-display-group group)
   (search-forward fn nil t) ; or (word-search-forward fn nil t)

For `re-search-forward' used in the latest patch revision, from my point 
of view, link should be <shortdoc::string::/identical contents/> 
(similar to file: links).

Support of search variant may be dropped, but that case I would not 
allow "::" as the separator. Mandatory "::#" allows to add text and 
regexp search later.

> +++ b/doc/org-manual.org
> @@ -3382,6 +3382,13 @@ Here is the full set of built-in link types:
>  
>    Execute a shell command upon activation.
>  
> +- =shortdoc= ::
> +
> +  Link to short documentation summary for an Emacs Lisp function group.
> +  Since Emacs 28, user command ~shortdoc-display-group~ lists all known
> +  documentation groups. For more information, see [[info:emacs#Name Help]]
> +  and [[info:elisp#Documentation Groups]].

I am unsure that links without description is a bright idea. Try
https://orgmode.org/manual/Activation.html
and M-: (info "(org) Activation") RET
to get an impression of export result.

> +++ b/lisp/ol.el
> @@ -1582,6 +1582,44 @@ PATH is a symbol name, as a string."
>                           :follow #'org-link--open-help
>                           :store #'org-link--store-help)
>  
> +;;;; "shortdoc" link type
> +(when (version<= "28.0.90" emacs-version)
> +  (defun org-link--open-shortdoc (path _)
> +    "Open a \"shortdoc\" type link.
> +PATH is a group name, \"group::#function\" or \"group::search_string\"."
> +    (string-match "\\`\\([^:]*\\)\\(?:::#?\\(.*\\)\\)?\\'" path)

I just have realized that it is better to ignore anything unexpected 
after ":", e.g. if only ::# is allowed (no search text option)

(string-match "\\`\\([^:]*\\)\\(?:::#\\(.*\\).*\\'\\)?" path)

Try [[shortdoc:string:invalid]].



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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-06 10:55                     ` Max Nikulin
@ 2024-05-08  1:11                       ` Bruno Cardoso
  2024-05-08 11:20                         ` Max Nikulin
  0 siblings, 1 reply; 21+ messages in thread
From: Bruno Cardoso @ 2024-05-08  1:11 UTC (permalink / raw)
  To: Max Nikulin, emacs-orgmode

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


On 2024-05-06, 17:55 +0700, Max Nikulin <manikulin@gmail.com> wrote:

> It seems my comments have led mostly to confusion rather than 
> improvements. I am sorry for that. I have in mind 2 kind of links:
> - <shortdoc:string::#try-completion> that may be handled solely by 
> `shortdoc-display-group' with second argument.
> - <shortdoc::string::identical contents> that should cause
>    (shortdoc-display-group group)
>    (search-forward fn nil t) ; or (word-search-forward fn nil t)

I'm sure the confusion is mostly my fault :)

The following now work as expected:

- [[shortdoc:string]]
- [[shortdoc:string::#try-completion]]
- [[shortdoc:string::identical contents]]


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ol-support-for-shortdoc-link-type.patch --]
[-- Type: text/x-patch, Size: 4267 bytes --]

diff --git a/doc/org-manual.org b/doc/org-manual.org
index 1feb5ed60..8894f4231 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -3382,6 +3382,15 @@ Here is the full set of built-in link types:
 
   Execute a shell command upon activation.
 
+- =shortdoc= ::
+
+  Link to short documentation summary for an Emacs Lisp function group.
+  Since Emacs 28, user command ~shortdoc-display-group~ lists all known
+  documentation groups.
+
+  For more information, see [[info:emacs#Name Help][Name Help]]
+  and [[info:elisp#Documentation Groups][Documentation Groups]].
+
 
 For =file:= and =id:= links, you can additionally specify a line
 number, or a text search string, separated by =::=.  In Org files, you
@@ -3423,6 +3432,8 @@ options:
 | irc        | =irc:/irc.com/#emacs/bob=                                          |
 | help       | =help:org-store-link=                                              |
 | info       | =info:org#External links=                                          |
+| shortdoc   | =shortdoc:text-properties=                                         |
+|            | =shortdoc:text-properties::#get-pos-property=                      |
 | shell      | =shell:ls *.org=                                                   |
 | elisp      | =elisp:(find-file "Elisp.org")= (Elisp form to evaluate)           |
 |            | =elisp:org-agenda= (interactive Elisp command)                     |
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 99dd8839c..1623873c0 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -1405,6 +1405,11 @@ place the entry in the ~Misc~ category if ~TEXINFO_DIR_CATEGORY~ is missing.
 =TEXINFO_DIR_TITLE= is renamed to =TEXINFO_DIR_NAME=.
 The old name is obsolete.
 
+*** =ol.el=: Support for =shortdoc= link type
+
+Add support for storing and inserting links to =shortdoc= documentation
+groups for Emacs Lisp functions.
+
 ** New functions and changes in function arguments
 *** New optional argument =UPDATE-HEADING= for ~org-bibtex-yank~
 
diff --git a/lisp/ol.el b/lisp/ol.el
index bc9682e4a..ab6cb497a 100644
--- a/lisp/ol.el
+++ b/lisp/ol.el
@@ -1582,6 +1582,46 @@ PATH is a symbol name, as a string."
                          :follow #'org-link--open-help
                          :store #'org-link--store-help)
 
+;;;; "shortdoc" link type
+(when (version<= "28.0.90" emacs-version)
+  (defun org-link--open-shortdoc (path _)
+    "Open a \"shortdoc\" type link.
+PATH is a group name, \"group::#function\" or \"group::search string\"."
+    (string-match "\\`\\([^:]*\\)\\(?:::\\(.*\\).*\\'\\)?" path)
+    (let* ((group (match-string 1 path))
+           (str (match-string 2 path))
+           (fn (when (and str (string-match "^#" str))
+                 (intern-soft (string-remove-prefix "#" str)))))
+      (condition-case nil
+          (progn
+            (shortdoc-display-group group fn)
+            (when (and str (not fn))
+              (search-forward str nil t)))
+        (user-error "Unknown shortdoc group: %s" group))))
+
+  (defun org-link--store-shortdoc (&optional _interactive?)
+    "Store \"shortdoc\" type link."
+    (when (eq major-mode 'shortdoc-mode)
+      (let* ((buffer (buffer-name))
+             (group (when (string-match "*Shortdoc \\(.*\\)\\*" buffer)
+                      (match-string 1 buffer))))
+        (if (and group (assoc (intern-soft group) shortdoc--groups))
+            (org-link-store-props :type "shortdoc"
+                                  :link (format "shortdoc:%s" group)
+                                  :description nil)
+          (user-error "Unknown shortdoc group: %s" group)))))
+
+  (defun org-link--complete-shortdoc ()
+    "Create a \"shortdoc\" link using completion."
+    (concat "shortdoc:"
+            (completing-read "Shortdoc summary for functions in: "
+                             (mapcar #'car shortdoc--groups))))
+
+  (org-link-set-parameters "shortdoc"
+                           :follow #'org-link--open-shortdoc
+                           :store #'org-link--store-shortdoc
+                           :complete #'org-link--complete-shortdoc))
+
 ;;;; "http", "https", "mailto", "ftp", and "news" link types
 (dolist (scheme '("ftp" "http" "https" "mailto" "news"))
   (org-link-set-parameters scheme

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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-08  1:11                       ` Bruno Cardoso
@ 2024-05-08 11:20                         ` Max Nikulin
  2024-05-08 21:26                           ` Bruno Cardoso
  0 siblings, 1 reply; 21+ messages in thread
From: Max Nikulin @ 2024-05-08 11:20 UTC (permalink / raw)
  To: Bruno Cardoso, emacs-orgmode

On 08/05/2024 08:11, Bruno Cardoso wrote:
> 
> The following now work as expected:
> 
> - [[shortdoc:string]]
> - [[shortdoc:string::#try-completion]]
> - [[shortdoc:string::identical contents]]

Thanks.

Bruno, the patch should have proper commit message, see
<https://orgmode.org/worg/org-contribute.html#commit-messages>

Some minor notes:

> +++ b/doc/org-manual.org
> @@ -3382,6 +3382,15 @@ Here is the full set of built-in link types:
>  
>    Execute a shell command upon activation.
>  
> +- =shortdoc= ::
> +
> +  Link to short documentation summary for an Emacs Lisp function group.
> +  Since Emacs 28, user command ~shortdoc-display-group~ lists all known
> +  documentation groups.
I have not managed to get all known groups with `shortdoc-display-group' 
in Emacs-28. Is it a feature of `shortdoc' in Emacs-29?

> +    (string-match "\\`\\([^:]*\\)\\(?:::\\(.*\\).*\\'\\)?" path)

My bad. In
     "\\`\\([^:]*\\)\\(?:::#\\(.*\\).*\\'\\)?"
second .* was unnecessary, it survived from an earlier variant with \\| 
and \\' outside of the regex group.

Likely it is better to not allow empty group or function, so "+" instead 
of "*"

"\\`\\([^:]+\\)\\(?:::\\(.+\\)\\'\\)?"

since <shortdoc:::file> is hardly a valid link. However it might be 
search text link in the list of all groups (Emacs-29+ only?).

It is related to corner cases, so I do not insist.

> +    (let* ((group (match-string 1 path))
> +           (str (match-string 2 path))
> +           (fn (when (and str (string-match "^#" str))
> +                 (intern-soft (string-remove-prefix "#" str)))))

Nitpick, feel free to ignore:
- `when' is redundant here due to `and' inside its condition.
- `string-patch-p' would not affect match groups, so it is a bit cheaper.
- Since it is already known that first character is "#", `substring' 
instead of `string-remove-prefix' is an extra step in microoptimization

Untested: (fn (and str (eq ?# (string-to-char str)) (substring str 1)))


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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-08 11:20                         ` Max Nikulin
@ 2024-05-08 21:26                           ` Bruno Cardoso
  2024-05-10 11:09                             ` Max Nikulin
  0 siblings, 1 reply; 21+ messages in thread
From: Bruno Cardoso @ 2024-05-08 21:26 UTC (permalink / raw)
  To: Max Nikulin, emacs-orgmode

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


On 2024-05-08, 18:20 +0700, Max Nikulin <manikulin@gmail.com> wrote:

> I have not managed to get all known groups with `shortdoc-display-group' 
> in Emacs-28. Is it a feature of `shortdoc' in Emacs-29?

In Emacs-29 `shortdoc' is an alias for `shortdoc-display-group'. Interactvely, it prompts the user for a group from `shortdoc--groups' (that's what I meant by "all known groups"). I'm unsure if `shortdoc-display-group' behaves differently in Emacs-28.

> Likely it is better to not allow empty group or function, so "+" instead 
> of "*"
>
> "\\`\\([^:]+\\)\\(?:::\\(.+\\)\\'\\)?"
>
> since <shortdoc:::file> is hardly a valid link. However it might be 
> search text link in the list of all groups (Emacs-29+ only?).
>
> It is related to corner cases, so I do not insist.

`shortdoc-display-group' already handles empty group or function. Replacing "*" by "+" will throw an "Args out of range" error in the corner case you mentioned ("shortdoc:::file"). So I think it's fine to keep "*" there.

> Nitpick, feel free to ignore:
> - `when' is redundant here due to `and' inside its condition.
> - `string-patch-p' would not affect match groups, so it is a bit cheaper.
> - Since it is already known that first character is "#", `substring' 
> instead of `string-remove-prefix' is an extra step in microoptimization

Noted.

Thank you for all your comments and suggestions, Max!


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ol-support-for-shortdoc-link-type.patch --]
[-- Type: text/x-patch, Size: 4586 bytes --]

ol.el: Add support for `shortdoc' link type

* lisp/ol.el: Add support for storing and inserting links to `shortdoc'
documentation groups for Emacs Lisp functions.

* doc/org-manual.org (External Links): Add shortdoc link type
documentation.

* etc/ORG-NEWS (=ol.el=: Support for =shortdoc= link type): Document
the new feature.

---
diff --git a/doc/org-manual.org b/doc/org-manual.org
index 1feb5ed60..8894f4231 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -3382,6 +3382,15 @@ Here is the full set of built-in link types:
 
   Execute a shell command upon activation.
 
+- =shortdoc= ::
+
+  Link to short documentation summary for an Emacs Lisp function group.
+  Since Emacs 28, user command ~shortdoc-display-group~ lists all known
+  documentation groups.
+
+  For more information, see [[info:emacs#Name Help][Name Help]]
+  and [[info:elisp#Documentation Groups][Documentation Groups]].
+
 
 For =file:= and =id:= links, you can additionally specify a line
 number, or a text search string, separated by =::=.  In Org files, you
@@ -3423,6 +3432,8 @@ options:
 | irc        | =irc:/irc.com/#emacs/bob=                                          |
 | help       | =help:org-store-link=                                              |
 | info       | =info:org#External links=                                          |
+| shortdoc   | =shortdoc:text-properties=                                         |
+|            | =shortdoc:text-properties::#get-pos-property=                      |
 | shell      | =shell:ls *.org=                                                   |
 | elisp      | =elisp:(find-file "Elisp.org")= (Elisp form to evaluate)           |
 |            | =elisp:org-agenda= (interactive Elisp command)                     |
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 99dd8839c..1623873c0 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -1405,6 +1405,11 @@ place the entry in the ~Misc~ category if ~TEXINFO_DIR_CATEGORY~ is missing.
 =TEXINFO_DIR_TITLE= is renamed to =TEXINFO_DIR_NAME=.
 The old name is obsolete.
 
+*** =ol.el=: Support for =shortdoc= link type
+
+Add support for storing and inserting links to =shortdoc= documentation
+groups for Emacs Lisp functions.
+
 ** New functions and changes in function arguments
 *** New optional argument =UPDATE-HEADING= for ~org-bibtex-yank~
 
diff --git a/lisp/ol.el b/lisp/ol.el
index bc9682e4a..928db29e1 100644
--- a/lisp/ol.el
+++ b/lisp/ol.el
@@ -1582,6 +1582,46 @@ PATH is a symbol name, as a string."
                          :follow #'org-link--open-help
                          :store #'org-link--store-help)
 
+;;;; "shortdoc" link type
+(when (version<= "28.0.90" emacs-version)
+  (defun org-link--open-shortdoc (path _)
+    "Open a \"shortdoc\" type link.
+PATH is a group name, \"group::#function\" or \"group::search string\"."
+    (string-match "\\`\\([^:]*\\)\\(?:::\\(.*\\)\\'\\)?" path)
+    (let* ((group (match-string 1 path))
+           (str (match-string 2 path))
+           (fn (and str
+                    (eq ?# (string-to-char str))
+                    (intern-soft (substring str 1)))))
+      (condition-case nil
+          (progn
+            (shortdoc-display-group group fn)
+            (and str (not fn) (search-forward str nil t)))
+        (user-error "Unknown shortdoc group: %s" group))))
+
+  (defun org-link--store-shortdoc (&optional _interactive?)
+    "Store \"shortdoc\" type link."
+    (when (eq major-mode 'shortdoc-mode)
+      (let* ((buffer (buffer-name))
+             (group (when (string-match "*Shortdoc \\(.*\\)\\*" buffer)
+                      (match-string 1 buffer))))
+        (if (and group (assoc (intern-soft group) shortdoc--groups))
+            (org-link-store-props :type "shortdoc"
+                                  :link (format "shortdoc:%s" group)
+                                  :description nil)
+          (user-error "Unknown shortdoc group: %s" group)))))
+
+  (defun org-link--complete-shortdoc ()
+    "Create a \"shortdoc\" link using completion."
+    (concat "shortdoc:"
+            (completing-read "Shortdoc summary for functions in: "
+                             (mapcar #'car shortdoc--groups))))
+
+  (org-link-set-parameters "shortdoc"
+                           :follow #'org-link--open-shortdoc
+                           :store #'org-link--store-shortdoc
+                           :complete #'org-link--complete-shortdoc))
+
 ;;;; "http", "https", "mailto", "ftp", and "news" link types
 (dolist (scheme '("ftp" "http" "https" "mailto" "news"))
   (org-link-set-parameters scheme

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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-08 21:26                           ` Bruno Cardoso
@ 2024-05-10 11:09                             ` Max Nikulin
  2024-05-11 16:58                               ` Bruno Cardoso
  0 siblings, 1 reply; 21+ messages in thread
From: Max Nikulin @ 2024-05-10 11:09 UTC (permalink / raw)
  To: emacs-orgmode; +Cc: Bruno Cardoso

On 09/05/2024 04:26, Bruno Cardoso wrote:
> On 2024-05-08, 18:20 +0700, Max Nikulin wrote:
> 
>> I have not managed to get all known groups with `shortdoc-display-group'
>> in Emacs-28. Is it a feature of `shortdoc' in Emacs-29?
> 
> In Emacs-29 `shortdoc' is an alias for `shortdoc-display-group'.
> Interactvely, it prompts the user for a group from `shortdoc--groups'
> (that's what I meant by "all known groups").

Thank you for the explanation. Reading "lists all" I expected something 
like list of all info manuals in the case of M-x info RET when there are 
no info buffers yet.

>> "\\`\\([^:]+\\)\\(?:::\\(.+\\)\\'\\)?"
> 
> `shortdoc-display-group' already handles empty group or function.
> Replacing "*" by "+" will throw an "Args out of range" error in the
> corner case you mentioned ("shortdoc:::file"). So I think it's fine to
> keep "*" there.

Out of range error happens because of `string-match' is called despite 
`match-string' failure and match groups from some earlier regexp are 
applied. Generally `match-string' should be inside `if', `when', `and', 
etc., however I agree that the regexp with stars always succeeds, 
perhaps really matching nothing. That is why I do not insist.

The following garbage in - garbage out case is a bit confusing:
<shortdoc::*file>
=> "No such documentation group "

> ol.el: Add support for `shortdoc' link type

Bruno, has you signed the copyright form? This patch is above the 
TINYCHANGE limit.
<https://orgmode.org/worg/org-contribute.html#copyright>

It will be a bit less work for the maintainer if you attach result of 
"git format-patch" command. It adds email-like headers allowing to 
properly set commit author.

> * lisp/ol.el: Add support for storing and inserting links to `shortdoc'
> documentation groups for Emacs Lisp functions.

List of new functions is missed:

* lisp/ol.el (org-link--open-shortdoc org-link--store-shortdoc)
(org-link--complete-shortdoc): Add support...

> * doc/org-manual.org (External Links): Add shortdoc link type
> documentation.
> 
> * etc/ORG-NEWS (=ol.el=: Support for =shortdoc= link type): Document
> the new feature.

Empty line is separator before free-form comments, so list of formal 
changes should be dense.

> +      (condition-case nil
> +          (progn
> +            (shortdoc-display-group group fn)
> +            (and str (not fn) (search-forward str nil t)))
> +        (user-error "Unknown shortdoc group: %s" group))))

Sorry, it does not work so. It means catch `user-error' however 
`shortdoc-display-group' signals `error'. Try to enable debug-on-error 
and to open a broken link. Either `condition-case' should be dropped or 
proper signal should be captured.


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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-10 11:09                             ` Max Nikulin
@ 2024-05-11 16:58                               ` Bruno Cardoso
  2024-05-13 11:14                                 ` Max Nikulin
  0 siblings, 1 reply; 21+ messages in thread
From: Bruno Cardoso @ 2024-05-11 16:58 UTC (permalink / raw)
  To: Max Nikulin, emacs-orgmode

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


On 2024-05-10, 18:09 +0700, Max Nikulin <manikulin@gmail.com> wrote:

> Thank you for the explanation. Reading "lists all" I expected something 
> like list of all info manuals in the case of M-x info RET when there are 
> no info buffers yet.

I see. I replaced the term "lists all" with "shows all" to avoid this confusion.

> The following garbage in - garbage out case is a bit confusing:
> <shortdoc::*file>
> => "No such documentation group "

Fixed the error handling and the error message.

> Bruno, has you signed the copyright form? This patch is above the 
> TINYCHANGE limit.
> <https://orgmode.org/worg/org-contribute.html#copyright>

I haven't yet. Will be glad to.

> It will be a bit less work for the maintainer if you attach result of 
> "git format-patch" command. It adds email-like headers allowing to 
> properly set commit author.

The attached patch is now in this format.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ol-support-for-shortdoc-link-type.patch --]
[-- Type: text/x-patch, Size: 5100 bytes --]

From 57ab6be64e227fcab24ad4c5b84873ed4e946cff Mon Sep 17 00:00:00 2001
From: Bruno Cardoso <cardoso.bc@gmail.com>
Date: Sat, 11 May 2024 13:42:56 -0300
Subject: [PATCH] Add support for shortdoc link type

ol.el: Add support for `shortdoc' link type

* lisp/ol.el (org-link--open-shortdoc org-link--store-shortdoc)
(org-link--complete-shortdoc): Add support for storing and inserting links
to `shortdoc' documentation groups for Emacs Lisp functions.
* doc/org-manual.org (External Links): Add shortdoc link type
documentation.
* etc/ORG-NEWS (=ol.el=: Support for =shortdoc= link type): Document
the new feature.
---
 doc/org-manual.org | 11 +++++++++++
 etc/ORG-NEWS       |  5 +++++
 lisp/ol.el         | 41 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 57 insertions(+)

diff --git a/doc/org-manual.org b/doc/org-manual.org
index f9d4c9a3f..8e99652b5 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -3382,6 +3382,15 @@ Here is the full set of built-in link types:
 
   Execute a shell command upon activation.
 
+- =shortdoc= ::
+
+  Link to short documentation summary for an Emacs Lisp function group.
+  Since Emacs 28, user command ~shortdoc-display-group~ shows all known
+  documentation groups.
+
+  For more information, see [[info:emacs#Name Help][Name Help]]
+  and [[info:elisp#Documentation Groups][Documentation Groups]].
+
 
 For =file:= and =id:= links, you can additionally specify a line
 number, or a text search string, separated by =::=.  In Org files, you
@@ -3423,6 +3432,8 @@ options:
 | irc        | =irc:/irc.com/#emacs/bob=                                          |
 | help       | =help:org-store-link=                                              |
 | info       | =info:org#External links=                                          |
+| shortdoc   | =shortdoc:text-properties=                                         |
+|            | =shortdoc:text-properties::#get-pos-property=                      |
 | shell      | =shell:ls *.org=                                                   |
 | elisp      | =elisp:(find-file "Elisp.org")= (Elisp form to evaluate)           |
 |            | =elisp:org-agenda= (interactive Elisp command)                     |
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 36eeddda1..9b7ba96ba 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -1428,6 +1428,11 @@ place the entry in the ~Misc~ category if ~TEXINFO_DIR_CATEGORY~ is missing.
 =TEXINFO_DIR_TITLE= is renamed to =TEXINFO_DIR_NAME=.
 The old name is obsolete.
 
+*** =ol.el=: Support for =shortdoc= link type
+
+Add support for storing and inserting links to =shortdoc= documentation
+groups for Emacs Lisp functions.
+
 ** New functions and changes in function arguments
 *** New optional argument =UPDATE-HEADING= for ~org-bibtex-yank~
 
diff --git a/lisp/ol.el b/lisp/ol.el
index 3d64b41b0..6b84957f4 100644
--- a/lisp/ol.el
+++ b/lisp/ol.el
@@ -1582,7 +1582,47 @@ PATH is a symbol name, as a string."
                          :follow #'org-link--open-help
                          :store #'org-link--store-help)
 
+;;;; "shortdoc" link type
+(when (version<= "28.0.90" emacs-version)
+  (defun org-link--open-shortdoc (path _)
+    "Open a \"shortdoc\" type link.
+PATH is a group name, \"group::#function\" or \"group::search string\"."
+    (string-match "\\`\\([^:]*\\)\\(?:::\\(.*\\)\\'\\)?" path)
+    (let* ((group (match-string 1 path))
+           (str (match-string 2 path))
+           (fn (and str
+                    (eq ?# (string-to-char str))
+                    (intern-soft (substring str 1)))))
+      (condition-case nil
+          (progn
+            (shortdoc-display-group group fn)
+            (and str (not fn) (search-forward str nil t)))
+        (error (message "Unknown shortdoc group or malformed link: `%s'"
+                        path)))))
+
+  (defun org-link--store-shortdoc (&optional _interactive?)
+    "Store \"shortdoc\" type link."
+    (when (eq major-mode 'shortdoc-mode)
+      (let* ((buffer (buffer-name))
+             (group (when (string-match "*Shortdoc \\(.*\\)\\*" buffer)
+                      (match-string 1 buffer))))
+        (if (and group (assoc (intern-soft group) shortdoc--groups))
+            (org-link-store-props :type "shortdoc"
+                                  :link (format "shortdoc:%s" group)
+                                  :description nil)
+          (user-error "Unknown shortdoc group: %s" group)))))
+
+  (defun org-link--complete-shortdoc ()
+    "Create a \"shortdoc\" link using completion."
+    (concat "shortdoc:"
+            (completing-read "Shortdoc summary for functions in: "
+                             (mapcar #'car shortdoc--groups))))
+
+  (org-link-set-parameters "shortdoc"
+                           :follow #'org-link--open-shortdoc
+                           :store #'org-link--store-shortdoc
+                           :complete #'org-link--complete-shortdoc))
+
 ;;;; "http", "https", "mailto", "ftp", and "news" link types
 (dolist (scheme '("ftp" "http" "https" "mailto" "news"))
   (org-link-set-parameters scheme
--
2.45.0


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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-11 16:58                               ` Bruno Cardoso
@ 2024-05-13 11:14                                 ` Max Nikulin
  2024-05-13 13:04                                   ` Bruno Cardoso
  0 siblings, 1 reply; 21+ messages in thread
From: Max Nikulin @ 2024-05-13 11:14 UTC (permalink / raw)
  To: Bruno Cardoso, emacs-orgmode

On 11/05/2024 23:58, Bruno Cardoso wrote:
> On 2024-05-10, 18:09 +0700, Max Nikulin wrote:
>> <https://orgmode.org/worg/org-contribute.html#copyright>
> 
> I haven't yet. Will be glad to.

I hope, next patch revision will be the final one, so it can be 
notification that the procedure is completed. (Rebase to main HEAD might 
be necessary.)

> The attached patch is now in this format.

> +++ b/lisp/ol.el
> @@ -1582,7 +1582,47 @@ PATH is a symbol name, as a string."
>                           :follow #'org-link--open-help
>                           :store #'org-link--store-help)
>  

Sorry, but did you manually edit the patch?

git apply /tmp/org/0001-ol-support-for-shortdoc-link-type.patch
error: patch failed: lisp/ol.el:1582
error: lisp/ol.el: patch does not apply

and I see only 6 context lines, not 7.

> +      (condition-case nil
> +          (progn
> +            (shortdoc-display-group group fn)
> +            (and str (not fn) (search-forward str nil t)))
> +        (error (message "Unknown shortdoc group or malformed link: `%s'"
> +                        path)))))

If you wish to use `user-error' as in earlier revisions then you may use

         (error (user-error "Unknown shortdoc group or malformed link: `%s'"
                         path)))))

An alternative might be something like (feel free to ignore)

       (condition-case err
;; ...
         (error (signal 'user-error (cdr err)))) ; more )

to preserve message generated by `shortdoc-display-group'.


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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-13 11:14                                 ` Max Nikulin
@ 2024-05-13 13:04                                   ` Bruno Cardoso
  2024-05-16 10:58                                     ` Max Nikulin
  0 siblings, 1 reply; 21+ messages in thread
From: Bruno Cardoso @ 2024-05-13 13:04 UTC (permalink / raw)
  To: Max Nikulin, emacs-orgmode

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


On 2024-05-13, 18:14 +0700, Max Nikulin <manikulin@gmail.com> wrote:

> Sorry, but did you manually edit the patch?

I didn't. I generated it again and applied without errors.

> If you wish to use `user-error' as in earlier revisions then you may use
>
>          (error (user-error "Unknown shortdoc group or malformed link: `%s'"
>                          path)))))

Thanks, changed it.

> An alternative might be something like (feel free to ignore)
>
>        (condition-case err
> ;; ...
>          (error (signal 'user-error (cdr err)))) ; more )
>
> to preserve message generated by `shortdoc-display-group'.

The error message generated by `shortdoc-display-group' may be vague when group is empty ("No such documentation group "), which might be the result of a malformed link.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ol-support-for-shortdoc-link-type.patch --]
[-- Type: text/x-patch, Size: 5107 bytes --]

From beceb1b17d1c019cfeb987276e5a234c8f280e6b Mon Sep 17 00:00:00 2001
From: Bruno Cardoso <cardoso.bc@gmail.com>
Date: Mon, 13 May 2024 09:42:19 -0300
Subject: [PATCH] Add support for shortdoc link type

ol.el: Add support for `shortdoc' link type

* lisp/ol.el (org-link--open-shortdoc org-link--store-shortdoc)
(org-link--complete-shortdoc): Add support for storing and inserting links
to `shortdoc' documentation groups for Emacs Lisp functions.
* doc/org-manual.org (External Links): Add shortdoc link type
documentation.
* etc/ORG-NEWS (=ol.el=: Support for =shortdoc= link type): Document
the new feature.
---
 doc/org-manual.org | 11 +++++++++++
 etc/ORG-NEWS       |  5 +++++
 lisp/ol.el         | 41 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 57 insertions(+)

diff --git a/doc/org-manual.org b/doc/org-manual.org
index e3a2c9b70..c4873a79b 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -3382,6 +3382,15 @@ Here is the full set of built-in link types:
 
   Execute a shell command upon activation.
 
+- =shortdoc= ::
+
+  Link to short documentation summary for an Emacs Lisp function group.
+  Since Emacs 28, user command ~shortdoc-display-group~ shows all known
+  documentation groups.
+
+  For more information, see [[info:emacs#Name Help][Name Help]]
+  and [[info:elisp#Documentation Groups][Documentation Groups]].
+
 
 For =file:= and =id:= links, you can additionally specify a line
 number, or a text search string, separated by =::=.  In Org files, you
@@ -3423,6 +3432,8 @@ options:
 | irc        | =irc:/irc.com/#emacs/bob=                                          |
 | help       | =help:org-store-link=                                              |
 | info       | =info:org#External links=                                          |
+| shortdoc   | =shortdoc:text-properties=                                         |
+|            | =shortdoc:text-properties::#get-pos-property=                      |
 | shell      | =shell:ls *.org=                                                   |
 | elisp      | =elisp:(find-file "Elisp.org")= (Elisp form to evaluate)           |
 |            | =elisp:org-agenda= (interactive Elisp command)                     |
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index ff58833d7..910f534ac 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -1467,6 +1467,11 @@ place the entry in the ~Misc~ category if ~TEXINFO_DIR_CATEGORY~ is missing.
 =TEXINFO_DIR_TITLE= is renamed to =TEXINFO_DIR_NAME=.
 The old name is obsolete.
 
+*** =ol.el=: Support for =shortdoc= link type
+
+Add support for storing and inserting links to =shortdoc= documentation
+groups for Emacs Lisp functions.
+
 ** New functions and changes in function arguments
 *** New optional argument =UPDATE-HEADING= for ~org-bibtex-yank~
 
diff --git a/lisp/ol.el b/lisp/ol.el
index 3d64b41b0..5468a1939 100644
--- a/lisp/ol.el
+++ b/lisp/ol.el
@@ -1582,6 +1582,47 @@ PATH is a symbol name, as a string."
                          :follow #'org-link--open-help
                          :store #'org-link--store-help)
 
+;;;; "shortdoc" link type
+(when (version<= "28.0.90" emacs-version)
+  (defun org-link--open-shortdoc (path _)
+    "Open a \"shortdoc\" type link.
+PATH is a group name, \"group::#function\" or \"group::search string\"."
+    (string-match "\\`\\([^:]*\\)\\(?:::\\(.*\\)\\'\\)?" path)
+    (let* ((group (match-string 1 path))
+           (str (match-string 2 path))
+           (fn (and str
+                    (eq ?# (string-to-char str))
+                    (intern-soft (substring str 1)))))
+      (condition-case nil
+          (progn
+            (shortdoc-display-group group fn)
+            (and str (not fn) (search-forward str nil t)))
+        (error (user-error "Unknown shortdoc group or malformed link: `%s'"
+                           path)))))
+
+  (defun org-link--store-shortdoc (&optional _interactive?)
+    "Store \"shortdoc\" type link."
+    (when (eq major-mode 'shortdoc-mode)
+      (let* ((buffer (buffer-name))
+             (group (when (string-match "*Shortdoc \\(.*\\)\\*" buffer)
+                      (match-string 1 buffer))))
+        (if (and group (assoc (intern-soft group) shortdoc--groups))
+            (org-link-store-props :type "shortdoc"
+                                  :link (format "shortdoc:%s" group)
+                                  :description nil)
+          (user-error "Unknown shortdoc group: %s" group)))))
+
+  (defun org-link--complete-shortdoc ()
+    "Create a \"shortdoc\" link using completion."
+    (concat "shortdoc:"
+            (completing-read "Shortdoc summary for functions in: "
+                             (mapcar #'car shortdoc--groups))))
+
+  (org-link-set-parameters "shortdoc"
+                           :follow #'org-link--open-shortdoc
+                           :store #'org-link--store-shortdoc
+                           :complete #'org-link--complete-shortdoc))
+
 ;;;; "http", "https", "mailto", "ftp", and "news" link types
 (dolist (scheme '("ftp" "http" "https" "mailto" "news"))
   (org-link-set-parameters scheme
-- 
2.45.0


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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-13 13:04                                   ` Bruno Cardoso
@ 2024-05-16 10:58                                     ` Max Nikulin
  2024-05-17 14:55                                       ` Bruno Cardoso
  0 siblings, 1 reply; 21+ messages in thread
From: Max Nikulin @ 2024-05-16 10:58 UTC (permalink / raw)
  To: Bruno Cardoso, emacs-orgmode

On 13/05/2024 20:04, Bruno Cardoso wrote:
> On 2024-05-13, 18:14 +0700, Max Nikulin wrote:
> 
>> Sorry, but did you manually edit the patch?
> 
> I didn't. I generated it again and applied without errors.

Thank you. Now your patch can be applied on my side as well.

Please, proceed with the copyright agreement form.


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

* Re: [PATCH] Add support for shortdoc link type
  2024-05-16 10:58                                     ` Max Nikulin
@ 2024-05-17 14:55                                       ` Bruno Cardoso
  0 siblings, 0 replies; 21+ messages in thread
From: Bruno Cardoso @ 2024-05-17 14:55 UTC (permalink / raw)
  To: Max Nikulin, emacs-orgmode


On 2024-05-16, 17:58 +0700, Max Nikulin <manikulin@gmail.com> wrote:
>
> Thank you. Now your patch can be applied on my side as well.
>
> Please, proceed with the copyright agreement form.

Thank you very much, Max. Just sent the form.


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

end of thread, other threads:[~2024-05-17 14:57 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-01  3:29 [PATCH] Add support for shortdoc link type Bruno Cardoso
2024-05-01 11:00 ` Ihor Radchenko
2024-05-01 16:52   ` Bruno Cardoso
2024-05-01 17:55     ` Ihor Radchenko
2024-05-01 19:24       ` Bruno Cardoso
2024-05-02 10:41         ` Max Nikulin
2024-05-03 21:41           ` Bruno Cardoso
2024-05-04  7:38             ` Max Nikulin
2024-05-04 17:33               ` Bruno Cardoso
2024-05-05 11:01                 ` Max Nikulin
2024-05-05 21:35                   ` Bruno Cardoso
2024-05-06 10:55                     ` Max Nikulin
2024-05-08  1:11                       ` Bruno Cardoso
2024-05-08 11:20                         ` Max Nikulin
2024-05-08 21:26                           ` Bruno Cardoso
2024-05-10 11:09                             ` Max Nikulin
2024-05-11 16:58                               ` Bruno Cardoso
2024-05-13 11:14                                 ` Max Nikulin
2024-05-13 13:04                                   ` Bruno Cardoso
2024-05-16 10:58                                     ` Max Nikulin
2024-05-17 14:55                                       ` Bruno Cardoso

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