branch: externals/org
commit 4f8a2758cbd78fb43f45c7c7502847b8025d6f93
Author: Nicolas Goaziou <[email protected]>
Commit: Nicolas Goaziou <[email protected]>

    ol: Factorize "help" link store function
    
    * lisp/ol.el (org-link--store-help): New function.
    (org-store-link): Do not hard-code "help" links. Use regular
    `org-link-set-parameters' process.
---
 lisp/ol.el | 31 +++++++++++++++++--------------
 1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/lisp/ol.el b/lisp/ol.el
index 706a838..aa8e6b0 100644
--- a/lisp/ol.el
+++ b/lisp/ol.el
@@ -1329,7 +1329,23 @@ PATH is a symbol name, as a string."
     ((and (pred boundp) function) (describe-variable function))
     (name (user-error "Unknown function or variable: %s" name))))
 
-(org-link-set-parameters "help" :follow #'org-link--open-help)
+(defun org-link--store-help ()
+  (when (eq major-mode 'help-mode)
+    (let ((symbol
+           (replace-regexp-in-string
+           ;; Help mode escapes backquotes and backslashes before
+           ;; displaying them.  E.g., "`" appears as "\'" for
+           ;; reasons.  Work around this.
+           (rx "\\" (group (or "`" "\\"))) "\\1"
+           (save-excursion
+             (goto-char (point-min))
+              (re-search-forward "\\S_" (line-end-position) t)
+             (buffer-substring (point-min) (point))))))
+      (org-link-store-props :type "help" :link (concat "help:" symbol)))))
+
+(org-link-set-parameters "help"
+                         :follow #'org-link--open-help
+                         :store #'org-link--store-help)
 
 ;;;; "http", "https", "mailto", "ftp", and "news" link types
 (dolist (scheme '("ftp" "http" "https" "mailto" "news"))
@@ -1546,19 +1562,6 @@ non-nil."
                              nil nil nil))))
          (org-link-store-props :type "calendar" :date cd)))
 
-       ((eq major-mode 'help-mode)
-       (let ((symbol (replace-regexp-in-string
-                      ;; Help mode escapes backquotes and backslashes
-                      ;; before displaying them.  E.g., "`" appears
-                      ;; as "\'" for reasons.  Work around this.
-                      (rx "\\" (group (or "`" "\\"))) "\\1"
-                      (save-excursion
-                        (goto-char (point-min))
-                        (looking-at "^[^ ]+")
-                        (match-string 0)))))
-         (setq link (concat "help:" symbol)))
-       (org-link-store-props :type "help"))
-
        ((eq major-mode 'w3-mode)
        (setq cpltxt (if (and (buffer-name)
                              (not (string-match "Untitled" (buffer-name))))

Reply via email to