comparison lisp/info-look.el @ 20909:542ae65815fb

(info-complete): Rewrite minibuffer completion code. (info-lookup-minor-mode, turn-on-info-lookup): Added minor mode interface. (info-lookup-minor-mode-string): New variable. (info-lookup-minor-mode-map): New variable. Provide a work-around if the custom library is not available. (info-lookup-other-window-flag) (info-lookup-highlight-face): Variables customized. (info-lookup-alist): No longer customizable. (info-lookup-add-help, info-lookup-maybe-add-help): Interface functions for adding new modes. (info-lookup-add-help*): New function. (info-lookup-symbol-alist, info-lookup-file-alist): Variables deleted. This info is specified now by calling info-lookup-maybe-add-help and info-lookup-add-help.
author Richard M. Stallman <rms@gnu.org>
date Tue, 17 Feb 1998 03:25:05 +0000
parents d1f6ac340403
children b7e7f7c9685a
comparison
equal deleted inserted replaced
20908:516b224be85a 20909:542ae65815fb
1 ;;; info-look.el --- major-mode-sensitive Info index lookup facility. 1 ;;; info-look.el --- major-mode-sensitive Info index lookup facility.
2 ;; An older version of this was known as libc.el. 2 ;; An older version of this was known as libc.el.
3 3
4 ;; Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. 4 ;; Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
5 5
6 ;; Author: Ralph Schleicher <rs@purple.UL.BaWue.DE> 6 ;; Author: Ralph Schleicher <rs@purple.UL.BaWue.DE>
7 ;; Keywords: help languages 7 ;; Keywords: help languages
8 8
9 ;; This file is part of GNU Emacs. 9 ;; This file is part of GNU Emacs.
24 ;; Boston, MA 02111-1307, USA. 24 ;; Boston, MA 02111-1307, USA.
25 25
26 ;;; Code: 26 ;;; Code:
27 27
28 (require 'info) 28 (require 'info)
29 (eval-and-compile
30 (condition-case nil
31 (require 'custom)
32 (error
33 (defmacro defgroup (&rest arg)
34 nil)
35 (defmacro defcustom (symbol value doc &rest arg)
36 `(defvar ,symbol ,value ,doc ,@arg)))))
37
38 (defgroup info-lookup nil
39 "Major mode sensitive help agent."
40 :group 'help :group 'languages)
29 41
30 (defvar info-lookup-mode nil 42 (defvar info-lookup-mode nil
31 "*Symbol of the current buffer's help mode. 43 "Symbol of the current buffer's help mode.
32 Provide help according to the buffer's major mode if value is nil. 44 Help is provided according to the buffer's major mode if value is nil.
33 Automatically becomes buffer local when set in any fashion.") 45 Automatically becomes buffer local when set in any fashion.")
34 (make-variable-buffer-local 'info-lookup-mode) 46 (make-variable-buffer-local 'info-lookup-mode)
35 47
36 (defvar info-lookup-other-window-flag t 48 (defcustom info-lookup-other-window-flag t
37 "*Non-nil means pop up the Info buffer in another window.") 49 "Non-nil means pop up the Info buffer in another window."
38 50 :group 'info-lookup :type 'boolean)
39 (defvar info-lookup-highlight-face 'highlight 51
40 "*Face for highlighting looked up help items. 52 (defcustom info-lookup-highlight-face 'highlight
41 Setting this variable to nil disables highlighting.") 53 "Face for highlighting looked up help items.
54 Setting this variable to nil disables highlighting."
55 :group 'info-lookup :type 'face)
42 56
43 (defvar info-lookup-highlight-overlay nil 57 (defvar info-lookup-highlight-overlay nil
44 "Overlay object used for highlighting.") 58 "Overlay object used for highlighting.")
45 59
46 (defvar info-lookup-history nil 60 (defvar info-lookup-history nil
47 "History of previous input lines.") 61 "History of previous input lines.")
48 62
49 (defvar info-lookup-alist '((symbol . info-lookup-symbol-alist) 63 (defvar info-lookup-alist nil
50 (file . info-lookup-file-alist)) 64 "Alist of known help topics.
51 "*Alist of known help topics.
52 Cons cells are of the form 65 Cons cells are of the form
53 66
54 (HELP-TOPIC . VARIABLE) 67 (HELP-TOPIC . HELP-DATA)
55 68
56 HELP-TOPIC is the symbol of a help topic. 69 HELP-TOPIC is the symbol of a help topic.
57 VARIABLE is a variable storing HELP-TOPIC's public data. 70 HELP-DATA is a HELP-TOPIC's public data set.
58 Value is an alist with elements of the form 71 Value is an alist with elements of the form
59 72
60 (HELP-MODE REGEXP IGNORE-CASE DOC-SPEC PARSE-RULE OTHER-MODES) 73 (HELP-MODE REGEXP IGNORE-CASE DOC-SPEC PARSE-RULE OTHER-MODES)
61 74
62 HELP-MODE is a mode's symbol. 75 HELP-MODE is a mode's symbol.
82 there are no clear delimiters; do not try to write too complex 95 there are no clear delimiters; do not try to write too complex
83 expressions. PARSE-RULE defaults to REGEXP. 96 expressions. PARSE-RULE defaults to REGEXP.
84 OTHER-MODES is a list of cross references to other help modes.") 97 OTHER-MODES is a list of cross references to other help modes.")
85 98
86 (defsubst info-lookup->topic-value (topic) 99 (defsubst info-lookup->topic-value (topic)
87 (symbol-value (cdr (assoc topic info-lookup-alist)))) 100 (cdr (assoc topic info-lookup-alist)))
88 101
89 (defsubst info-lookup->mode-value (topic mode) 102 (defsubst info-lookup->mode-value (topic mode)
90 (assoc mode (info-lookup->topic-value topic))) 103 (assoc mode (info-lookup->topic-value topic)))
91 104
92 (defsubst info-lookup->regexp (topic mode) 105 (defsubst info-lookup->regexp (topic mode)
101 (defsubst info-lookup->parse-rule (topic mode) 114 (defsubst info-lookup->parse-rule (topic mode)
102 (nth 4 (info-lookup->mode-value topic mode))) 115 (nth 4 (info-lookup->mode-value topic mode)))
103 116
104 (defsubst info-lookup->other-modes (topic mode) 117 (defsubst info-lookup->other-modes (topic mode)
105 (nth 5 (info-lookup->mode-value topic mode))) 118 (nth 5 (info-lookup->mode-value topic mode)))
119
120 (eval-and-compile
121 (mapcar (lambda (keyword)
122 (or (boundp keyword)
123 (set keyword keyword)))
124 '(:topic :mode :regexp :ignore-case
125 :doc-spec :parse-rule :other-modes)))
126
127 (defun info-lookup-add-help (&rest arg)
128 "Add or update a help specification.
129 Function arguments are one or more options of the form
130
131 KEYWORD ARGUMENT
132
133 KEYWORD is either `:topic', `:mode', `:regexp', `:ignore-case',
134 `:doc-spec', `:parse-rule', or `:other-modes'.
135 ARGUMENT has a value as explained in the documentation of the
136 variable `info-lookup-alist'.
137
138 If no topic or mode option has been specified, then the help topic defaults
139 to `symbol', and the help mode defaults to the current major mode."
140 (apply 'info-lookup-add-help* nil arg))
141
142 (defun info-lookup-maybe-add-help (&rest arg)
143 "Add a help specification iff no one is defined.
144 See the documentation of the function `info-lookup-add-help'
145 for more details."
146 (apply 'info-lookup-add-help* t arg))
147
148 (defun info-lookup-add-help* (maybe &rest arg)
149 (let (topic mode regexp ignore-case doc-spec
150 parse-rule other-modes keyword value)
151 (setq topic 'symbol
152 mode major-mode
153 regexp "\\w+")
154 (while arg
155 (setq keyword (car arg))
156 (or (symbolp keyword)
157 (error "Junk in argument list \"%S\"" arg))
158 (setq arg (cdr arg))
159 (and (null arg)
160 (error "Keyword \"%S\" is missing an argument" keyword))
161 (setq value (car arg)
162 arg (cdr arg))
163 (cond ((eq keyword :topic)
164 (setq topic value))
165 ((eq keyword :mode)
166 (setq mode value))
167 ((eq keyword :regexp)
168 (setq regexp value))
169 ((eq keyword :ignore-case)
170 (setq ignore-case value))
171 ((eq keyword :doc-spec)
172 (setq doc-spec value))
173 ((eq keyword :parse-rule)
174 (setq parse-rule value))
175 ((eq keyword :other-modes)
176 (setq other-modes value))
177 (t
178 (error "Unknown keyword \"%S\"" keyword))))
179 (or (and maybe (info-lookup->mode-value topic mode))
180 (let* ((data (list regexp ignore-case doc-spec parse-rule other-modes))
181 (topic-cell (or (assoc topic info-lookup-alist)
182 (car (setq info-lookup-alist
183 (cons (cons topic nil)
184 info-lookup-alist)))))
185 (mode-cell (assoc mode topic-cell)))
186 (if (null mode-cell)
187 (setcdr topic-cell (cons (cons mode data) (cdr topic-cell)))
188 (setcdr mode-cell data))))
189 nil))
106 190
107 (defvar info-lookup-cache nil 191 (defvar info-lookup-cache nil
108 "Cache storing data maintained automatically by the program. 192 "Cache storing data maintained automatically by the program.
109 Value is an alist with cons cell of the form 193 Value is an alist with cons cell of the form
110 194
143 (info-lookup-setup-mode topic mode)) 227 (info-lookup-setup-mode topic mode))
144 (nth 3 (info-lookup->mode-cache topic mode))) 228 (nth 3 (info-lookup->mode-cache topic mode)))
145 229
146 (defsubst info-lookup->all-modes (topic mode) 230 (defsubst info-lookup->all-modes (topic mode)
147 (cons mode (info-lookup->refer-modes topic mode))) 231 (cons mode (info-lookup->refer-modes topic mode)))
148
149 (defvar info-lookup-symbol-alist
150 '((autoconf-mode
151 "A[CM]_[_A-Z0-9]+" nil
152 (("(autoconf)Macro Index" "AC_"
153 "^[ \t]+- \\(Macro\\|Variable\\): .*\\<" "\\>")
154 ("(automake)Index" nil
155 "^[ \t]*`" "'"))
156 ;; Autoconf symbols are M4 macros. Thus use M4's parser.
157 ignore
158 (m4-mode))
159 (bison-mode
160 "[:;|]\\|%\\([%{}]\\|[_a-z]+\\)\\|YY[_A-Z]+\\|yy[_a-z]+" nil
161 (("(bison)Index" nil
162 "`" "'"))
163 "[:;|]\\|%\\([%{}]\\|[_a-zA-Z][_a-zA-Z0-9]*\\)"
164 (c-mode))
165 (c-mode
166 "\\(struct \\|union \\|enum \\)?[_a-zA-Z][_a-zA-Z0-9]*" nil
167 (("(libc)Function Index" nil
168 "^[ \t]+- \\(Function\\|Macro\\): .*\\<" "\\>")
169 ("(libc)Variable Index" nil
170 "^[ \t]+- \\(Variable\\|Macro\\): .*\\<" "\\>")
171 ("(libc)Type Index" nil
172 "^[ \t]+- Data Type: \\<" "\\>")
173 ("(termcap)Var Index" nil
174 "^[ \t]*`" "'"))
175 info-lookup-guess-c-symbol)
176 (emacs-lisp-mode
177 "[-_a-zA-Z+=*:&%$#@!^~][-_a-zA-Z0-9+=*:&%$#@!^~]*" nil
178 ("(elisp)Index" nil
179 "^[ \t]+- \\(Function\\|Macro\\|User Option\\|Variable\\): .*\\<"
180 "\\>"))
181 (m4-mode
182 "[_a-zA-Z][_a-zA-Z0-9]*" nil
183 (("(m4)Macro index"))
184 "[_a-zA-Z0-9]+")
185 (makefile-mode
186 "\\$[^({]\\|\\.[_A-Z]*\\|[_a-zA-Z][_a-zA-Z0-9-]*" nil
187 (("(make)Name Index" nil
188 "^[ \t]*`" "'"))
189 "\\$[^({]\\|\\.[_A-Z]*\\|[_a-zA-Z0-9-]+")
190 (texinfo-mode
191 "@\\([a-zA-Z]+\\|[^a-zA-Z]\\)" nil
192 (("(texinfo)Command and Variable Index"
193 ;; Ignore Emacs commands and prepend a `@'.
194 (lambda (item)
195 (if (string-match "^\\([a-zA-Z]+\\|[^a-zA-Z]\\)\\( .*\\)?$" item)
196 (concat "@" (match-string 1 item))))
197 "`" "'")))
198 (awk-mode ;;; Added by Peter Galbraith <galbraith@mixing.qc.dfo.ca>
199 "[_a-zA-Z]+"
200 nil ; Don't ignore-case
201 (("(gawk)Index" ; info node
202 (lambda (item) ; TRANS-FUNC index-entry-->help-item
203 ;; In awk-mode, we want entries like:
204 ;; * BEGIN special pattern: BEGIN/END.
205 ;; * break statement: Break Statement.
206 ;; * FS: Field Separators.
207 ;; * gsub: String Functions.
208 ;; * system: I/O Functions.
209 ;; * systime: Time Functions.
210 ;;
211 ;; But not:
212 ;; * time of day: Time Functions.
213 ;; ^^^^^^^^^^^ More than one word.
214 ;;
215 ;; However, info-look's info-lookup-make-completions doesn't pass
216 ;; the whole line to the TRANS-FUNC, but only up to the first
217 ;; colon. So I can't use all the available info to decide what to
218 ;; keep. Therefore, I have to `set-buffer' to the *info* buffer.
219 ;;
220 ;; Also, info-look offers no way to add non-indexed entries like
221 ;; `cos' and other gawk Numeric Built-in Functions (or does it?)
222 ;; as in ftp://ftp.phys.ocean.dal.ca/users/rhogee/elisp/func-doc.el
223 ;; and http://www.ifi.uio.no/~jensthi/word-help.el (which adds a
224 ;; heap of stuff for latex!)
225 (let ((case-fold-search nil))
226 (cond
227 ((string-match "\\([^ ]+\\) *\\(special pattern\\|statement\\)$"
228 item)
229 (match-string 1 item))
230 ((string-match "^[A-Z]+$" item) ;This will grab FS and the like.
231 item)
232 ((string-match "^[a-z]+$" item)
233 (save-excursion
234 (set-buffer "*info*")
235 (if (looking-at " *\\(String\\|I/O\\|Time\\) Functions")
236 item))))))
237 "`" "'"))) ;Append PREFIX and SUFFIX to finetune
238 ; displayed location in Info node.
239 ;; Perl -- Added by Peter Galbraith <galbraith@mixing.qc.dfo.ca>
240 ;; Perl Version 5 Info files are available in CPAN sites, at:
241 ;; http://www.perl.com/CPAN/doc/manual/info/
242 ;;
243 ;; ftp://ftp.funet.fi/pub/languages/perl/CPAN/doc/manual/texinfo/
244 ;; ftp://ftp.pasteur.fr/pub/computing/unix/perl/CPAN/doc/manual/texinfo/
245 ;; ftp://mango.softwords.bc.ca/pub/perl/CPAN/doc/manual/texinfo/
246 ;; ftp://uiarchive.cso.uiuc.edu/pub/lang/perl/CPAN/doc/manual/texinfo/
247 (perl-mode
248 "$?[^ \n\t{(]+"
249 nil ; Don't ignore-case
250 (("(perl5)Function Index" ; info node
251 (lambda (item) ; TRANS-FUNC index-entry-->help-item
252 (if (string-match "^\\([a-z0-9]+\\)" item)
253 (match-string 1 item)))
254 "^" nil)
255 ("(perl5)Variable Index" ; info node
256 (lambda (item) ; TRANS-FUNC index-entry-->help-item
257 (if (string-match "^\\([^ \n\t{(]+\\)" item) ;First word
258 (match-string 1 item)))
259 "^" nil)))
260 ;; LaTeX -- Added by Peter Galbraith <galbraith@mixing.qc.dfo.ca>
261 ;; Info file available at:
262 ;; ftp://ftp.dante.de:pub/tex/info/latex2e-help-texinfo/latex2e.texi
263 (latex-mode "[\\a-zA-Z]+" nil (("(latex)Command Index" nil "`" nil)))
264 (emacs-lisp-mode
265 "[^][ ()\n\t.\"'#]+" nil
266 (("(elisp)Index"
267 (lambda (item)
268 (if (string-match "[^ ]+" item) ;First word
269 (match-string 0 item)))
270 "" "")
271 ("(emacs)Command Index"
272 (lambda (item)
273 (if (string-match "[^ ]+" item) ;First word
274 (match-string 0 item)))
275 "" ""))))
276 "*Alist of help specifications for symbol names.
277 See the documentation of the variable `info-lookup-alist' for more details.")
278 232
279 (defvar info-lookup-file-alist 233 (defvar info-lookup-file-alist
280 '((c-mode 234 '((c-mode
281 "[_a-zA-Z0-9./+-]+" nil 235 "[_a-zA-Z0-9./+-]+" nil
282 (("(libc)File Index")))) 236 (("(libc)File Index"))))
592 (if (not mode) 546 (if (not mode)
593 (setq mode (or info-lookup-mode major-mode))) 547 (setq mode (or info-lookup-mode major-mode)))
594 (or (info-lookup->mode-value topic mode) 548 (or (info-lookup->mode-value topic mode)
595 (error "No %s completion available for `%s'" topic mode)) 549 (error "No %s completion available for `%s'" topic mode))
596 (let ((modes (info-lookup->all-modes topic mode)) 550 (let ((modes (info-lookup->all-modes topic mode))
597 (start (point)) 551 (completions (info-lookup->completions topic mode))
598 (completion-list (info-lookup->completions topic mode)) 552 (completion-ignore-case (info-lookup->ignore-case topic mode))
599 try completion) 553 (start (point)) try completion)
600 (while (and (not try) modes) 554 (while (and (not try) modes)
601 (setq mode (car modes) 555 (setq mode (car modes)
602 modes (cdr modes) 556 modes (cdr modes)
603 try (info-lookup-guess-default* topic mode)) 557 try (info-lookup-guess-default* topic mode))
604 (goto-char start)) 558 (goto-char start))
605 (and (not try) 559 (and (not try)
606 (error "Found no %s to complete" topic)) 560 (error "Found no %S to complete" topic))
607 (setq completion (try-completion try completion-list)) 561 (setq completion (try-completion try completions))
608 (cond ((not completion) 562 (cond ((not completion)
609 (message "No %s match" topic) 563 (ding)
610 (ding)) 564 (message "No match"))
611 ((stringp completion) 565 ((stringp completion)
566 (or (assoc completion completions)
567 (setq completion (completing-read
568 (format "Complete %S: " topic)
569 completions nil t completion
570 info-lookup-history)))
612 (delete-region (- start (length try)) start) 571 (delete-region (- start (length try)) start)
613 (insert completion) 572 (insert completion))
614 (if (or (string-equal try completion) 573 (t
615 (and (boundp 'info-look-completion) 574 (message "%s is complete" (capitalize (prin1-to-string topic)))))))
616 info-look-completion 575
617 (= (point) (car info-look-completion)) 576
618 (equal completion (car (cdr info-look-completion))))) 577 ;;; Info-lookup minor mode.
619 ;; Show completion list 578
620 (let ((list (all-completions completion completion-list))) 579 (defvar info-lookup-minor-mode nil
621 (with-output-to-temp-buffer "*Completions*" 580 "Non-`nil' enables Info-lookup mode.")
622 (display-completion-list list)) 581 (make-variable-buffer-local 'info-lookup-minor-mode)
623 (if (member completion list) 582
624 (message "Complete but not unique")))) 583 (defvar info-lookup-minor-mode-string " Info"
625 (setq info-look-completion (list (point) completion))) 584 "Indicator included in the mode line when in Info-lookup mode.")
626 (t 585
627 (message "%s is complete" topic))))) 586 (or (assq 'info-lookup-minor-mode minor-mode-alist)
628 587 (setq minor-mode-alist (cons '(info-lookup-minor-mode
629 (defvar info-look-completion nil 588 info-lookup-minor-mode-string)
630 "info-look cache for last completion and point to display completion or not") 589 minor-mode-alist)))
631 (make-variable-buffer-local 'info-look-completion) 590
632 591 (defvar info-lookup-minor-mode-map (make-sparse-keymap)
592 "Minor mode map for Info-lookup mode.")
593
594 (or (assq 'info-lookup-minor-mode minor-mode-map-alist)
595 (setq minor-mode-map-alist (cons (cons 'info-lookup-minor-mode
596 info-lookup-minor-mode-map)
597 minor-mode-map-alist)))
598
599 ;;;### autoload
600 (defun info-lookup-minor-mode (&optional arg)
601 "Minor mode for looking up the documentation of a symbol or file.
602 Special commands:
603
604 \\{info-lookup-minor-mode-map}"
605 (interactive "P")
606 (setq info-lookup-minor-mode (if (null arg)
607 (not info-lookup-minor-mode)
608 (> (prefix-numeric-value arg) 0)))
609 (set-buffer-modified-p (buffer-modified-p)))
610
611 (define-key info-lookup-minor-mode-map
612 "\C-c\C-hf" 'info-lookup-symbol) ; Describe function.
613 (define-key info-lookup-minor-mode-map
614 "\C-c\C-hv" 'info-lookup-symbol) ; Describe variable.
615 (define-key info-lookup-minor-mode-map
616 "\C-c\C-ht" 'info-lookup-symbol) ; Describe type.
617 (define-key info-lookup-minor-mode-map
618 "\C-c\C-hp" 'info-lookup-file) ; Describe program.
619 (define-key info-lookup-minor-mode-map
620 "\C-c\C-if" 'info-complete-symbol) ; Complete function.
621 (define-key info-lookup-minor-mode-map
622 "\C-c\C-iv" 'info-complete-symbol) ; Complete variable.
623 (define-key info-lookup-minor-mode-map
624 "\C-c\C-it" 'info-complete-symbol) ; Complete type.
625 (define-key info-lookup-minor-mode-map
626 "\C-c\C-ip" 'info-complete-file) ; Complete program.
627
628 ;;;### autoload
629 (defun turn-on-info-lookup ()
630 "Unconditionally turn on Info-lookup mode."
631 (info-lookup-minor-mode 1))
632
633
634 ;;; Initialize some common modes.
635
636 (info-lookup-maybe-add-help
637 :mode 'c-mode :topic 'symbol
638 :regexp "\\(struct \\|union \\|enum \\)?[_a-zA-Z][_a-zA-Z0-9]*"
639 :doc-spec '(("(libc)Function Index" nil
640 "^[ \t]+- \\(Function\\|Macro\\): .*\\<" "\\>")
641 ("(libc)Variable Index" nil
642 "^[ \t]+- \\(Variable\\|Macro\\): .*\\<" "\\>")
643 ("(libc)Type Index" nil
644 "^[ \t]+- Data Type: \\<" "\\>")
645 ("(termcap)Var Index" nil
646 "^[ \t]*`" "'"))
647 :parse-rule 'info-lookup-guess-c-symbol)
648
649 (info-lookup-maybe-add-help
650 :mode 'c-mode :topic 'file
651 :regexp "[_a-zA-Z0-9./+-]+"
652 :doc-spec '(("(libc)File Index")))
653
654 (info-lookup-maybe-add-help
655 :mode 'bison-mode
656 :regexp "[:;|]\\|%\\([%{}]\\|[_a-z]+\\)\\|YY[_A-Z]+\\|yy[_a-z]+"
657 :doc-spec '(("(bison)Index" nil
658 "`" "'"))
659 :parse-rule "[:;|]\\|%\\([%{}]\\|[_a-zA-Z][_a-zA-Z0-9]*\\)"
660 :other-modes '(c-mode))
661
662 (info-lookup-maybe-add-help
663 :mode 'makefile-mode
664 :regexp "\\$[^({]\\|\\.[_A-Z]*\\|[_a-zA-Z][_a-zA-Z0-9-]*"
665 :doc-spec '(("(make)Name Index" nil
666 "^[ \t]*`" "'"))
667 :parse-rule "\\$[^({]\\|\\.[_A-Z]*\\|[_a-zA-Z0-9-]+")
668
669 (info-lookup-maybe-add-help
670 :mode 'texinfo-mode
671 :regexp "@\\([a-zA-Z]+\\|[^a-zA-Z]\\)"
672 :doc-spec '(("(texinfo)Command and Variable Index"
673 ;; Ignore Emacs commands and prepend a `@'.
674 (lambda (item)
675 (if (string-match "^\\([a-zA-Z]+\\|[^a-zA-Z]\\)\\( .*\\)?$" item)
676 (concat "@" (match-string 1 item))))
677 "`" "'")))
678
679 (info-lookup-maybe-add-help
680 :mode 'm4-mode
681 :regexp "[_a-zA-Z][_a-zA-Z0-9]*"
682 :doc-spec '(("(m4)Macro index"))
683 :parse-rule "[_a-zA-Z0-9]+")
684
685 (info-lookup-maybe-add-help
686 :mode 'autoconf-mode
687 :regexp "A[CM]_[_A-Z0-9]+"
688 :doc-spec '(("(autoconf)Macro Index" "AC_"
689 "^[ \t]+- \\(Macro\\|Variable\\): .*\\<" "\\>")
690 ("(automake)Index" nil
691 "^[ \t]*`" "'"))
692 ;; Autoconf symbols are M4 macros. Thus use M4's parser.
693 :parse-rule 'ignore
694 :other-modes '(m4-mode))
695
696 (info-lookup-maybe-add-help
697 :mode 'awk-mode
698 :regexp "[_a-zA-Z]+"
699 :doc-spec '(("(gawk)Index"
700 (lambda (item)
701 (let ((case-fold-search nil))
702 (cond
703 ;; `BEGIN' and `END'.
704 ((string-match "^\\([A-Z]+\\) special pattern\\b" item)
705 (match-string 1 item))
706 ;; `if', `while', `do', ...
707 ((string-match "^\\([a-z]+\\) statement\\b" item)
708 (if (not (string-equal (match-string 1 item) "control"))
709 (match-string 1 item)))
710 ;; `NR', `NF', ...
711 ((string-match "^[A-Z]+$" item)
712 item)
713 ;; Built-in functions (matches to many entries).
714 ((string-match "^[a-z]+$" item)
715 item))))
716 "`" "\\([ \t]*([^)]*)\\)?'")))
717
718 (info-lookup-maybe-add-help
719 :mode 'perl-mode
720 :regexp "[$@%][^a-zA-Z]\\|\\$\\^[A-Z]\\|[$@%]?[a-zA-Z][_a-zA-Z0-9]*"
721 :doc-spec '(("(perl5)Function Index"
722 (lambda (item)
723 (if (string-match "^\\([a-zA-Z0-9]+\\)" item)
724 (match-string 1 item)))
725 "^" "\\b")
726 ("(perl5)Variable Index"
727 (lambda (item)
728 ;; Work around bad formatted array variables.
729 (let ((sym (cond ((or (string-match "^\\$\\(.\\|@@\\)$" item)
730 (string-match "^\\$\\^[A-Z]$" item))
731 item)
732 ((string-match
733 "^\\([$%@]\\|@@\\)?[_a-zA-Z0-9]+" item)
734 (match-string 0 item))
735 (t ""))))
736 (if (string-match "@@" sym)
737 (setq sym (concat (substring sym 0 (match-beginning 0))
738 (substring sym (1- (match-end 0))))))
739 (if (string-equal sym "") nil sym)))
740 "^" "\\b"))
741 :parse-rule "[$@%]?\\([_a-zA-Z0-9]+\\|[^a-zA-Z]\\)")
742
743 (info-lookup-maybe-add-help
744 :mode 'latex-mode
745 :regexp "\\\\\\([a-zA-Z]+\\|[^a-zA-Z]\\)"
746 :doc-spec '(("(latex2e)Command Index" nil
747 "`" "\\({[^}]*}\\)?'")))
748
749 (info-lookup-maybe-add-help
750 :mode 'emacs-lisp-mode
751 :regexp "[^()' \t\n]+"
752 :doc-spec '(("(emacs)Command Index")
753 ("(emacs)Variable Index")))
754
755 (info-lookup-maybe-add-help
756 :mode 'lisp-interaction-mode
757 :regexp "[^()' \t\n]+"
758 :parse-rule 'ignore
759 :other-modes '(emacs-lisp-mode))
760
761
633 (provide 'info-look) 762 (provide 'info-look)
634 763
635 ;;; info-look.el ends here 764 ;;; info-look.el ends here