]> git.eshelyaron.com Git - emacs.git/commitdiff
Add support for man page hyperlinks in doc strings
authorStefan Kangas <stefan@marxist.se>
Sat, 25 Sep 2021 01:03:34 +0000 (03:03 +0200)
committerStefan Kangas <stefan@marxist.se>
Sat, 25 Sep 2021 02:00:37 +0000 (04:00 +0200)
* lisp/help-mode.el (help-man): New button type.
(help-xref-man-regexp): New const.
(help-make-xrefs): Use them to allow making man page buttons.
* doc/lispref/tips.texi (Documentation Tips): Document the new
hyperlink type.  (Bug#39215)

doc/lispref/tips.texi
etc/NEWS
lisp/help-mode.el

index a72ab88cef61e935d0a8c2d17e7da4fae6fc5d3e..1ea439b531b3de2b882c024bd0d2f4a2c18640df 100644 (file)
@@ -755,6 +755,14 @@ anchor}.  The Info file name defaults to @samp{emacs}.  For example,
 See Info node `Font Lock' and Info node `(elisp)Font Lock Basics'.
 @end smallexample
 
+To make a hyperlink to a man page, write the single-quoted name of the
+man page, preceded by @samp{Man page}, @samp{man page}, or @samp{man
+page for}.  For example,
+
+@smallexample
+See the man page `chmod' for details.
+@end smallexample
+
 To link to a customization group, write the single-quoted name of the
 group, preceded by @samp{customization group} (the first character in
 each word is case-insensitive).  For example,
index 2f8fbc76144d97489b3ba6008f26125dc7fdcc8d..31b09dad2424123d0976abe095fb82169bcb1b39 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -3698,8 +3698,13 @@ initial frame used in batch mode.
 +++
 ** Doc strings can now link to customization groups.
 Text like "customization group `whitespace'" will be made into a
-button.  When clicked, it'll take the user to a Custom buffer
-displaying that customization group.
+button.  When clicked, it will open a Custom buffer displaying that
+customization group.
+
++++
+** Doc strings can now link to man pages.
+Text like "man page `chmod'" will be made into a button.  When
+clicked, it will open a Man mode buffer displaying that man page.
 
 +++
 ** Buffers can now be created with certain hooks disabled.
index 551cf7e1a3ad41bd136ca6aa892afee6eb06a9dd..0b404fe89f16bda962ab625233599ac60070eed7 100644 (file)
@@ -224,6 +224,11 @@ The format is (FUNCTION ARGS...).")
   'help-function #'info
   'help-echo (purecopy "mouse-2, RET: read this Info node"))
 
+(define-button-type 'help-man
+  :supertype 'help-xref
+  'help-function #'man
+  'help-echo (purecopy "mouse-2, RET: read this man page"))
+
 (define-button-type 'help-customization-group
   :supertype 'help-xref
   'help-function #'customize-group
@@ -438,6 +443,11 @@ when help commands related to multilingual environment (e.g.,
    "\\<[Ii]nfo[ \t\n]+\\(node\\|anchor\\)[ \t\n]+['`‘]\\([^'’]+\\)['’]")
   "Regexp matching doc string references to an Info node.")
 
+(defconst help-xref-man-regexp
+  (purecopy
+   "\\<[Mm]an[ \t\n]+page[ \t\n]+\\(?:for[ \t\n]+\\)?['`‘\"]\\([^'’\"]+\\)['’\"]")
+  "Regexp matching doc string references to a man page.")
+
 (defconst help-xref-customization-group-regexp
   (purecopy "\\<[Cc]ustomization[ \t\n]+[Gg]roup[ \t\n]+['`‘]\\([^'’]+\\)['’]")
   "Regexp matching doc string references to a customization group.")
@@ -548,6 +558,10 @@ that."
                        (setq data ;; possible newlines if para filled
                              (replace-regexp-in-string "[ \t\n]+" " " data t t)))
                       (help-xref-button 2 'help-info data))))
+                ;; Man references
+                (save-excursion
+                  (while (re-search-forward help-xref-man-regexp nil t)
+                    (help-xref-button 1 'help-man (match-string 1))))
                 ;; Customization groups.
                 (save-excursion
                   (while (re-search-forward