diff lisp/man.el @ 7450:7ae5ee2ccd7f

(Man-reuse-okay-p): Doc fix. (Man-filter-list, Man-heading-regexp): Fix patterns. (Man-first-heading-regexp, Man-find-section): Likewise. (Man-getpage-in-background): Don't print ellipsis. (Man-bgproc-sentinel): Preserve match data. (Man-build-references-alist): Preserve restriction. (Man-bgproc-sentinel, Man-build-section-alist): Bind case-fold-search. (Man-next-section, Man-previous-section, Man-find-section): Likewise. (Man-goto-page): Fix interactive declaration.
author Karl Heuer <kwzh@gnu.org>
date Wed, 11 May 1994 02:09:43 +0000
parents f46da65f75e9
children a3d9cc59d593
line wrap: on
line diff
--- a/lisp/man.el	Wed May 11 00:19:21 1994 +0000
+++ b/lisp/man.el	Wed May 11 02:09:43 1994 +0000
@@ -98,10 +98,10 @@
 
 (defvar Man-reuse-okay-p t
   "*Reuse a manpage buffer if possible.
-When t, and a manpage buffer already exists with the same invocation,
-man just indicates the manpage is ready according to the value of
-`Man-notify'.  When nil, it always fires off a background process, putting
-the results in a uniquely named buffer.")
+If non-nil, and a manpage buffer already exists with the same
+invocation, man just indicates the manpage is ready according to the
+value of `Man-notify'.  When nil, it always fires off a background
+process, putting the results in a uniquely named buffer.")
 
 (defvar Man-downcase-section-letters-p t
   "*Letters in sections are converted to lower case.
@@ -148,12 +148,12 @@
       "-e '/Reformatting page.  Wait/d'"
       "-e '/Reformatting entry.  Wait/d'"
       "-e '/^ *\\([A-Za-z][A-Za-z.]*([0-9A-Za-z][-0-9A-Za-z+]*)\\).*\\1$/d'"
-      "-e '/^[ \\t]*Hewlett-Packard Company[ \\t]*- [0-9]* -.*$/d'"
-      "-e '/^[ \\t]*Hewlett-Packard[ \\t]*- [0-9]* -.*$/d'"
+      "-e '/^[ \t]*Hewlett-Packard Company[ \t]*- [0-9]* -.*$/d'"
+      "-e '/^[ \t]*Hewlett-Packard[ \t]*- [0-9]* -.*$/d'"
       "-e '/^  *- [0-9]* - *Formatted:.*[0-9]$/d'"
-      "-e '/^ *Page [0-9]*.*(printed [0-9\\/]*)$/d'"
+      "-e '/^[ \t]*Page [0-9]*.*(printed [0-9\\/]*)$/d'"
       "-e '/^Printed [0-9].*[0-9]$/d'"
-      "-e '/^[ \\t]*X Version 1[01].*Release [0-9]/d'"
+      "-e '/^[ \t]*X Version 1[01].*Release [0-9]/d'"
       "-e '/^[A-za-z].*Last change:/d'"
       "-e '/^Sun Release [0-9].*[0-9]$/d'"
       "-e '/^\\n$/D'"
@@ -199,14 +199,14 @@
 (defvar Man-section-regexp "[0-9][a-zA-Z+]*\\|[LNln]"
   "*Regular expression describing a manpage section within parentheses.")
 
-(defvar Man-heading-regexp "^ ?[A-Z]"
+(defvar Man-heading-regexp "^[ \t]*[A-Z]"
   "*Regular expression describing a manpage heading entry.")
 
 (defvar Man-see-also-regexp "SEE ALSO"
   "*Regular expression for SEE ALSO heading (or your equivalent).
 This regexp should not start with a `^' character.")
 
-(defvar Man-first-heading-regexp "^ ?NAME$\\|^ ?No manual entry for .*$"
+(defvar Man-first-heading-regexp "^[ \t]*NAME$\\|^[ \t]*No manual entry fo.*$"
   "*Regular expression describing first heading on a manpage.
 This regular expression should start with a `^' character.")
 
@@ -432,9 +432,9 @@
   (let* ((default-entry (Man-default-man-entry))
 	 (man-args
 	  (read-string (format "Manual-entry: %s"
-			(if (string= default-entry "") ""
-			  (format "(default: %s) "
-				  default-entry))))))
+			       (if (string= default-entry "") ""
+				 (format "(default: %s) "
+					 default-entry))))))
     (and (string= man-args "")
 	 (if (string= default-entry "")
 	     (error "No man args given.")
@@ -462,7 +462,7 @@
 	     buffer)
 	(Man-notify-when-ready buffer)
       (require 'env)
-      (message "Invoking man %s in background..." man-args)
+      (message "Invoking man %s in background." man-args)
       (setq buffer (generate-new-buffer bufname))
       (save-excursion
 	(set-buffer buffer)
@@ -474,7 +474,7 @@
 	 (start-process manual-program buffer "sh" "-c"
 			(format (Man-build-man-command) man-args))
 	 'Man-bgproc-sentinel))
-    )))
+      )))
 
 (defun Man-notify-when-ready (man-buffer)
   "Notify the user when MAN-BUFFER is ready.
@@ -529,42 +529,42 @@
   "Manpage background process sentinel."
   (let ((Man-buffer (process-buffer process))
 	(delete-buff nil)
-	(err-mess nil))
+	(err-mess nil)
+	(case-fold-search nil))
     (if (null (buffer-name Man-buffer)) ;; deleted buffer
 	(set-process-buffer process nil)
-      (save-excursion
-	(set-buffer Man-buffer)
-	(goto-char (point-min))
-	(cond ((or (looking-at "No \\(manual \\)*entry for")
-		   (looking-at "[^\n]*: nothing appropriate$"))
-	       (setq err-mess (buffer-substring (point) (Man-linepos 'eol))
-		     delete-buff t)
-	       )
-	      ((not (and (eq (process-status process) 'exit)
-			 (= (process-exit-status process) 0)))
-	       (setq err-mess
-		     (concat (buffer-name Man-buffer)
-			     ": process "
-			     (let ((eos (1- (length msg))))
-			       (if (= (aref msg eos) ?\n)
-				   (substring msg 0 eos) msg))))
-	       (goto-char (point-max))
-	       (insert (format "\nprocess %s" msg))
-	       )))
-      (if delete-buff
-	  (kill-buffer Man-buffer)
-	(save-window-excursion
-	  (save-excursion
-	    (set-buffer Man-buffer)
-	    (Man-set-fonts)
-	    (run-hooks 'Man-cooked-hook)
-	    (Man-mode)
-	    (set-buffer-modified-p nil)))
-	(Man-notify-when-ready Man-buffer))
+      (save-match-data
+	(save-excursion
+	  (set-buffer Man-buffer)
+	  (goto-char (point-min))
+	  (cond ((or (looking-at "No \\(manual \\)*entry for")
+		     (looking-at "[^\n]*: nothing appropriate$"))
+		 (setq err-mess (buffer-substring (point) (Man-linepos 'eol))
+		       delete-buff t))
+		((not (and (eq (process-status process) 'exit)
+			   (= (process-exit-status process) 0)))
+		 (setq err-mess
+		       (concat (buffer-name Man-buffer)
+			       ": process "
+			       (let ((eos (1- (length msg))))
+				 (if (= (aref msg eos) ?\n)
+				     (substring msg 0 eos) msg))))
+		 (goto-char (point-max))
+		 (insert (format "\nprocess %s" msg))
+		 )))
+	(if delete-buff
+	    (kill-buffer Man-buffer)
+	  (save-window-excursion
+	    (save-excursion
+	      (set-buffer Man-buffer)
+	      (Man-set-fonts)
+	      (run-hooks 'Man-cooked-hook)
+	      (Man-mode)
+	      (set-buffer-modified-p nil)))
+	  (Man-notify-when-ready Man-buffer))
 
-      (if err-mess
-	  (error err-mess))
-      )))
+	(if err-mess
+	    (error err-mess))))))
 
 
 ;; ======================================================================
@@ -628,11 +628,11 @@
   "Build the association list of manpage sections."
   (setq Man-sections-alist nil)
   (goto-char (point-min))
-  (while (re-search-forward Man-heading-regexp (point-max) t)
-    (aput 'Man-sections-alist
-	  (buffer-substring (Man-linepos 'bol) (Man-linepos)))
-    (forward-line 1)
-    ))
+  (let ((case-fold-search nil))
+    (while (re-search-forward Man-heading-regexp (point-max) t)
+      (aput 'Man-sections-alist
+	    (buffer-substring (Man-linepos 'bol) (Man-linepos)))
+      (forward-line 1))))
 
 (defun Man-build-references-alist ()
   "Build the association list of references (in the SEE ALSO section)."
@@ -645,23 +645,24 @@
 		     (point)))
 	      hyphenated
 	      (runningpoint -1))
-	  (narrow-to-region start end)
-	  (goto-char (point-min))
-	  (back-to-indentation)
-	  (while (and (not (eobp)) (/= (point) runningpoint))
-	    (setq runningpoint (point))
-	    (let* ((eow (re-search-forward Man-reference-regexp end t))
-		   (word (buffer-substring (match-beginning 0) (match-end 0)))
-		   (len (1- (length word))))
-	      (if (not eow) nil
-		(if hyphenated
-		    (setq word (concat hyphenated word)
-			  hyphenated nil))
-		(if (= (aref word len) ?-)
-		    (setq hyphenated (substring word 0 len))
-		  (aput 'Man-refpages-alist word))))
-	    (skip-chars-forward " \t\n,"))
-	  ))))
+	  (save-restriction
+	    (narrow-to-region start end)
+	    (goto-char (point-min))
+	    (back-to-indentation)
+	    (while (and (not (eobp)) (/= (point) runningpoint))
+	      (setq runningpoint (point))
+	      (let* ((eow (re-search-forward Man-reference-regexp end t))
+		     (word (buffer-substring
+			    (match-beginning 0) (match-end 0)))
+		     (len (1- (length word))))
+		(if (not eow) nil
+		  (if hyphenated
+		      (setq word (concat hyphenated word)
+			    hyphenated nil))
+		  (if (= (aref word len) ?-)
+		      (setq hyphenated (substring word 0 len))
+		    (aput 'Man-refpages-alist word))))
+	      (skip-chars-forward " \t\n,")))))))
 
 (defun Man-build-page-list ()
   "Build the list of separate manpages in the buffer."
@@ -680,9 +681,9 @@
 	  (goto-char (point-max))
 	  (setq page-end (point)))
 	(setq Man-page-list (append Man-page-list
-				   (list (cons page-start page-end)))
+				    (list (cons page-start page-end)))
 	      page-start page-end)
-	))))  
+	))))
 
 
 ;; ======================================================================
@@ -691,27 +692,30 @@
 (defun Man-next-section (n)
   "Move point to Nth next section (default 1)."
   (interactive "p")
-  (if (looking-at Man-heading-regexp)
-      (forward-line 1))
-  (if (re-search-forward Man-heading-regexp (point-max) t n)
-      (beginning-of-line)
-    (goto-char (point-max))))
+  (let ((case-fold-search nil))
+    (if (looking-at Man-heading-regexp)
+	(forward-line 1))
+    (if (re-search-forward Man-heading-regexp (point-max) t n)
+	(beginning-of-line)
+      (goto-char (point-max)))))
 
 (defun Man-previous-section (n)
   "Move point to Nth previous section (default 1)."
   (interactive "p")
-  (if (looking-at Man-heading-regexp)
-      (forward-line -1))
-  (if (re-search-backward Man-heading-regexp (point-min) t n)
-      (beginning-of-line)
-    (goto-char (point-min))))
+  (let ((case-fold-search nil))
+    (if (looking-at Man-heading-regexp)
+	(forward-line -1))
+    (if (re-search-backward Man-heading-regexp (point-min) t n)
+	(beginning-of-line)
+      (goto-char (point-min)))))
 
 (defun Man-find-section (section)
   "Move point to SECTION if it exists, otherwise don't move point.
 Returns t if section is found, nil otherwise."
-  (let ((curpos (point)))
+  (let ((curpos (point))
+	(case-fold-search nil))
     (goto-char (point-min))
-    (if (re-search-forward (concat "^\\s-?" section) (point-max) t)
+    (if (re-search-forward (concat "^[ \t]*" section) (point-max) t)
 	(progn (beginning-of-line) t)
       (goto-char curpos)
       nil)
@@ -756,7 +760,8 @@
 				     (let ((word (current-word)))
 				       ;; strip a trailing '-':
 				       (if (string-match "-$" word)
-					   (substring word 0 (match-beginning 0))
+					   (substring word 0
+						      (match-beginning 0))
 					 word)))
 				   Man-refpages-alist))
 			     (aheadsym Man-refpages-alist)))
@@ -784,9 +789,10 @@
 (defun Man-goto-page (page)
   "Go to the manual page on page PAGE."
   (interactive
-   (if (not Man-page-list)
+   (if (= (length Man-page-list) 1)
        (error "You're looking at the only manpage in the buffer.")
-     (format "nGo to manpage [1-%d]: " (length Man-page-list))))
+     (list (read-minibuffer (format "Go to manpage [1-%d]: "
+				    (length Man-page-list))))))
   (if (or (< page 1)
 	  (> page (length Man-page-list)))
       (error "No manpage %d found" page))