On 06/08/2022 14:00, Ihor Radchenko wrote:
Max Nikulin writes:
To get impression of the new feature in action, I modified ol-info.el.
First patch does not depend on :insert-description and might be useful
per se. Second one just enables the feature.
Thanks! The patches look useful.
You should also add an entry to ORG-NEWS. Otherwise, I just have two
minor comments.
I have realized that I did not address this comment. See the first
attachment.
I have noticed `org-trim' function, so second attached patch replaces
`string-trim' in the newly added code to this function native to Org.
Unfortunately `org-unbracket-string' can not handle empty suffix, but
the fix is rather simple, so `string-remove-prefix' becomes unnecessary
as well. The only reason of this patch is that earlier subr-x was
avoided, see e.g. https://list.orgmode.org/87sg0onfrw....@nicolasgoaziou.fr/
Patches are independent and neither of them is strictly necessary, I do
not mind if they would be ignored.From 7fffacdda6015cee895e8eddb554bce1b82da6d2 Mon Sep 17 00:00:00 2001
From: Max Nikulin <maniku...@gmail.com>
Date: Wed, 31 Aug 2022 09:15:17 +0700
Subject: [PATCH 1/2] ORG-NEWS: `org-info-description-as-command'
* etc/ORG-NEWS: Mention that `org-info' uses `:insert-description',
a new feature of `org-link-parameters'.
---
etc/ORG-NEWS | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index d6d99a64b..713a850f6 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -455,6 +455,17 @@ prompting for a link description. It can be a string (used as-is) or
a function (called with the same arguments as
~org-make-link-description-function~ to return a string to use).
+An example of a such function for =info:= links is
+~org-info-description-as-command~. To access a manual section outside
+of Org, description may be pasted to shell prompt or evaluated withing
+Emacs using =M-:= (wrapped into parenthesis). For example,
+description of the =info:org#Tags= link is =info "(org) Tags"=. To
+restore earlier behavior add to your Emacs init file the following:
+#+begin_src elisp :results silent :eval never-export
+ (with-eval-after-load 'ol-info
+ (org-link-set-parameters "info" :insert-description nil))
+#+end_src
+
*** New list of languages for LaTeX export: ~org-latex-language-alist~
~org-latex-language-alist~ unifies into a single list the old language
--
2.25.1
From ef29e143545b4c1806abfb8ca072f7c98842fff2 Mon Sep 17 00:00:00 2001
From: Max Nikulin <maniku...@gmail.com>
Date: Wed, 31 Aug 2022 09:21:47 +0700
Subject: [PATCH 2/2] ol-info: Use org function instead of subr-x
* lisp/org-macs.el (org-unbracket-string): Handle empty suffix string.
* lisp/ol-info.el (org-info--link-file-node):
(org-info-description-as-command): Use `org-trim' and
`org-unbracket-string' instead of `string-trim' and
`string-remove-prefix' from the subr-x package.
---
lisp/ol-info.el | 9 ++++-----
lisp/org-macs.el | 3 ++-
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/lisp/ol-info.el b/lisp/ol-info.el
index e54fedc06..d332b2837 100644
--- a/lisp/ol-info.el
+++ b/lisp/ol-info.el
@@ -30,7 +30,6 @@
;;; Code:
-(require 'subr-x) ; `string-trim', `string-remove-prefix'
(require 'org-macs)
(org-assert-version)
@@ -78,11 +77,11 @@ File may be a virtual one, see `Info-virtual-files'."
'("dir" . "Top")
(string-match "\\`\\([^#:]*\\)\\(?:[#:]:?\\(.*\\)\\)?\\'" path)
(let* ((node (match-string 2 path))
- ;; Do not reorder, `string-trim' modifies match.
- (file (string-trim (match-string 1 path))))
+ ;; Do not reorder, `org-trim' modifies match.
+ (file (org-trim (match-string 1 path))))
(cons
(if (org-string-nw-p file) file "dir")
- (if (org-string-nw-p node) (string-trim node) "Top")))))
+ (if (org-string-nw-p node) (org-trim node) "Top")))))
(defun org-info-description-as-command (link desc)
"Info link description that can be pasted as command.
@@ -106,7 +105,7 @@ If LINK is not an info link then DESC is returned."
(need-file-node (and (not (org-string-nw-p desc))
(string-prefix-p prefix link))))
(pcase (and need-file-node
- (org-info--link-file-node (string-remove-prefix prefix link)))
+ (org-info--link-file-node (org-unbracket-string prefix "" link)))
;; Unlike (info "dir"), "info dir" shell command opens "(coreutils)dir invocation".
(`("dir" . "Top") "info \"(dir)\"")
(`(,file . "Top") (format "info %s" file))
diff --git a/lisp/org-macs.el b/lisp/org-macs.el
index 13d872a82..2e4590e93 100644
--- a/lisp/org-macs.el
+++ b/lisp/org-macs.el
@@ -1101,7 +1101,8 @@ removed. Return the new string. If STRING is nil, return nil."
(and string
(if (and (string-prefix-p pre string)
(string-suffix-p post string))
- (substring string (length pre) (- (length post)))
+ (substring string (length pre)
+ (and (not (string-equal "" post)) (- (length post))))
string)))
(defun org-strip-quotes (string)
--
2.25.1