From 76b08a35bb6b3b32e5e5fda53e374769ceae6ed8 Mon Sep 17 00:00:00 2001 From: Mark Oteiza Date: Fri, 21 Oct 2016 11:23:39 -0400 Subject: [PATCH] Teach browse-url to open man page urls * 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 | 4 ++++ lisp/net/browse-url.el | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/etc/NEWS b/etc/NEWS index 3b3164c2582..4e41dbb39a8 100644 --- 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 --- diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el index c0b359176ec..1bb48314bc8 100644 --- a/lisp/net/browse-url.el +++ b/lisp/net/browse-url.el @@ -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 -- 2.39.5