aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/man.el
diff options
context:
space:
mode:
authorMasatake YAMATO <[email protected]>2005-11-06 18:01:34 +0000
committerMasatake YAMATO <[email protected]>2005-11-06 18:01:34 +0000
commit30abc4f43e8696fc0e6696acd372187139e6a596 (patch)
treee3528b0b3f9374cef25b699ac66d3a00542df454 /lisp/man.el
parent21c172a36f17aa9143052f49c4d065b2b6793f86 (diff)
Improve man -k support.
(Man-reference-regexp): Accpet spaces between `Man-name-regexp' and `Man-section-regexp'. (Man-apropos-regexp): New variable. (Man-abstract-xref-man-page): Use value for `Man-target-string' if available. (Man-highlight-references, Man-highlight-references0): Handle the case when `Man-arguments' includes "-k". (Man-highlight-references0): Rename the argument `TARGET-POS' to `TARGET'. `TARGET' can be a number, function or nil.
Diffstat (limited to 'lisp/man.el')
-rw-r--r--lisp/man.el51
1 files changed, 38 insertions, 13 deletions
diff --git a/lisp/man.el b/lisp/man.el
index c54a00d366..30ab44efad 100644
--- a/lisp/man.el
+++ b/lisp/man.el
@@ -286,9 +286,13 @@ This regexp should not start with a `^' character.")
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.")
@@ -421,7 +425,8 @@ Otherwise, the value is whatever the function
'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
@@ -918,9 +923,20 @@ 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))
+ (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 dummy
+ 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
@@ -929,21 +945,30 @@ in SEE ALSO section. If it is nil, default type,
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.