X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/5f43c63c204e8d746abdf5702856e081dfd5602b..1b74c4346e92c9ac1ae0575c2ad69f8d81126d7e:/lisp/man.el diff --git a/lisp/man.el b/lisp/man.el index d7344ed2f7..60fc7c009e 100644 --- a/lisp/man.el +++ b/lisp/man.el @@ -1,7 +1,7 @@ ;;; man.el --- browse UNIX manual pages -*- coding: iso-8859-1 -*- -;; Copyright (C) 1993, 1994, 1996, 1997, 2001, 2003, 2004 -;; Free Software Foundation, Inc. +;; Copyright (C) 1993, 1994, 1996, 1997, 2001, 2002, 2003, +;; 2004, 2005 Free Software Foundation, Inc. ;; Author: Barry A. Warsaw ;; Maintainer: FSF @@ -22,8 +22,8 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: @@ -352,6 +352,7 @@ Otherwise, the value is whatever the function (make-variable-buffer-local 'Man-page-mode-string) (make-variable-buffer-local 'Man-original-frame) (make-variable-buffer-local 'Man-arguments) +(put 'Man-arguments 'permanent-local t) (setq-default Man-sections-alist nil) (setq-default Man-refpages-alist nil) @@ -391,10 +392,11 @@ Otherwise, the value is whatever the function table) "Syntax table used in Man mode buffers.") -(if Man-mode-map - nil - (setq Man-mode-map (copy-keymap button-buffer-map)) +(unless Man-mode-map + (setq Man-mode-map (make-sparse-keymap)) (suppress-keymap Man-mode-map) + (set-keymap-parent Man-mode-map button-buffer-map) + (define-key Man-mode-map " " 'scroll-up) (define-key Man-mode-map "\177" 'scroll-down) (define-key Man-mode-map "n" 'Man-next-section) @@ -410,8 +412,7 @@ Otherwise, the value is whatever the function (define-key Man-mode-map "k" 'Man-kill) (define-key Man-mode-map "q" 'Man-quit) (define-key Man-mode-map "m" 'man) - (define-key Man-mode-map "?" 'describe-mode) - ) + (define-key Man-mode-map "?" 'describe-mode)) ;; buttons (define-button-type 'Man-xref-man-page @@ -444,7 +445,7 @@ Otherwise, the value is whatever the function ;; utilities (defun Man-init-defvars () - "Used for initialising variables based on display's color support. + "Used for initializing variables based on display's color support. This is necessary if one wants to dump man.el with Emacs." ;; Avoid possible error in call-process by using a directory that must exist. @@ -552,8 +553,8 @@ This is necessary if one wants to dump man.el with Emacs." (defun Man-translate-references (ref) "Translates REF from \"chmod(2V)\" to \"2v chmod\" style. Leave it as is if already in that style. Possibly downcase and -translate the section (see the Man-downcase-section-letters-flag -and the Man-section-translations-alist variables)." +translate the section (see the `Man-downcase-section-letters-flag' +and the `Man-section-translations-alist' variables)." (let ((name "") (section "") (slist Man-section-translations-alist)) @@ -591,7 +592,7 @@ This option allows `man' to interpret command line arguments as local filenames. Return the value of the variable `Man-support-local-filenames' if it was set to nil or t before the call of this function. -If t, the man command supports `-l' option. If nil, it don't. +If t, the man command supports `-l' option. If nil, it doesn't. Otherwise, if the value of `Man-support-local-filenames' is neither t nor nil, then determine a new value, set it to the variable `Man-support-local-filenames' and return @@ -904,8 +905,8 @@ Same for the ANSI bold and normal escape sequences." (defun Man-highlight-references () "Highlight the references on mouse-over. -references include items in the SEE ALSO section, -header file(#include ) and files in FILES" +References include items in the SEE ALSO section, +header file (#include ) and files in FILES." (let ((dummy 0)) (Man-highlight-references0 Man-see-also-regexp Man-reference-regexp 1 dummy @@ -1005,8 +1006,15 @@ manpage command." (if Man-fontify-manpage-flag (Man-fontify-manpage) (Man-cleanup-manpage)) + (run-hooks 'Man-cooked-hook) - (Man-mode) + (Man-mode) + + (if (not Man-page-list) + (let ((args Man-arguments)) + (kill-buffer (current-buffer)) + (error "Can't find the %s manpage" args))) + (set-buffer-modified-p nil) )) ;; Restore case-fold-search before calling @@ -1023,6 +1031,8 @@ manpage command." ;; ====================================================================== ;; set up manual mode in buffer and build alists +(put 'Man-mode 'mode-class 'special) + (defun Man-mode () "A mode for browsing Un*x manual pages. @@ -1080,7 +1090,7 @@ The following key bindings are currently in effect in the buffer: (Man-build-page-list) (Man-strip-page-headers) (Man-unindent) - (Man-goto-page 1) + (Man-goto-page 1 t) (run-mode-hooks 'Man-mode-hook)) (defsubst Man-build-section-alist () @@ -1340,35 +1350,32 @@ Specify which REFERENCE to use; default is based on word at point." (interactive) (quit-window)) -(defun Man-goto-page (page) +(defun Man-goto-page (page &optional noerror) "Go to the manual page on page PAGE." (interactive (if (not Man-page-list) - (let ((args Man-arguments)) - (kill-buffer (current-buffer)) - (error "Can't find the %s manpage" args)) + (error "Not a man page buffer") (if (= (length Man-page-list) 1) (error "You're looking at the only manpage in the buffer") (list (read-minibuffer (format "Go to manpage [1-%d]: " (length Man-page-list))))))) - (if (not Man-page-list) - (let ((args Man-arguments)) - (kill-buffer (current-buffer)) - (error "Can't find the %s manpage" args))) - (if (or (< page 1) - (> page (length Man-page-list))) - (error "No manpage %d found" page)) - (let* ((page-range (nth (1- page) Man-page-list)) - (page-start (car page-range)) - (page-end (car (cdr page-range)))) - (setq Man-current-page page - Man-page-mode-string (Man-make-page-mode-string)) - (widen) - (goto-char page-start) - (narrow-to-region page-start page-end) - (Man-build-section-alist) - (Man-build-references-alist) - (goto-char (point-min)))) + (if (and (not Man-page-list) (not noerror)) + (error "Not a man page buffer")) + (when Man-page-list + (if (or (< page 1) + (> page (length Man-page-list))) + (error "No manpage %d found" page)) + (let* ((page-range (nth (1- page) Man-page-list)) + (page-start (car page-range)) + (page-end (car (cdr page-range)))) + (setq Man-current-page page + Man-page-mode-string (Man-make-page-mode-string)) + (widen) + (goto-char page-start) + (narrow-to-region page-start page-end) + (Man-build-section-alist) + (Man-build-references-alist) + (goto-char (point-min))))) (defun Man-next-manpage ()