diff lisp/man.el @ 90261:7beb78bc1f8e

Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-97 Merge from emacs--cvs-trunk--0 Patches applied: * emacs--cvs-trunk--0 (patch 616-696) - Add lisp/mh-e/.arch-inventory - Update from CVS - Merge from gnus--rel--5.10 - Update from CVS: lisp/smerge-mode.el: Add 'tools' to file keywords. - lisp/gnus/ChangeLog: Remove duplicate entry * gnus--rel--5.10 (patch 147-181) - Update from CVS - Merge from emacs--cvs-trunk--0 - Update from CVS: lisp/mml.el (mml-preview): Doc fix. - Update from CVS: texi/message.texi: Fix default values. - Update from CVS: texi/gnus.texi (RSS): Addition.
author Miles Bader <miles@gnu.org>
date Mon, 16 Jan 2006 08:37:27 +0000
parents 0ca0d9181b5e 8d679b71e742
children d88caeac70d7
line wrap: on
line diff
--- a/lisp/man.el	Mon Jan 16 06:59:21 2006 +0000
+++ b/lisp/man.el	Mon Jan 16 08:37:27 2006 +0000
@@ -262,7 +262,7 @@
 (defvar Man-name-regexp "[-a-zA-Z0-9_­+][-a-zA-Z0-9_.:­+]*"
   "Regular expression describing the name of a manpage (without section).")
 
-(defvar Man-section-regexp "[0-9][a-zA-Z+]*\\|[LNln]"
+(defvar Man-section-regexp "[0-9][a-zA-Z0-9+]*\\|[LNln]"
   "Regular expression describing a manpage section within parentheses.")
 
 (defvar Man-page-header-regexp
@@ -286,9 +286,13 @@
 This regular expression should start with a `^' character.")
 
 (defvar Man-reference-regexp
-  (concat "\\(" Man-name-regexp "\\)(\\(" Man-section-regexp "\\))")
+  (concat "\\(" 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 "\\))")
+  "Regular expression describing a reference to manpages in \"man -k output\".")
+
 (defvar Man-synopsis-regexp "SYNOPSIS"
   "Regular expression for SYNOPSIS heading (or your equivalent).
 This regexp should not start with a `^' character.")
@@ -300,7 +304,7 @@
 (defvar Man-include-regexp "#[ \t]*include[ \t]*"
   "Regular expression describing the #include (directive of cpp).")
 
-(defvar Man-file-name-regexp "[^<>\" \t\n]+"
+(defvar Man-file-name-regexp "[^<>\", \t\n]+"
   "Regular expression describing <> in #include line (directive of cpp).")
 
 (defvar Man-normal-file-prefix-regexp "[/~$]"
@@ -421,7 +425,8 @@
   'func nil
   'action (lambda (button) (funcall 
 			    (button-get button 'func)
-			    (button-label button))))
+			    (or (button-get button 'Man-target-string)
+				(button-label button)))))
 
 (define-button-type 'Man-xref-man-page 
   :supertype 'Man-abstract-xref-man-page
@@ -914,36 +919,55 @@
 (defun Man-highlight-references (&optional xref-man-type)
   "Highlight the references on mouse-over.
 References include items in the SEE ALSO section,
-header file (#include <foo.h>) and files in FILES.
-If XREF-MAN-TYPE is used as the button type for items
-in SEE ALSO section. If it is nil, default type, 
-`Man-xref-man-page' is used."
-  (let ((dummy 0))
-    (Man-highlight-references0
-     Man-see-also-regexp Man-reference-regexp 1 dummy
-     (or xref-man-type 'Man-xref-man-page))
-    (Man-highlight-references0
-     Man-synopsis-regexp Man-header-regexp 0 2
-     'Man-xref-header-file)
-    (Man-highlight-references0
-     Man-files-regexp Man-normal-file-regexp 0 0
-     'Man-xref-normal-file)))
+header file (#include <foo.h>), and files in FILES.
+If optional argument XREF-MAN-TYPE is non-nil, it used as the
+button type for items in SEE ALSO section.  If it is nil, the
+default type, `Man-xref-man-page' is used for the buttons."
+  ;; `Man-highlight-references' is used from woman.el, too.
+  ;; woman.el doesn't set `Man-arguments'.
+  (unless Man-arguments
+    (setq Man-arguments ""))
+  (if (string-match "-k " Man-arguments)
+      (progn
+	(Man-highlight-references0 nil Man-reference-regexp 1 nil
+				   (or xref-man-type 'Man-xref-man-page))
+	(Man-highlight-references0 nil Man-apropos-regexp 1
+				   (lambda ()
+				     (format "%s(%s)"
+					     (match-string 1)
+					     (match-string 2)))
+				   (or xref-man-type 'Man-xref-man-page)))
+    (Man-highlight-references0 Man-see-also-regexp Man-reference-regexp 1 nil
+			       (or xref-man-type 'Man-xref-man-page))
+    (Man-highlight-references0 Man-synopsis-regexp Man-header-regexp 0 2
+			       'Man-xref-header-file)
+    (Man-highlight-references0 Man-files-regexp Man-normal-file-regexp 0 0
+			       'Man-xref-normal-file)))
 
-(defun Man-highlight-references0 (start-section regexp button-pos target-pos type)
+(defun Man-highlight-references0 (start-section regexp button-pos target type)
   ;; Based on `Man-build-references-alist'
-  (when (Man-find-section start-section)
-    (forward-line 1)
-    (let ((end (save-excursion
-                 (Man-next-section 1)
-                 (point))))
-      (back-to-indentation)
+  (when (or (null start-section)
+	    (Man-find-section start-section))
+    (let ((end (if start-section
+		   (progn
+		     (forward-line 1)
+		     (back-to-indentation)
+		     (save-excursion
+		       (Man-next-section 1)
+		       (point)))
+		 (goto-char (point-min))
+		 (point-max))))
       (while (re-search-forward regexp end t)
 	(make-text-button
 	 (match-beginning button-pos)
 	 (match-end button-pos)
 	 'type type
-	 'Man-target-string (match-string target-pos)
-	 )))))
+	 'Man-target-string (cond
+			     ((numberp target) 
+			      (match-string target))
+			     ((functionp target)
+			      (funcall target))
+			     (t nil)))))))
 
 (defun Man-cleanup-manpage (&optional interactive)
   "Remove overstriking and underlining from the current buffer.