X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/3a8b7013042adae3c27327a75662fd8e884d4896..455700d69a1a6861dc8c9b2ba19733429727d3c3:/lisp/man.el diff --git a/lisp/man.el b/lisp/man.el index d9124c24e0..d127decfeb 100644 --- a/lisp/man.el +++ b/lisp/man.el @@ -1,6 +1,6 @@ -;;; man.el --- browse UNIX manual pages -*- coding: utf-8 -*- +;;; man.el --- browse UNIX manual pages -;; Copyright (C) 1993-1994, 1996-1997, 2001-2015 Free Software +;; Copyright (C) 1993-1994, 1996-1997, 2001-2016 Free Software ;; Foundation, Inc. ;; Author: Barry A. Warsaw @@ -75,7 +75,7 @@ ;; ============= TODO =========== ;; - Add a command for printing. ;; - The awk script deletes multiple blank lines. This behavior does -;; not allow to understand if there was indeed a blank line at the +;; not allow one to understand if there was indeed a blank line at the ;; end or beginning of a page (after the header, or before the ;; footer). A different algorithm should be used. It is easy to ;; compute how many blank lines there are before and after the page @@ -104,7 +104,7 @@ "Manpage cleaning filter command phrases. This variable contains a list of the following form: -'((command-string phrase-string*)*) + ((command-string phrase-string*)*) Each phrase-string is concatenated onto the command-string to form a command filter. The (standard) output (and standard error) of the Un*x @@ -184,7 +184,9 @@ The value also can be a positive integer for a fixed width." (defcustom Man-frame-parameters nil "Frame parameter list for creating a new frame for a manual page." - :type 'sexp + :type '(repeat (cons :format "%v" + (symbol :tag "Parameter") + (sexp :tag "Value"))) :group 'man) (defcustom Man-downcase-section-letters-flag t @@ -306,12 +308,12 @@ This regular expression should start with a `^' character.") (defvar Man-reference-regexp (concat "\\(" Man-name-regexp - "\\(\n[ \t]+" Man-name-regexp "\\)*\\)[ \t]*(\\(" + "\\(‐?\n[ \t]+" Man-name-regexp "\\)*\\)[ \t]*(\\(" Man-section-regexp "\\))") "Regular expression describing a reference to another manpage.") (defvar Man-apropos-regexp - (concat "\\\[\\(" Man-name-regexp "\\)\\\][ \t]*(\\(" Man-section-regexp "\\))") + (concat "\\[\\(" Man-name-regexp "\\)\\][ \t]*(\\(" Man-section-regexp "\\))") "Regular expression describing a reference to manpages in \"man -k output\".") (defvar Man-synopsis-regexp "SYNOPSIS" @@ -617,7 +619,7 @@ This is necessary if one wants to dump man.el with Emacs." ;; `call-process' below sends it to /dev/null, ;; so we don't need `2>' even with DOS shells ;; which do support stderr redirection. - ((not (fboundp 'start-process)) " %s") + ((not (fboundp 'make-process)) " %s") ((concat " %s 2>" null-device))))) (flist Man-filter-list)) (while (and flist (car flist)) @@ -747,7 +749,8 @@ POS defaults to `point'." ;; Record the distance traveled. (setq distance (- column (current-column))) (when (looking-back - (concat "([ \t]*\\(?:" Man-section-regexp "\\)[ \t]*)")) + (concat "([ \t]*\\(?:" Man-section-regexp "\\)[ \t]*)") + (line-beginning-position)) ;; Skip section number backwards. (goto-char (match-beginning 0)) (skip-chars-backward " \t")) @@ -776,7 +779,7 @@ POS defaults to `point'." ;; see this- ;; command-here(1) ;; Note: This code gets executed iff our entry is after POS. - (when (looking-at "[ \t\r\n]+\\([-a-zA-Z0-9._+:]+\\)([0-9])") + (when (looking-at "‐?[ \t\r\n]+\\([-a-zA-Z0-9._+:]+\\)([0-9])") (setq word (concat word (match-string-no-properties 1))) ;; Make sure the section number gets included by the code below. (goto-char (match-end 1))) @@ -961,7 +964,7 @@ otherwise look like a page name. An \"apropos\" query with -k gives a buffer of matching page names or descriptions. The pattern argument is usually an -\"egrep\" style regexp. +\"grep -E\" style regexp. -k pattern" @@ -1077,7 +1080,7 @@ Return the buffer in which the manpage will appear." "[cleaning...]") 'face 'mode-line-emphasis))) (Man-start-calling - (if (fboundp 'start-process) + (if (fboundp 'make-process) (let ((proc (start-process manual-program buffer (if (memq system-type '(cygwin windows-nt)) @@ -1427,8 +1430,17 @@ manpage command." (quit-restore-window (get-buffer-window (current-buffer) t) 'kill) (kill-buffer (current-buffer))) - (message "Can't find the %s manpage" - (Man-page-from-arguments args))) + ;; Entries hyphenated due to the window's width + ;; won't be found in the man database, so remove + ;; the hyphenation -- assuming Groff hyphenates + ;; either with hyphen-minus (ASCII 45, #x2d), + ;; hyphen (#x2010) or soft hyphen (#xad) -- and + ;; look again. + (if (string-match "[-‐­]" args) + (let ((str (replace-match "" nil nil args))) + (Man-getpage-in-background str)) + (message "Can't find the %s manpage" + (Man-page-from-arguments args)))) (if Man-fontify-manpage-flag (message "%s man page formatted"