]> git.eshelyaron.com Git - emacs.git/commitdiff
Teach browse-url to open man page urls
authorMark Oteiza <mvoteiza@udel.edu>
Fri, 21 Oct 2016 15:23:39 +0000 (11:23 -0400)
committerMark Oteiza <mvoteiza@udel.edu>
Fri, 21 Oct 2016 15:32:29 +0000 (11:32 -0400)
* lisp/net/browse-url.el (browse-url-man-function): New custom option.
(browse-url): Add a condition to catch links matching "^man:".
(browse-url-man): New function.

etc/NEWS
lisp/net/browse-url.el

index 3b3164c258233139fcdc4269b10cb68218d1c86e..4e41dbb39a84500cbde3fb8bed79fe7d50ecf2c6 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -275,6 +275,10 @@ whose content matches a regexp; bound to '% g'.
 'ibuffer-never-search-content-mode' used by
 'ibuffer-mark-by-content-regexp'.
 
+** Browse-URL
+
+*** Support for opening links to man pages in Man or WoMan mode.
+
 ** Compilation mode
 
 ---
index c0b359176ec3b657af8c1bd9c20ee044d76ef836..1bb48314bc8b60c0d5e2c27f50bb4d68174c220e 100644 (file)
@@ -184,6 +184,15 @@ be used instead."
   :version "24.1"
   :group 'browse-url)
 
+(defcustom browse-url-man-function 'browse-url-man
+  "Function to display man: links."
+  :type '(radio
+          (function-item :tag "Emacs Man" :value browse-url-man)
+          (const :tag "None" nil)
+          (function :tag "Other function"))
+  :version "26.1"
+  :group 'browse-url)
+
 (defcustom browse-url-netscape-program "netscape"
   ;; Info about netscape-remote from Karl Berry.
   "The name by which to invoke Netscape.
@@ -801,6 +810,8 @@ as ARGS."
   (let ((process-environment (copy-sequence process-environment))
        (function (or (and (string-match "\\`mailto:" url)
                           browse-url-mailto-function)
+                      (and (string-match "\\`man:" url)
+                           browse-url-man-function)
                      browse-url-browser-function))
        ;; Ensure that `default-directory' exists and is readable (b#6077).
        (default-directory (or (unhandled-file-name-directory default-directory)
@@ -1588,6 +1599,19 @@ used instead of `browse-url-new-window-flag'."
                     (unless (bolp)
                       (insert "\n"))))))))
 
+;; --- man ---
+
+(defvar manual-program)
+
+(defun browse-url-man (url &optional _new-window)
+  "Open a man page."
+  (interactive (browse-url-interactive-arg "Man page URL: "))
+  (require 'man)
+  (setq url (replace-regexp-in-string "\\`man:" "" url))
+  (cond
+   ((executable-find manual-program) (man url))
+    (t (woman (replace-regexp-in-string "([[:alnum:]]+)" "" url)))))
+
 ;; --- Random browser ---
 
 ;;;###autoload