annotate lisp/imenu.el @ 51151:fe11e703042b

Summary: MIME support added for e-mail processing that skips encoded regions. Allow user to skip saving Fcc messages with large attachments. Fixed region skipping bug with multi-line comments - e.g. tex $ regions spanning multiple lines. Added support for postscript and uuencoded regions. Redundant dictionary file names purged. Dictionary definition field name changed from "Character Set" to "Coding System". Fixed bug in reloading dictionaries. Modified headers to reflect new version. XEmacs menu now adds customize item. (ispell-check-version): No longer an aliased function. Returns library path if not called interactively. Variable `temporary-file-directory' protected if not loaded. (check-ispell-version): Now the alias for `ispell-check-version'. (ispell-message-fcc-skip): New variable that determines if and when to query about saving Fcc copy of message if an attachment is large. (ispell-skip-html): Declared buffer-local. (ispell-local-dictionary-alist): Docstring expanded. Tag name changed from "Character Set" to "Coding System". (ispell-dictionary-alist-1): Removed redundant command-line option to load brasileiro, british, and castellano dictionary files. (ispell-dictionary-alist-2): Removed redundant command-line option to load czech dictionary file. (ispell-dictionary-alist-3): Moved francais-tex here. (ispell-dictionary-alist-4): Removed german and german8 dictionaries. The deutsch ones are the correct definitions. `nederlands' and `nederlands8' dictionaries moved here. (ispell-dictionary-alist-5): `polish' and `portugues' dictionaries moved here. Removed redundant command-line option to `norsk' and `portugues'. (ispell-dictionary-alist-6): Removed redundant command-line option to load `russian' and `slovak' dictionary files. (ispell-dictionary-alist): Tag name changed from "Character Set" to "Coding System". (ispell-version): Updated to 3.6. (ispell-library-directory): Calls non-deprecated function. (ispell-valid-dictionary-list): New function returning all valid dictionaries on machine. (ispell-checking-message): Documentation string improved. (ispell-skip-region-alist): Added uuencoded and postscript region skipping. Improved http/e-mail/file regexp to not match `/.\w'. (ispell-html-skip-alists): New variable for html region support. (ispell-send-string): Removed redundant xemacs check. (ispell-word): Fix spelling error in documentation string, added extent information to support highlighting in ispell-minor-mode. (ispell-command-loop): Disable horizontal scrollbar in XEmacs choices buffer. (ispell-show-choices): Directly select `choices-window'. (ispell-help): Use default buffer size for electric help. (ispell-adjusted-window-height): Correct for xemacs detection. (ispell-start-process): Don't double specify dictionary file name. (ispell-init-process): Set `ispell-library-path' each call. (ispell-change-dictionary): Now only completes valid dictionaries. (ispell-region): Add support for MIME region skipping and Fcc message query for large attachments. (ispell-begin-skip-region-regexp): Add documentation string. Added message support and cleaned up code for generic and html regions. (ispell-begin-skip-region): Function is now requires alist argument. (ispell-begin-tex-skip-regexp): Added comments and support improved html and message regions. (ispell-skip-region-list): New function for MIME and region skipping. (ispell-tex-arg-end): Add documentation string. (ispell-ignore-fcc): New function to query saving Fcc message. (ispell-skip-region): Calculate alist for key match dynamically, html skipping pushed to alists. (ispell-get-line): Add support for multi-line comment regions. (ispell): Check that variables to continue spelling are bound. (ispell-message-text-end): Postscript and uuencoded regions now supported as MIME regions, rather than as end-of-message region. (ispell-mime-multipartp): New function supporting MIME. (ispell-mime-skip-part): New function supporting MIME. (ispell-message): Add MIME support. (ispell-buffer-local-parsing): Variable `ispell-skip-html' now local. (ispell-buffer-local-dict): Fixed bug for detecting and reloading new dictionary.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 22 May 2003 21:34:00 +0000
parents 4efabfff9aa1
children 695cf19ef79e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 36637
diff changeset
1 ;;; imenu.el --- framework for mode-specific buffer indexes
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
51024
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
3 ;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 2003 Free Software Foundation, Inc.
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 ;; Author: Ake Stenhoff <etxaksf@aom.ericsson.se>
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 ;; Lars Lindberg <lli@sypro.cap.se>
17970
720d1f98ae42 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 17677
diff changeset
7 ;; Maintainer: FSF
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; Created: 8 Feb 1994
22250
a77d473867b8 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21959
diff changeset
9 ;; Keywords: tools convenience
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14139
diff changeset
10
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14139
diff changeset
11 ;; This file is part of GNU Emacs.
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14139
diff changeset
12
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14139
diff changeset
13 ;; GNU Emacs is free software; you can redistribute it and/or modify
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; the Free Software Foundation; either version 2, or (at your option)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; any later version.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14139
diff changeset
17
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14139
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; GNU General Public License for more details.
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14139
diff changeset
22
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14139
diff changeset
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14139
diff changeset
25 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14139
diff changeset
26 ;; Boston, MA 02111-1307, USA.
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ;;; Commentary:
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14139
diff changeset
29
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 ;; Purpose of this package:
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ;; To present a framework for mode-specific buffer indexes.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ;; A buffer index is an alist of names and buffer positions.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 ;; For instance all functions in a C-file and their positions.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 ;;
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
35 ;; It is documented in the Emacs Lisp manual.
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
36 ;;
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 ;; How it works:
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 ;; A mode-specific function is called to generate the index. It is
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 ;; then presented to the user, who can choose from this index.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 ;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 ;; The package comes with a set of example functions for how to
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 ;; utilize this package.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
45 ;; There are *examples* for index gathering functions/regular
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
46 ;; expressions for C/C++ and Lisp/Emacs Lisp but it is easy to
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
47 ;; customize for other modes. A function for jumping to the chosen
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
48 ;; index position is also supplied.
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
50 ;;; History:
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
51 ;; Thanks go to
6241
49538e6c482e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 6230
diff changeset
52 ;; [simon] - Simon Leinen simon@lia.di.epfl.ch
49538e6c482e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 6230
diff changeset
53 ;; [dean] - Dean Andrews ada@unison.com
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
54 ;; [alon] - Alon Albert al@mercury.co.il
9176
5646f9ac8ec3 (imenu--cleanup): Changed 'mapc' to 'mapcar'.
Richard M. Stallman <rms@gnu.org>
parents: 8408
diff changeset
55 ;; [greg] - Greg Thompson gregt@porsche.visix.COM
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
56 ;; [wolfgang] - Wolfgang Bangerth zcg51122@rpool1.rus.uni-stuttgart.de
10072
a7b70665c937 (imenu): Widen temporary before scan the file.
Richard M. Stallman <rms@gnu.org>
parents: 9176
diff changeset
57 ;; [kai] - Kai Grossjohann grossjoh@linus.informatik.uni-dortmund.de
10221
34b66bff7aec (imenu-always-use-completion-buffer-p): A value of
Richard M. Stallman <rms@gnu.org>
parents: 10093
diff changeset
58 ;; [david] - David M. Smith dsmith@stats.adelaide.edu.au
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
59 ;; [christian] - Christian Egli Christian.Egli@hcsd.hac.com
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
60 ;; [karl] - Karl Fogel kfogel@floss.life.uiuc.edu
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
61
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 36637
diff changeset
62 ;;; Code:
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 14139
diff changeset
63
6909
9e59751db725 Require cl only at compile time.
Richard M. Stallman <rms@gnu.org>
parents: 6241
diff changeset
64 (eval-when-compile (require 'cl))
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67 ;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;;; Customizable variables
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
71
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
72 (defgroup imenu nil
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
73 "Mode-specific buffer indexes."
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
74 :group 'matching
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
75 :group 'frames
22250
a77d473867b8 *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21959
diff changeset
76 :group 'convenience
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
77 :link '(custom-manual "(elisp)Imenu"))
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
78
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
79 (defcustom imenu-use-markers t
17307
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
80 "*Non-nil means use markers instead of integers for Imenu buffer positions.
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
81
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
82 Setting this to nil makes Imenu work a little faster but editing the
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
83 buffer will make the generated index positions wrong.
17307
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
84
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
85 This might not yet be honored by all index-building functions."
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
86 :type 'boolean
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
87 :group 'imenu)
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
88
17307
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
89
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
90 (defcustom imenu-max-item-length 60
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
91 "*If a number, truncate Imenu entries to that length."
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
92 :type '(choice integer
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
93 (const :tag "Unlimited"))
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
94 :group 'imenu)
17307
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
95
17677
3ab08563e855 (imenu-auto-rescan): Fix typo.
Richard M. Stallman <rms@gnu.org>
parents: 17634
diff changeset
96 (defcustom imenu-auto-rescan nil
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
97 "*Non-nil means Imenu should always rescan the buffers."
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
98 :type 'boolean
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
99 :group 'imenu)
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
100
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
101 (defcustom imenu-auto-rescan-maxout 60000
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
102 "*Imenu auto-rescan is disabled in buffers larger than this size (in bytes).
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
103 This variable is buffer-local."
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
104 :type 'integer
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
105 :group 'imenu)
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106
46894
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
107 (defvar imenu-always-use-completion-buffer-p nil)
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
108 (make-obsolete-variable 'imenu-always-use-completion-buffer-p
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
109 'imenu-use-popup-menu "21.4")
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110
46894
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
111 (defcustom imenu-use-popup-menu
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
112 (if imenu-always-use-completion-buffer-p
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
113 (not (eq imenu-always-use-completion-buffer-p 'never))
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
114 'on-mouse)
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
115 "Use a popup menu rather than a minibuffer prompt.
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
116 If nil, always use a minibuffer prompt.
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
117 If t, always use a popup menu,
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
118 If `on-mouse' use a popup menu when `imenu' was invoked with the mouse."
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
119 :type '(choice (const :tag "On Mouse" on-mouse)
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
120 (const :tag "Never" nil)
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
121 (other :tag "Always" t)))
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
122
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
123 (defcustom imenu-eager-completion-buffer
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
124 (not (eq imenu-always-use-completion-buffer-p 'never))
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
125 "If non-nil, eagerly popup the completion buffer."
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
126 :type 'boolean)
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127
25810
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
128 (defcustom imenu-after-jump-hook nil
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
129 "*Hooks called after jumping to a place in the buffer.
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
130
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
131 Useful things to use here include `reposition-window', `recenter', and
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
132 \(lambda () (recenter 0)) to show at top of screen."
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
133 :type 'hook
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
134 :group 'imenu)
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
135
22798
434ac4a14be3 (imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 22628
diff changeset
136 ;;;###autoload
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
137 (defcustom imenu-sort-function nil
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 "*The function to use for sorting the index mouse-menu.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 Affects only the mouse index menu.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 Set this to nil if you don't want any sorting (faster).
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 The items in the menu are then presented in the order they were found
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 in the buffer.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145
6909
9e59751db725 Require cl only at compile time.
Richard M. Stallman <rms@gnu.org>
parents: 6241
diff changeset
146 Set it to `imenu--sort-by-name' if you want alphabetic sorting.
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147
23358
3812bb3ae006 (imenu--generic-function): Sort each submenu by position.
Karl Heuer <kwzh@gnu.org>
parents: 22798
diff changeset
148 The function should take two arguments and return t if the first
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 element should come before the second. The arguments are cons cells;
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
150 \(NAME . POSITION). Look at `imenu--sort-by-name' for an example."
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
151 :type '(choice (const :tag "No sorting" nil)
24233
5e43fcb42e81 (imenu-sort-function): Fix custom type.
Richard M. Stallman <rms@gnu.org>
parents: 23358
diff changeset
152 (const :tag "Sort by name" imenu--sort-by-name)
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
153 (function :tag "Another function"))
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
154 :group 'imenu)
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
156 (defcustom imenu-max-items 25
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
157 "*Maximum number of elements in a mouse menu for Imenu."
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
158 :type 'integer
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
159 :group 'imenu)
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
161 (defcustom imenu-scanning-message "Scanning buffer for index (%3d%%)"
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 "*Progress message during the index scanning of the buffer.
16460
4d7d18a39871 (imenu-scanning-message): Use ellipsis.
Karl Heuer <kwzh@gnu.org>
parents: 16382
diff changeset
163 If non-nil, user gets a message during the scanning of the buffer.
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 Relevant only if the mode-specific function that creates the buffer
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
166 index use `imenu-progress-message', and not useful if that is fast, in
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
167 which case you might as well set this to nil."
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
168 :type '(choice string
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
169 (const :tag "None" nil))
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
170 :group 'imenu)
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171
22628
d5a086ed37f5 (imenu-space-replacement): Use `.'.
Richard M. Stallman <rms@gnu.org>
parents: 22586
diff changeset
172 (defcustom imenu-space-replacement "."
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 "*The replacement string for spaces in index names.
22628
d5a086ed37f5 (imenu-space-replacement): Use `.'.
Richard M. Stallman <rms@gnu.org>
parents: 22586
diff changeset
174 Used when presenting the index in a completion buffer to make the
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
175 names work as tokens."
46894
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
176 :type '(choice string (const nil))
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
177 :group 'imenu)
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
179 (defcustom imenu-level-separator ":"
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 "*The separator between index names of different levels.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 Used for making mouse-menu titles and for flattening nested indexes
17634
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
182 with name concatenation."
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
183 :type 'string
247c2a11843d Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 17307
diff changeset
184 :group 'imenu)
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
186 ;;;###autoload
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
187 (defvar imenu-generic-expression nil
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
188 "The regex pattern to use for creating a buffer index.
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
189
16698
13920eac02e0 (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16612
diff changeset
190 If non-nil this pattern is passed to `imenu--generic-function'
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
191 to create a buffer index.
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
192
16271
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
193 The value should be an alist with elements that look like this:
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
194 (MENU-TITLE REGEXP INDEX)
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
195 or like this:
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
196 (MENU-TITLE REGEXP INDEX FUNCTION ARGUMENTS...)
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
197 with zero or more ARGUMENTS. The former format creates a simple element in
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
198 the index alist when it matches; the latter creates a special element
29552
4c89037af077 (imenu-generic-expression): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29078
diff changeset
199 of the form (NAME POSITION-MARKER FUNCTION ARGUMENTS...)
4c89037af077 (imenu-generic-expression): Docstring fix.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 29078
diff changeset
200 with FUNCTION and ARGUMENTS copied from `imenu-generic-expression'.
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
201
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
202 MENU-TITLE is a string used as the title for the submenu or nil if the
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
203 entries are not nested.
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
204
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
205 REGEXP is a regexp that should match a construct in the buffer that is
12664
ce1cae301efe (imenu--history-list): Don't make this buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 12635
diff changeset
206 to be displayed in the menu; i.e., function or variable definitions,
ce1cae301efe (imenu--history-list): Don't make this buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 12635
diff changeset
207 etc. It contains a substring which is the name to appear in the
ce1cae301efe (imenu--history-list): Don't make this buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 12635
diff changeset
208 menu. See the info section on Regexps for more information.
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
209
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
210 INDEX points to the substring in REGEXP that contains the name (of the
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
211 function, variable or type) that is to appear in the menu.
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
212
20769
aa3481dd4d84 (imenu-case-fold-search): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20249
diff changeset
213 The variable is buffer-local.
aa3481dd4d84 (imenu-case-fold-search): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20249
diff changeset
214
aa3481dd4d84 (imenu-case-fold-search): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20249
diff changeset
215 The variable `imenu-case-fold-search' determines whether or not the
36013
fc00137bf0bf (imenu-generic-expression): Doc fix.
Dave Love <fx@gnu.org>
parents: 35688
diff changeset
216 regexp matches are case sensitive, and `imenu-syntax-alist' can be
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
217 used to alter the syntax table for the search.
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
218
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
219 For example, see the value of `fortran-imenu-generic-expression' used by
36013
fc00137bf0bf (imenu-generic-expression): Doc fix.
Dave Love <fx@gnu.org>
parents: 35688
diff changeset
220 `fortran-mode' with `imenu-syntax-alist' set locally to give the
fc00137bf0bf (imenu-generic-expression): Doc fix.
Dave Love <fx@gnu.org>
parents: 35688
diff changeset
221 characters which normally have \"symbol\" syntax \"word\" syntax
fc00137bf0bf (imenu-generic-expression): Doc fix.
Dave Love <fx@gnu.org>
parents: 35688
diff changeset
222 during matching.")
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
223
14816
485422b900d3 (imenu-generic-expression): Autoload the make-variable-buffer-local call.
Richard M. Stallman <rms@gnu.org>
parents: 14798
diff changeset
224 ;;;###autoload
12664
ce1cae301efe (imenu--history-list): Don't make this buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 12635
diff changeset
225 (make-variable-buffer-local 'imenu-generic-expression)
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
226
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 ;;;; Hooks
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228
22798
434ac4a14be3 (imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 22628
diff changeset
229 ;;;###autoload
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 (defvar imenu-create-index-function 'imenu-default-create-index-function
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 "The function to use for creating a buffer index.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 It should be a function that takes no arguments and returns an index
16271
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
234 of the current buffer as an alist.
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
235
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
236 Simple elements in the alist look like (INDEX-NAME . INDEX-POSITION).
20857
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
237 Special elements look like (INDEX-NAME INDEX-POSITION FUNCTION ARGUMENTS...).
16271
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
238 A nested sub-alist element looks like (INDEX-NAME SUB-ALIST).
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
239 The function `imenu--subalist-p' tests an element and returns t
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
240 if it is a sub-alist.
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241
6909
9e59751db725 Require cl only at compile time.
Richard M. Stallman <rms@gnu.org>
parents: 6241
diff changeset
242 This function is called within a `save-excursion'.
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 The variable is buffer-local.")
22798
434ac4a14be3 (imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 22628
diff changeset
245 ;;;###autoload
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 (make-variable-buffer-local 'imenu-create-index-function)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247
22798
434ac4a14be3 (imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 22628
diff changeset
248 ;;;###autoload
7319
cd73ba498964 (imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents: 6909
diff changeset
249 (defvar imenu-prev-index-position-function 'beginning-of-defun
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 "Function for finding the next index position.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251
6909
9e59751db725 Require cl only at compile time.
Richard M. Stallman <rms@gnu.org>
parents: 6241
diff changeset
252 If `imenu-create-index-function' is set to
9e59751db725 Require cl only at compile time.
Richard M. Stallman <rms@gnu.org>
parents: 6241
diff changeset
253 `imenu-default-create-index-function', then you must set this variable
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 to a function that will find the next index, looking backwards in the
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 file.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 The function should leave point at the place to be connected to the
20857
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
258 index and it should return nil when it doesn't find another index.
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
259
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
260 This variable is local in all buffers.")
22798
434ac4a14be3 (imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 22628
diff changeset
261 ;;;###autoload
7319
cd73ba498964 (imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents: 6909
diff changeset
262 (make-variable-buffer-local 'imenu-prev-index-position-function)
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263
22798
434ac4a14be3 (imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 22628
diff changeset
264 ;;;###autoload
7319
cd73ba498964 (imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents: 6909
diff changeset
265 (defvar imenu-extract-index-name-function nil
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
266 "Function for extracting the index item name, given a position.
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267
20857
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
268 This function is called after `imenu-prev-index-position-function'
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
269 finds a position for an index item, with point at that position.
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
270 It should return the name for that index item.
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
271
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
272 This variable is local in all buffers.")
22798
434ac4a14be3 (imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 22628
diff changeset
273 ;;;###autoload
7319
cd73ba498964 (imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents: 6909
diff changeset
274 (make-variable-buffer-local 'imenu-extract-index-name-function)
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275
22798
434ac4a14be3 (imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 22628
diff changeset
276 ;;;###autoload
25810
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
277 (defvar imenu-name-lookup-function nil
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
278 "Function to compare string with index item.
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
279
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
280 This function will be called with two strings, and should return
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
281 non-nil if they match.
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
282
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
283 If nil, comparison is done with `string='.
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
284 Set this to some other function for more advanced comparisons,
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
285 such as \"begins with\" or \"name matches and number of
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
286 arguments match\".
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
287
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
288 This variable is local in all buffers.")
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
289 ;;;###autoload
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
290 (make-variable-buffer-local 'imenu-name-lookup-function)
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
291
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
292 ;;;###autoload
17229
b48a8dd2d8ce (imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents: 16698
diff changeset
293 (defvar imenu-default-goto-function 'imenu-default-goto-function
b48a8dd2d8ce (imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents: 16698
diff changeset
294 "The default function called when selecting an Imenu item.
b48a8dd2d8ce (imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents: 16698
diff changeset
295 The function in this variable is called when selecting a normal index-item.")
22798
434ac4a14be3 (imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 22628
diff changeset
296 ;;;###autoload
17229
b48a8dd2d8ce (imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents: 16698
diff changeset
297 (make-variable-buffer-local 'imenu-default-goto-function)
b48a8dd2d8ce (imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents: 16698
diff changeset
298
b48a8dd2d8ce (imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents: 16698
diff changeset
299
16271
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
300 (defun imenu--subalist-p (item)
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
301 (and (consp (cdr item)) (listp (cadr item))
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
302 (not (eq (car (cadr item)) 'lambda))))
16271
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
303
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
304 ;; Macro to display a progress message.
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
305 ;; RELPOS is the relative position to display.
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
306 ;; If RELPOS is nil, then the relative position in the buffer
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
307 ;; is calculated.
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
308 ;; PREVPOS is the variable in which we store the last position displayed.
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
309 (defmacro imenu-progress-message (prevpos &optional relpos reverse)
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
310 `(and
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
311 imenu-scanning-message
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
312 (let ((pos ,(if relpos
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
313 relpos
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
314 `(imenu--relative-position ,reverse))))
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
315 (if ,(if relpos t
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
316 `(> pos (+ 5 ,prevpos)))
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
317 (progn
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
318 (message imenu-scanning-message pos)
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
319 (setq ,prevpos pos))))))
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
320
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
321
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
322 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
323 ;;;;
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
324 ;;;; Some examples of functions utilizing the framework of this
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
325 ;;;; package.
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
326 ;;;;
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
327 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
328
12707
06608e9272b5 (imenu-generic-lisp-expression)
Karl Heuer <kwzh@gnu.org>
parents: 12664
diff changeset
329 ;; Return the current/previous sexp and the location of the sexp (its
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
330 ;; beginning) without moving the point.
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
331 (defun imenu-example--name-and-position ()
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
332 (save-excursion
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
333 (forward-sexp -1)
17307
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
334 ;; [ydi] modified for imenu-use-markers
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
335 (let ((beg (if imenu-use-markers (point-marker) (point)))
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
336 (end (progn (forward-sexp) (point))))
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
337 (cons (buffer-substring beg end)
17307
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
338 beg))))
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
339
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
340 ;;;
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
341 ;;; Lisp
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
342 ;;;
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
343
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
344 (defun imenu-example--lisp-extract-index-name ()
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
345 ;; Example of a candidate for `imenu-extract-index-name-function'.
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
346 ;; This will generate a flat index of definitions in a lisp file.
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
347 (save-match-data
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
348 (and (looking-at "(def")
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
349 (condition-case nil
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
350 (progn
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
351 (down-list 1)
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
352 (forward-sexp 2)
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
353 (let ((beg (point))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
354 (end (progn (forward-sexp -1) (point))))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
355 (buffer-substring beg end)))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
356 (error nil)))))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
357
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
358 (defun imenu-example--create-lisp-index ()
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
359 ;; Example of a candidate for `imenu-create-index-function'.
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
360 ;; It will generate a nested index of definitions.
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
361 (let ((index-alist '())
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
362 (index-var-alist '())
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
363 (index-type-alist '())
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
364 (index-unknown-alist '())
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
365 prev-pos)
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
366 (goto-char (point-max))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
367 (imenu-progress-message prev-pos 0)
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
368 ;; Search for the function
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
369 (while (beginning-of-defun)
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
370 (imenu-progress-message prev-pos nil t)
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
371 (save-match-data
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
372 (and (looking-at "(def")
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
373 (save-excursion
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
374 (down-list 1)
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
375 (cond
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
376 ((looking-at "def\\(var\\|const\\)")
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
377 (forward-sexp 2)
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
378 (push (imenu-example--name-and-position)
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
379 index-var-alist))
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
380 ((looking-at "def\\(un\\|subst\\|macro\\|advice\\)")
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
381 (forward-sexp 2)
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
382 (push (imenu-example--name-and-position)
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
383 index-alist))
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
384 ((looking-at "def\\(type\\|struct\\|class\\|ine-condition\\)")
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
385 (forward-sexp 2)
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
386 (if (= (char-after (1- (point))) ?\))
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
387 (progn
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
388 (forward-sexp -1)
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
389 (down-list 1)
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
390 (forward-sexp 1)))
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
391 (push (imenu-example--name-and-position)
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
392 index-type-alist))
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
393 (t
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
394 (forward-sexp 2)
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
395 (push (imenu-example--name-and-position)
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
396 index-unknown-alist)))))))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
397 (imenu-progress-message prev-pos 100)
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
398 (and index-var-alist
14726
35e1cfdd29a4 (imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents: 14725
diff changeset
399 (push (cons "Variables" index-var-alist)
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
400 index-alist))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
401 (and index-type-alist
14726
35e1cfdd29a4 (imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents: 14725
diff changeset
402 (push (cons "Types" index-type-alist)
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
403 index-alist))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
404 (and index-unknown-alist
14726
35e1cfdd29a4 (imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents: 14725
diff changeset
405 (push (cons "Syntax-unknown" index-unknown-alist)
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
406 index-alist))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
407 index-alist))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
408
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
409 ;; Regular expression to find C functions
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
410 (defvar imenu-example--function-name-regexp-c
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
411 (concat
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
412 "^[a-zA-Z0-9]+[ \t]?" ; type specs; there can be no
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
413 "\\([a-zA-Z0-9_*]+[ \t]+\\)?" ; more than 3 tokens, right?
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
414 "\\([a-zA-Z0-9_*]+[ \t]+\\)?"
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
415 "\\([*&]+[ \t]*\\)?" ; pointer
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
416 "\\([a-zA-Z0-9_*]+\\)[ \t]*(" ; name
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
417 ))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
418
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
419 (defun imenu-example--create-c-index (&optional regexp)
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
420 (let ((index-alist '())
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
421 prev-pos char)
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
422 (goto-char (point-min))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
423 (imenu-progress-message prev-pos 0)
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
424 ;; Search for the function
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
425 (save-match-data
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
426 (while (re-search-forward
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
427 (or regexp imenu-example--function-name-regexp-c)
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
428 nil t)
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
429 (imenu-progress-message prev-pos)
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
430 (backward-up-list 1)
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
431 (save-excursion
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
432 (goto-char (scan-sexps (point) 1))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
433 (setq char (following-char)))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
434 ;; Skip this function name if it is a prototype declaration.
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
435 (if (not (eq char ?\;))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
436 (push (imenu-example--name-and-position) index-alist))))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
437 (imenu-progress-message prev-pos 100)
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
438 (nreverse index-alist)))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
439
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
440
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 ;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 ;;; Internal variables
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 ;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 ;; The item to use in the index for rescanning the buffer.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 (defconst imenu--rescan-item '("*Rescan*" . -99))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 ;; The latest buffer index.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 ;; Buffer local.
20857
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
452 (defvar imenu--index-alist nil
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
453 "The buffer index computed for this buffer in Imenu.
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
454 Simple elements in the alist look like (INDEX-NAME . INDEX-POSITION).
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
455 Special elements look like (INDEX-NAME INDEX-POSITION FUNCTION ARGUMENTS...).
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
456 A nested sub-alist element looks like (INDEX-NAME SUB-ALIST).
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
457
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
458 This variable is local in all buffers, once set.")
185fa242a2ea (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20770
diff changeset
459
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 (make-variable-buffer-local 'imenu--index-alist)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461
24270
02ae21f066ec (imenu--last-menubar-index-alist): Add doc.
Richard M. Stallman <rms@gnu.org>
parents: 24233
diff changeset
462 (defvar imenu--last-menubar-index-alist nil
02ae21f066ec (imenu--last-menubar-index-alist): Add doc.
Richard M. Stallman <rms@gnu.org>
parents: 24233
diff changeset
463 "The latest buffer index used to update the menu bar menu.")
02ae21f066ec (imenu--last-menubar-index-alist): Add doc.
Richard M. Stallman <rms@gnu.org>
parents: 24233
diff changeset
464
13798
4eac65d000d3 (imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents: 13645
diff changeset
465 (make-variable-buffer-local 'imenu--last-menubar-index-alist)
4eac65d000d3 (imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents: 13645
diff changeset
466
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 ;; History list for 'jump-to-function-in-buffer'.
12664
ce1cae301efe (imenu--history-list): Don't make this buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 12635
diff changeset
468 ;; Making this buffer local caused it not to work!
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 (defvar imenu--history-list nil)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 ;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 ;;; Internal support functions
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 ;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 ;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 ;;; Sort function
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 ;;; Sorts the items depending on their index name.
23358
3812bb3ae006 (imenu--generic-function): Sort each submenu by position.
Karl Heuer <kwzh@gnu.org>
parents: 22798
diff changeset
480 ;;; An item looks like (NAME . POSITION).
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 ;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 (defun imenu--sort-by-name (item1 item2)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 (string-lessp (car item1) (car item2)))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484
23358
3812bb3ae006 (imenu--generic-function): Sort each submenu by position.
Karl Heuer <kwzh@gnu.org>
parents: 22798
diff changeset
485 (defun imenu--sort-by-position (item1 item2)
3812bb3ae006 (imenu--generic-function): Sort each submenu by position.
Karl Heuer <kwzh@gnu.org>
parents: 22798
diff changeset
486 (< (cdr item1) (cdr item2)))
3812bb3ae006 (imenu--generic-function): Sort each submenu by position.
Karl Heuer <kwzh@gnu.org>
parents: 22798
diff changeset
487
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 (defun imenu--relative-position (&optional reverse)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 ;; Support function to calculate relative position in buffer
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 ;; Beginning of buffer is 0 and end of buffer is 100
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 ;; If REVERSE is non-nil then the beginning is 100 and the end is 0.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 (let ((pos (point))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 (total (buffer-size)))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 (and reverse (setq pos (- total pos)))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 (if (> total 50000)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 ;; Avoid overflow from multiplying by 100!
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 (/ (1- pos) (max (/ total 100) 1))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498 (/ (* 100 (1- pos)) (max total 1)))))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 ;; Split LIST into sublists of max length N.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 ;; Example (imenu--split '(1 2 3 4 5 6 7 8) 3)-> '((1 2 3) (4 5 6) (7 8))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 (defun imenu--split (list n)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 (let ((remain list)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 (result '())
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 (sublist '())
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 (i 0))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 (while remain
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 (push (pop remain) sublist)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 (incf i)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 (and (= i n)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 ;; We have finished a sublist
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 (progn (push (nreverse sublist) result)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 (setq i 0)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 (setq sublist '()))))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515 ;; There might be a sublist (if the length of LIST mod n is != 0)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 ;; that has to be added to the result list.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 (and sublist
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 (push (nreverse sublist) result))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 (nreverse result)))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520
14726
35e1cfdd29a4 (imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents: 14725
diff changeset
521 ;;; Split the alist MENULIST into a nested alist, if it is long enough.
35e1cfdd29a4 (imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents: 14725
diff changeset
522 ;;; In any case, add TITLE to the front of the alist.
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 (defun imenu--split-menu (menulist title)
16272
b64d00e44e7b (imenu--split-menu): Keep the rescan item at top level.
Richard M. Stallman <rms@gnu.org>
parents: 16271
diff changeset
524 (let (keep-at-top tail)
b64d00e44e7b (imenu--split-menu): Keep the rescan item at top level.
Richard M. Stallman <rms@gnu.org>
parents: 16271
diff changeset
525 (if (memq imenu--rescan-item menulist)
b64d00e44e7b (imenu--split-menu): Keep the rescan item at top level.
Richard M. Stallman <rms@gnu.org>
parents: 16271
diff changeset
526 (setq keep-at-top (cons imenu--rescan-item nil)
b64d00e44e7b (imenu--split-menu): Keep the rescan item at top level.
Richard M. Stallman <rms@gnu.org>
parents: 16271
diff changeset
527 menulist (delq imenu--rescan-item menulist)))
b64d00e44e7b (imenu--split-menu): Keep the rescan item at top level.
Richard M. Stallman <rms@gnu.org>
parents: 16271
diff changeset
528 (setq tail menulist)
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
529 (dolist (item tail)
51024
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
530 (when (imenu--subalist-p item)
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
531 (push item keep-at-top)
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
532 (setq menulist (delq item menulist))))
16272
b64d00e44e7b (imenu--split-menu): Keep the rescan item at top level.
Richard M. Stallman <rms@gnu.org>
parents: 16271
diff changeset
533 (if imenu-sort-function
51024
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
534 (setq menulist (sort menulist imenu-sort-function)))
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
535 (if (> (length menulist) imenu-max-items)
16272
b64d00e44e7b (imenu--split-menu): Keep the rescan item at top level.
Richard M. Stallman <rms@gnu.org>
parents: 16271
diff changeset
536 (setq menulist
51024
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
537 (mapcar
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
538 (lambda (menu)
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
539 (cons (format "From: %s" (caar menu)) menu))
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
540 (imenu--split menulist imenu-max-items))))
16272
b64d00e44e7b (imenu--split-menu): Keep the rescan item at top level.
Richard M. Stallman <rms@gnu.org>
parents: 16271
diff changeset
541 (cons title
b64d00e44e7b (imenu--split-menu): Keep the rescan item at top level.
Richard M. Stallman <rms@gnu.org>
parents: 16271
diff changeset
542 (nconc (nreverse keep-at-top) menulist))))
14726
35e1cfdd29a4 (imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents: 14725
diff changeset
543
35e1cfdd29a4 (imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents: 14725
diff changeset
544 ;;; Split up each long alist that are nested within ALIST
35e1cfdd29a4 (imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents: 14725
diff changeset
545 ;;; into nested alists.
35e1cfdd29a4 (imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents: 14725
diff changeset
546 (defun imenu--split-submenus (alist)
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
547 (mapcar (function
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
548 (lambda (elt)
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
549 (if (and (consp elt)
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
550 (stringp (car elt))
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
551 (listp (cdr elt)))
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
552 (imenu--split-menu (cdr elt) (car elt))
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
553 elt)))
14726
35e1cfdd29a4 (imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents: 14725
diff changeset
554 alist))
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555
17307
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
556 ;;; Truncate all strings in MENULIST to imenu-max-item-length
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
557 (defun imenu--truncate-items (menulist)
35243
569b2a1b20df (imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents: 32780
diff changeset
558 (mapcar (function
569b2a1b20df (imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents: 32780
diff changeset
559 (lambda (item)
569b2a1b20df (imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents: 32780
diff changeset
560 (cond
569b2a1b20df (imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents: 32780
diff changeset
561 ((consp (cdr item))
569b2a1b20df (imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents: 32780
diff changeset
562 (imenu--truncate-items (cdr item)))
569b2a1b20df (imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents: 32780
diff changeset
563 (t
569b2a1b20df (imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents: 32780
diff changeset
564 ;; truncate if necessary
569b2a1b20df (imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents: 32780
diff changeset
565 (if (and (numberp imenu-max-item-length)
569b2a1b20df (imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents: 32780
diff changeset
566 (> (length (car item)) imenu-max-item-length))
569b2a1b20df (imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents: 32780
diff changeset
567 (setcar item (substring (car item) 0
569b2a1b20df (imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents: 32780
diff changeset
568 imenu-max-item-length)))))))
569b2a1b20df (imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents: 32780
diff changeset
569 menulist))
17307
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
570
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
571
16369
187e7c8aaff5 (imenu--make-index-alist): Add doc string.
Richard M. Stallman <rms@gnu.org>
parents: 16315
diff changeset
572 (defun imenu--make-index-alist (&optional noerror)
187e7c8aaff5 (imenu--make-index-alist): Add doc string.
Richard M. Stallman <rms@gnu.org>
parents: 16315
diff changeset
573 "Create an index-alist for the definitions in the current buffer.
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
575 Report an error if the list is empty unless NOERROR is supplied and
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
576 non-nil.
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
577
16369
187e7c8aaff5 (imenu--make-index-alist): Add doc string.
Richard M. Stallman <rms@gnu.org>
parents: 16315
diff changeset
578 Simple elements in the alist look like (INDEX-NAME . INDEX-POSITION).
187e7c8aaff5 (imenu--make-index-alist): Add doc string.
Richard M. Stallman <rms@gnu.org>
parents: 16315
diff changeset
579 Special elements look like (INDEX-NAME FUNCTION ARGUMENTS...).
187e7c8aaff5 (imenu--make-index-alist): Add doc string.
Richard M. Stallman <rms@gnu.org>
parents: 16315
diff changeset
580 A nested sub-alist element looks like (INDEX-NAME SUB-ALIST).
187e7c8aaff5 (imenu--make-index-alist): Add doc string.
Richard M. Stallman <rms@gnu.org>
parents: 16315
diff changeset
581 The function `imenu--subalist-p' tests an element and returns t
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
582 if it is a sub-alist.
16369
187e7c8aaff5 (imenu--make-index-alist): Add doc string.
Richard M. Stallman <rms@gnu.org>
parents: 16315
diff changeset
583
187e7c8aaff5 (imenu--make-index-alist): Add doc string.
Richard M. Stallman <rms@gnu.org>
parents: 16315
diff changeset
584 There is one simple element with negative POSITION; that's intended
187e7c8aaff5 (imenu--make-index-alist): Add doc string.
Richard M. Stallman <rms@gnu.org>
parents: 16315
diff changeset
585 as a way for the user to ask to recalculate the buffer's index alist."
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
586 (or (and imenu--index-alist
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
587 (or (not imenu-auto-rescan)
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
588 (and imenu-auto-rescan
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
589 (> (buffer-size) imenu-auto-rescan-maxout))))
17307
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
590 ;; Get the index; truncate if necessary
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
591 (progn
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
592 (setq imenu--index-alist
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
593 (save-excursion
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
594 (save-restriction
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
595 (widen)
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
596 (funcall imenu-create-index-function))))
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
597 (imenu--truncate-items imenu--index-alist)))
13798
4eac65d000d3 (imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents: 13645
diff changeset
598 (or imenu--index-alist noerror
4eac65d000d3 (imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents: 13645
diff changeset
599 (error "No items suitable for an index found in this buffer"))
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 (or imenu--index-alist
13798
4eac65d000d3 (imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents: 13645
diff changeset
601 (setq imenu--index-alist (list nil)))
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 ;; Add a rescan option to the index.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 (cons imenu--rescan-item imenu--index-alist))
16315
cca1c6324cab (imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents: 16272
diff changeset
604
8408
109166e311ce (imenu, imenu--flatten-index-alist): Add marker support.
Richard M. Stallman <rms@gnu.org>
parents: 8296
diff changeset
605 ;;; Find all markers in alist and makes
109166e311ce (imenu, imenu--flatten-index-alist): Add marker support.
Richard M. Stallman <rms@gnu.org>
parents: 8296
diff changeset
606 ;;; them point nowhere.
16315
cca1c6324cab (imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents: 16272
diff changeset
607 ;;; The top-level call uses nil as the argument;
cca1c6324cab (imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents: 16272
diff changeset
608 ;;; non-nil arguments are in recursivecalls.
cca1c6324cab (imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents: 16272
diff changeset
609 (defvar imenu--cleanup-seen)
cca1c6324cab (imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents: 16272
diff changeset
610
8408
109166e311ce (imenu, imenu--flatten-index-alist): Add marker support.
Richard M. Stallman <rms@gnu.org>
parents: 8296
diff changeset
611 (defun imenu--cleanup (&optional alist)
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
612 ;; If alist is provided use that list.
16315
cca1c6324cab (imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents: 16272
diff changeset
613 ;; If not, empty the table of lists already seen
cca1c6324cab (imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents: 16272
diff changeset
614 ;; and use imenu--index-alist.
cca1c6324cab (imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents: 16272
diff changeset
615 (if alist
cca1c6324cab (imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents: 16272
diff changeset
616 (setq imenu--cleanup-seen (cons alist imenu--cleanup-seen))
cca1c6324cab (imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents: 16272
diff changeset
617 (setq alist imenu--index-alist imenu--cleanup-seen (list alist)))
cca1c6324cab (imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents: 16272
diff changeset
618
10795
8cbc8846b19b (imenu--cleanup): Set alist to its default just once, at the beginning.
Richard M. Stallman <rms@gnu.org>
parents: 10221
diff changeset
619 (and alist
31560
5dd0eccb46c5 (imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents: 29552
diff changeset
620 (mapc
5dd0eccb46c5 (imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents: 29552
diff changeset
621 (lambda (item)
5dd0eccb46c5 (imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents: 29552
diff changeset
622 (cond
5dd0eccb46c5 (imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents: 29552
diff changeset
623 ((markerp (cdr item))
5dd0eccb46c5 (imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents: 29552
diff changeset
624 (set-marker (cdr item) nil))
5dd0eccb46c5 (imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents: 29552
diff changeset
625 ;; Don't process one alist twice.
5dd0eccb46c5 (imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents: 29552
diff changeset
626 ((memq (cdr item) imenu--cleanup-seen))
5dd0eccb46c5 (imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents: 29552
diff changeset
627 ((imenu--subalist-p item)
5dd0eccb46c5 (imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents: 29552
diff changeset
628 (imenu--cleanup (cdr item)))))
10795
8cbc8846b19b (imenu--cleanup): Set alist to its default just once, at the beginning.
Richard M. Stallman <rms@gnu.org>
parents: 10221
diff changeset
629 alist)
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
630 t))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
631
51024
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
632 (defun imenu--create-keymap (title alist &optional cmd)
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
633 (list* 'keymap title
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
634 (mapcar
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
635 (lambda (item)
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
636 (list* (car item) (car item)
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
637 (cond
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
638 ((imenu--subalist-p item)
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
639 (imenu--create-keymap (car item) (cdr item) cmd))
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
640 (t
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
641 `(lambda () (interactive)
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
642 ,(if cmd `(,cmd ',item) (list 'quote item)))))))
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
643 alist)))
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
644
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
645 (defun imenu--in-alist (str alist)
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
646 "Check whether the string STR is contained in multi-level ALIST."
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
647 (let (elt head tail res)
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
648 (setq res nil)
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
649 (while alist
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
650 (setq elt (car alist)
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
651 tail (cdr elt)
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
652 alist (cdr alist)
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
653 head (car elt))
15929
955269257adf (imenu--in-alist): Accept only bottom-level matches.
Richard M. Stallman <rms@gnu.org>
parents: 15831
diff changeset
654 ;; A nested ALIST element looks like
955269257adf (imenu--in-alist): Accept only bottom-level matches.
Richard M. Stallman <rms@gnu.org>
parents: 15831
diff changeset
655 ;; (INDEX-NAME (INDEX-NAME . INDEX-POSITION) ...)
955269257adf (imenu--in-alist): Accept only bottom-level matches.
Richard M. Stallman <rms@gnu.org>
parents: 15831
diff changeset
656 ;; while a bottom-level element looks like
955269257adf (imenu--in-alist): Accept only bottom-level matches.
Richard M. Stallman <rms@gnu.org>
parents: 15831
diff changeset
657 ;; (INDEX-NAME . INDEX-POSITION)
955269257adf (imenu--in-alist): Accept only bottom-level matches.
Richard M. Stallman <rms@gnu.org>
parents: 15831
diff changeset
658 ;; We are only interested in the bottom-level elements, so we need to
955269257adf (imenu--in-alist): Accept only bottom-level matches.
Richard M. Stallman <rms@gnu.org>
parents: 15831
diff changeset
659 ;; recurse if TAIL is a list.
955269257adf (imenu--in-alist): Accept only bottom-level matches.
Richard M. Stallman <rms@gnu.org>
parents: 15831
diff changeset
660 (cond ((listp tail)
955269257adf (imenu--in-alist): Accept only bottom-level matches.
Richard M. Stallman <rms@gnu.org>
parents: 15831
diff changeset
661 (if (setq res (imenu--in-alist str tail))
955269257adf (imenu--in-alist): Accept only bottom-level matches.
Richard M. Stallman <rms@gnu.org>
parents: 15831
diff changeset
662 (setq alist nil)))
25810
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
663 ((if imenu-name-lookup-function
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
664 (funcall imenu-name-lookup-function str head)
f1417ed050c0 (imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents: 24578
diff changeset
665 (string= str head))
15929
955269257adf (imenu--in-alist): Accept only bottom-level matches.
Richard M. Stallman <rms@gnu.org>
parents: 15831
diff changeset
666 (setq alist nil res elt))))
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
667 res))
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
668
20770
31a8ad177c4c (imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20769
diff changeset
669 (defvar imenu-syntax-alist nil
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
670 "Alist of syntax table modifiers to use while in `imenu--generic-function'.
20770
31a8ad177c4c (imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20769
diff changeset
671
31a8ad177c4c (imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20769
diff changeset
672 The car of the assocs may be either a character or a string and the
46981
db48206dc290 (imenu-syntax-alist): Doc fix.
Glenn Morris <rgm@gnu.org>
parents: 46977
diff changeset
673 cdr is a syntax description appropriate for `modify-syntax-entry'. For
20770
31a8ad177c4c (imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20769
diff changeset
674 a string, all the characters in the string get the specified syntax.
31a8ad177c4c (imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20769
diff changeset
675
31a8ad177c4c (imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20769
diff changeset
676 This is typically used to give word syntax to characters which
22260
b9120925ef93 (imenu-syntax-alist): Doc fix.
Dave Love <fx@gnu.org>
parents: 22250
diff changeset
677 normally have symbol syntax to simplify `imenu-expression'
20770
31a8ad177c4c (imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20769
diff changeset
678 and speed-up matching.")
35688
8b295a5d2192 (imenu-syntax-alist): Add autoload cookie for
Gerd Moellmann <gerd@gnu.org>
parents: 35243
diff changeset
679 ;;;###autoload
20770
31a8ad177c4c (imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20769
diff changeset
680 (make-variable-buffer-local 'imenu-syntax-alist)
31a8ad177c4c (imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20769
diff changeset
681
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 (defun imenu-default-create-index-function ()
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 "*Wrapper for index searching functions.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 Moves point to end of buffer and then repeatedly calls
7319
cd73ba498964 (imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents: 6909
diff changeset
686 `imenu-prev-index-position-function' and `imenu-extract-index-name-function'.
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 Their results are gathered into an index alist."
7350
542ab48d0f18 (imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents: 7319
diff changeset
688 ;; These should really be done by setting imenu-create-index-function
542ab48d0f18 (imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents: 7319
diff changeset
689 ;; in these major modes. But save that change for later.
20249
c42156dab61b (imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents: 20051
diff changeset
690 (cond ((and imenu-prev-index-position-function
c42156dab61b (imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents: 20051
diff changeset
691 imenu-extract-index-name-function)
7350
542ab48d0f18 (imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents: 7319
diff changeset
692 (let ((index-alist '())
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
693 prev-pos name)
7350
542ab48d0f18 (imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents: 7319
diff changeset
694 (goto-char (point-max))
8296
b2b493c007ff (imenu-choose-buffer-index): Use last-nonmenu-event
Richard M. Stallman <rms@gnu.org>
parents: 8256
diff changeset
695 (imenu-progress-message prev-pos 0 t)
7350
542ab48d0f18 (imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents: 7319
diff changeset
696 ;; Search for the function
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
697 (while (funcall imenu-prev-index-position-function)
8296
b2b493c007ff (imenu-choose-buffer-index): Use last-nonmenu-event
Richard M. Stallman <rms@gnu.org>
parents: 8256
diff changeset
698 (imenu-progress-message prev-pos nil t)
7350
542ab48d0f18 (imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents: 7319
diff changeset
699 (save-excursion
542ab48d0f18 (imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents: 7319
diff changeset
700 (setq name (funcall imenu-extract-index-name-function)))
542ab48d0f18 (imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents: 7319
diff changeset
701 (and (stringp name)
17307
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
702 ;; [ydi] updated for imenu-use-markers
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
703 (push (cons name (if imenu-use-markers (point-marker) (point)))
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
704 index-alist)))
8296
b2b493c007ff (imenu-choose-buffer-index): Use last-nonmenu-event
Richard M. Stallman <rms@gnu.org>
parents: 8256
diff changeset
705 (imenu-progress-message prev-pos 100 t)
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
706 index-alist))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
707 ;; Use generic expression if possible.
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
708 ((and imenu-generic-expression)
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
709 (imenu--generic-function imenu-generic-expression))
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
710 (t
17307
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
711 (error "This buffer cannot use `imenu-default-create-index-function'"))))
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
713 ;; Not used and would require cl at run time
51024
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
714 ;; (defun imenu--flatten-index-alist (index-alist &optional concat-names prefix)
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
715 ;; ;; Takes a nested INDEX-ALIST and returns a flat index alist.
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
716 ;; ;; If optional CONCAT-NAMES is non-nil, then a nested index has its
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
717 ;; ;; name and a space concatenated to the names of the children.
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
718 ;; ;; Third argument PREFIX is for internal use only.
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
719 ;; (mapcan
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
720 ;; (lambda (item)
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
721 ;; (let* ((name (car item))
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
722 ;; (pos (cdr item))
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
723 ;; (new-prefix (and concat-names
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
724 ;; (if prefix
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
725 ;; (concat prefix imenu-level-separator name)
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
726 ;; name))))
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
727 ;; (cond
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
728 ;; ((or (markerp pos) (numberp pos))
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
729 ;; (list (cons new-prefix pos)))
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
730 ;; (t
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
731 ;; (imenu--flatten-index-alist pos new-prefix)))))
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
732 ;; index-alist))
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
734 ;;;
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
735 ;;; Generic index gathering function.
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
736 ;;;
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
737
20769
aa3481dd4d84 (imenu-case-fold-search): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20249
diff changeset
738 (defvar imenu-case-fold-search t
aa3481dd4d84 (imenu-case-fold-search): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20249
diff changeset
739 "Defines whether `imenu--generic-function' should fold case when matching.
aa3481dd4d84 (imenu-case-fold-search): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20249
diff changeset
740
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
741 This variable should be set (only) by initialization code
50846
1ac6f8245bff (imenu--generic-function): Use font-lock-defaults
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46981
diff changeset
742 for modes which use `imenu--generic-function'. If it is not set, but
1ac6f8245bff (imenu--generic-function): Use font-lock-defaults
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46981
diff changeset
743 `font-lock-defaults' is set, then font-lock's setting is used.")
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
744 ;;;###autoload
20769
aa3481dd4d84 (imenu-case-fold-search): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20249
diff changeset
745 (make-variable-buffer-local 'imenu-case-fold-search)
aa3481dd4d84 (imenu-case-fold-search): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20249
diff changeset
746
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
747 ;; Originally "Built on some ideas that Erik Naggum <erik@naggum.no>
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
748 ;; once posted to comp.emacs" but since substantially re-written.
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
749 (defun imenu--generic-function (patterns)
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
750 "Return an index of the current buffer as an alist.
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
751
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
752 PATTERNS is an alist with elements that look like this:
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
753 (MENU-TITLE REGEXP INDEX).
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
754
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
755 MENU-TITLE is a string used as the title for the submenu or nil if the
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
756 entries are not nested.
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
757
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
758 REGEXP is a regexp that should match a construct in the buffer that is
12664
ce1cae301efe (imenu--history-list): Don't make this buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 12635
diff changeset
759 to be displayed in the menu; i.e., function or variable definitions,
ce1cae301efe (imenu--history-list): Don't make this buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 12635
diff changeset
760 etc. It contains a substring which is the name to appear in the
ce1cae301efe (imenu--history-list): Don't make this buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 12635
diff changeset
761 menu. See the info section on Regexps for more information.
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
762
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
763 INDEX points to the substring in REGEXP that contains the name (of the
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
764 function, variable or type) that is to appear in the menu.
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
765
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
766 See `lisp-imenu-generic-expression' for an example of PATTERNS.
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
767
12664
ce1cae301efe (imenu--history-list): Don't make this buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 12635
diff changeset
768 Returns an index of the current buffer as an alist. The elements in
ce1cae301efe (imenu--history-list): Don't make this buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 12635
diff changeset
769 the alist look like: (INDEX-NAME . INDEX-POSITION). They may also be
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
770 nested index lists like (INDEX-NAME . INDEX-ALIST) depending on
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
771 PATTERNS."
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
772
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
773 (let ((index-alist (list 'dummy))
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
774 prev-pos beg
50846
1ac6f8245bff (imenu--generic-function): Use font-lock-defaults
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46981
diff changeset
775 (case-fold-search (if (or (local-variable-p 'imenu-case-fold-search)
1ac6f8245bff (imenu--generic-function): Use font-lock-defaults
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46981
diff changeset
776 (not (local-variable-p 'font-lock-defaults)))
1ac6f8245bff (imenu--generic-function): Use font-lock-defaults
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46981
diff changeset
777 imenu-case-fold-search
1ac6f8245bff (imenu--generic-function): Use font-lock-defaults
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 46981
diff changeset
778 (nth 2 font-lock-defaults)))
20770
31a8ad177c4c (imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20769
diff changeset
779 (old-table (syntax-table))
31a8ad177c4c (imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20769
diff changeset
780 (table (copy-syntax-table (syntax-table)))
31a8ad177c4c (imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20769
diff changeset
781 (slist imenu-syntax-alist))
31a8ad177c4c (imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents: 20769
diff changeset
782 ;; Modify the syntax table used while matching regexps.
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
783 (dolist (syn slist)
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
784 ;; The character(s) to modify may be a single char or a string.
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
785 (if (numberp (car syn))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
786 (modify-syntax-entry (car syn) (cdr syn) table)
46977
54ce0e6e293f (imenu--generic-function): Use mapc.
Glenn Morris <rgm@gnu.org>
parents: 46894
diff changeset
787 (mapc (lambda (c)
54ce0e6e293f (imenu--generic-function): Use mapc.
Glenn Morris <rgm@gnu.org>
parents: 46894
diff changeset
788 (modify-syntax-entry c (cdr syn) table))
54ce0e6e293f (imenu--generic-function): Use mapc.
Glenn Morris <rgm@gnu.org>
parents: 46894
diff changeset
789 (car syn))))
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
790 (goto-char (point-max))
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
791 (imenu-progress-message prev-pos 0 t)
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
792 (unwind-protect ; for syntax table
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
793 (save-match-data
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
794 (set-syntax-table table)
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
795 ;; map over the elements of imenu-generic-expression
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
796 ;; (typically functions, variables ...)
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
797 (dolist (pat patterns)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
798 (let ((menu-title (car pat))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
799 (regexp (nth 1 pat))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
800 (index (nth 2 pat))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
801 (function (nth 3 pat))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
802 (rest (nthcdr 4 pat)))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
803 ;; Go backwards for convenience of adding items in order.
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
804 (goto-char (point-max))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
805 (while (re-search-backward regexp nil t)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
806 (imenu-progress-message prev-pos nil t)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
807 (setq beg (match-beginning index))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
808 ;; Add this sort of submenu only when we've found an
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
809 ;; item for it, avoiding empty, duff menus.
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
810 (unless (assoc menu-title index-alist)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
811 (push (list menu-title) index-alist))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
812 (if imenu-use-markers
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
813 (setq beg (copy-marker beg)))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
814 (let ((item
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
815 (if function
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
816 (nconc (list (match-string-no-properties index)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
817 beg function)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
818 rest)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
819 (cons (match-string-no-properties index)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
820 beg)))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
821 ;; This is the desired submenu,
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
822 ;; starting with its title (or nil).
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
823 (menu (assoc menu-title index-alist)))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
824 ;; Insert the item unless it is already present.
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
825 (unless (member item (cdr menu))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
826 (setcdr menu
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
827 (cons item (cdr menu))))))))
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
828 (set-syntax-table old-table)))
14726
35e1cfdd29a4 (imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents: 14725
diff changeset
829 (imenu-progress-message prev-pos 100 t)
23358
3812bb3ae006 (imenu--generic-function): Sort each submenu by position.
Karl Heuer <kwzh@gnu.org>
parents: 22798
diff changeset
830 ;; Sort each submenu by position.
3812bb3ae006 (imenu--generic-function): Sort each submenu by position.
Karl Heuer <kwzh@gnu.org>
parents: 22798
diff changeset
831 ;; This is in case one submenu gets items from two different regexps.
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
832 (dolist (item index-alist)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
833 (when (listp item)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
834 (setcdr item (sort (cdr item) 'imenu--sort-by-position))))
14726
35e1cfdd29a4 (imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents: 14725
diff changeset
835 (let ((main-element (assq nil index-alist)))
16272
b64d00e44e7b (imenu--split-menu): Keep the rescan item at top level.
Richard M. Stallman <rms@gnu.org>
parents: 16271
diff changeset
836 (nconc (delq main-element (delq 'dummy index-alist))
b64d00e44e7b (imenu--split-menu): Keep the rescan item at top level.
Richard M. Stallman <rms@gnu.org>
parents: 16271
diff changeset
837 (cdr main-element)))))
10093
caafb376e619 (imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents: 10072
diff changeset
838
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 ;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 ;;; The main functions for this package!
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 ;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
845 ;; See also info-lookup-find-item
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
846 (defun imenu-find-default (guess completions)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
847 "Fuzzily find an item based on GUESS inside the alist COMPLETIONS."
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
848 (catch 'found
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
849 (let ((case-fold-search t))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
850 (if (assoc guess completions) guess
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
851 (dolist (re (list (concat "\\`" (regexp-quote guess) "\\'")
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
852 (concat "\\`" (regexp-quote guess))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
853 (concat (regexp-quote guess) "\\'")
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
854 (regexp-quote guess)))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
855 (dolist (x completions)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
856 (if (string-match re (car x)) (throw 'found (car x)))))))))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
857
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 (defun imenu--completion-buffer (index-alist &optional prompt)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 "Let the user select from INDEX-ALIST in a completion buffer with PROMPT.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 Returns t for rescan and otherwise a position number."
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 ;; Create a list for this buffer only when needed.
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
863 (let ((name (thing-at-point 'symbol))
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
864 choice
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
865 (prepared-index-alist
46894
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
866 (if (not imenu-space-replacement) index-alist
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
867 (mapcar
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
868 (lambda (item)
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
869 (cons (subst-char-in-string ?\ (aref imenu-space-replacement 0)
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
870 (car item))
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
871 (cdr item)))
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
872 index-alist))))
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
873 (when (stringp name)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
874 (setq name (or (imenu-find-default name prepared-index-alist) name)))
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
875 (cond (prompt)
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
876 ((and name (imenu--in-alist name prepared-index-alist))
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
877 (setq prompt (format "Index item (default %s): " name)))
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
878 (t (setq prompt "Index item: ")))
46894
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
879 (let ((minibuffer-setup-hook minibuffer-setup-hook))
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
880 ;; Display the completion buffer.
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
881 (if (not imenu-eager-completion-buffer)
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
882 (add-hook 'minibuffer-setup-hook 'minibuffer-completion-help))
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
883 (setq name (completing-read prompt
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
884 prepared-index-alist
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
885 nil t nil 'imenu--history-list name)))
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
886 (cond ((not (stringp name)) nil)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
887 ((string= name (car imenu--rescan-item)) t)
7350
542ab48d0f18 (imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents: 7319
diff changeset
888 (t
542ab48d0f18 (imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents: 7319
diff changeset
889 (setq choice (assoc name prepared-index-alist))
16271
00bece0cd6c2 (imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents: 16244
diff changeset
890 (if (imenu--subalist-p choice)
7350
542ab48d0f18 (imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents: 7319
diff changeset
891 (imenu--completion-buffer (cdr choice) prompt)
542ab48d0f18 (imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents: 7319
diff changeset
892 choice)))))
7319
cd73ba498964 (imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents: 6909
diff changeset
893
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 (defun imenu--mouse-menu (index-alist event &optional title)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 "Let the user select from a buffer index from a mouse menu.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 INDEX-ALIST is the buffer index and EVENT is a mouse event.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898
16148
8ca583c0b988 (imenu): Tests for when to widen were backwards.
Richard M. Stallman <rms@gnu.org>
parents: 15929
diff changeset
899 Returns t for rescan and otherwise an element or subelement of INDEX-ALIST."
14726
35e1cfdd29a4 (imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents: 14725
diff changeset
900 (setq index-alist (imenu--split-submenus index-alist))
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
901 (let* ((menu (imenu--split-menu index-alist (or title (buffer-name))))
51024
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
902 (map (imenu--create-keymap (car menu)
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
903 (cdr (if (< 1 (length (cdr menu)))
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
904 menu
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
905 (car (cdr menu)))))))
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
906 (popup-menu map event)))
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907
6241
49538e6c482e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 6230
diff changeset
908 (defun imenu-choose-buffer-index (&optional prompt alist)
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 "Let the user select from a buffer index and return the chosen index.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 If the user originally activated this function with the mouse, a mouse
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 menu is used. Otherwise a completion buffer is used and the user is
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 prompted with PROMPT.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914
6241
49538e6c482e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 6230
diff changeset
915 If you call this function with index alist ALIST, then it lets the user
49538e6c482e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 6230
diff changeset
916 select from ALIST.
49538e6c482e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 6230
diff changeset
917
6909
9e59751db725 Require cl only at compile time.
Richard M. Stallman <rms@gnu.org>
parents: 6241
diff changeset
918 With no index alist ALIST, it calls `imenu--make-index-alist' to
6241
49538e6c482e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 6230
diff changeset
919 create the index alist.
49538e6c482e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 6230
diff changeset
920
46894
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
921 If `imenu-use-popup-menu' is non-nil, then the
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 completion buffer is always used, no matter if the mouse was used or
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 not.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924
16369
187e7c8aaff5 (imenu--make-index-alist): Add doc string.
Richard M. Stallman <rms@gnu.org>
parents: 16315
diff changeset
925 The returned value is of the form (INDEX-NAME . INDEX-POSITION)."
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 (let (index-alist
8296
b2b493c007ff (imenu-choose-buffer-index): Use last-nonmenu-event
Richard M. Stallman <rms@gnu.org>
parents: 8256
diff changeset
927 (mouse-triggered (listp last-nonmenu-event))
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
928 (result t))
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 ;; If selected by mouse, see to that the window where the mouse is
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 ;; really is selected.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 (and mouse-triggered
12396
d0c82df80d70 (imenu-choose-buffer-index): Understand that (menu-bar)
Richard M. Stallman <rms@gnu.org>
parents: 12394
diff changeset
932 (not (equal last-nonmenu-event '(menu-bar)))
8296
b2b493c007ff (imenu-choose-buffer-index): Use last-nonmenu-event
Richard M. Stallman <rms@gnu.org>
parents: 8256
diff changeset
933 (let ((window (posn-window (event-start last-nonmenu-event))))
12635
f12b1374fb5b (imenu-choose-buffer-index): Avoid trying to select WINDOW if it is nil.
Richard M. Stallman <rms@gnu.org>
parents: 12396
diff changeset
934 (or (framep window) (null window) (select-window window))))
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 ;; Create a list for this buffer only when needed.
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 (while (eq result t)
6241
49538e6c482e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 6230
diff changeset
937 (setq index-alist (if alist alist (imenu--make-index-alist)))
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 (setq result
46894
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
939 (if (and imenu-use-popup-menu
f8b45e2dec81 (imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 43982
diff changeset
940 (or (eq imenu-use-popup-menu t) mouse-triggered))
8296
b2b493c007ff (imenu-choose-buffer-index): Use last-nonmenu-event
Richard M. Stallman <rms@gnu.org>
parents: 8256
diff changeset
941 (imenu--mouse-menu index-alist last-nonmenu-event)
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 (imenu--completion-buffer index-alist prompt)))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943 (and (eq result t)
8408
109166e311ce (imenu, imenu--flatten-index-alist): Add marker support.
Richard M. Stallman <rms@gnu.org>
parents: 8296
diff changeset
944 (imenu--cleanup)
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945 (setq imenu--index-alist nil)))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 result))
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947
12394
4fbc70e4d5e7 (imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 10795
diff changeset
948 ;;;###autoload
8408
109166e311ce (imenu, imenu--flatten-index-alist): Add marker support.
Richard M. Stallman <rms@gnu.org>
parents: 8296
diff changeset
949 (defun imenu-add-to-menubar (name)
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
950 "Add an `imenu' entry to the menu bar for the current buffer.
13798
4eac65d000d3 (imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents: 13645
diff changeset
951 NAME is a string used to name the menu bar item.
14657
4bedd113757f (imenu-add-to-menubar): Add menu item for current buf only.
Richard M. Stallman <rms@gnu.org>
parents: 14656
diff changeset
952 See the command `imenu' for more information."
13798
4eac65d000d3 (imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents: 13645
diff changeset
953 (interactive "sImenu menu item name: ")
20249
c42156dab61b (imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents: 20051
diff changeset
954 (if (or (and imenu-prev-index-position-function
c42156dab61b (imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents: 20051
diff changeset
955 imenu-extract-index-name-function)
c42156dab61b (imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents: 20051
diff changeset
956 imenu-generic-expression
c42156dab61b (imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents: 20051
diff changeset
957 (not (eq imenu-create-index-function
c42156dab61b (imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents: 20051
diff changeset
958 'imenu-default-create-index-function)))
31560
5dd0eccb46c5 (imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents: 29552
diff changeset
959 (let ((newmap (make-sparse-keymap)))
5dd0eccb46c5 (imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents: 29552
diff changeset
960 (set-keymap-parent newmap (current-local-map))
24270
02ae21f066ec (imenu--last-menubar-index-alist): Add doc.
Richard M. Stallman <rms@gnu.org>
parents: 24233
diff changeset
961 (setq imenu--last-menubar-index-alist nil)
32279
869a035f39fa (imenu-add-to-menubar): Fix last change.
Dave Love <fx@gnu.org>
parents: 31560
diff changeset
962 (define-key newmap [menu-bar index]
32284
700a91f9a4b4 (imenu-add-to-menubar): Fix again.
Dave Love <fx@gnu.org>
parents: 32279
diff changeset
963 `(menu-item ,name ,(make-sparse-keymap "Imenu")))
31560
5dd0eccb46c5 (imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents: 29552
diff changeset
964 (use-local-map newmap)
20249
c42156dab61b (imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents: 20051
diff changeset
965 (add-hook 'menu-bar-update-hook 'imenu-update-menubar))
17229
b48a8dd2d8ce (imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents: 16698
diff changeset
966 (error "The mode `%s' does not support Imenu" mode-name)))
13798
4eac65d000d3 (imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents: 13645
diff changeset
967
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
968 ;;;###autoload
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
969 (defun imenu-add-menubar-index ()
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
970 "Add an Imenu \"Index\" entry on the menu bar for the current buffer.
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
971
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
972 A trivial interface to `imenu-add-to-menubar' suitable for use in a hook."
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
973 (interactive)
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
974 (imenu-add-to-menubar "Index"))
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
975
14642
01e8fdb45deb (imenu-buffer-menubar): Add defvar.
Karl Heuer <kwzh@gnu.org>
parents: 14575
diff changeset
976 (defvar imenu-buffer-menubar nil)
01e8fdb45deb (imenu-buffer-menubar): Add defvar.
Karl Heuer <kwzh@gnu.org>
parents: 14575
diff changeset
977
43982
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
978 (defvar imenu-menubar-modified-tick 0
43832
5d834c3f5d18 (imenu-update-menubar-modified-tick): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 41305
diff changeset
979 "The value of (buffer-modified-tick) as of last call to `imenu-update-menubar'.
5d834c3f5d18 (imenu-update-menubar-modified-tick): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 41305
diff changeset
980 This value becomes local in every buffer when it is set.")
43982
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
981 (make-variable-buffer-local 'imenu-menubar-modified-tick)
43832
5d834c3f5d18 (imenu-update-menubar-modified-tick): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 41305
diff changeset
982
13798
4eac65d000d3 (imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents: 13645
diff changeset
983 (defun imenu-update-menubar ()
43982
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
984 (when (and (current-local-map)
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
985 (keymapp (lookup-key (current-local-map) [menu-bar index]))
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
986 (not (eq (buffer-modified-tick)
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
987 imenu-menubar-modified-tick)))
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
988 (setq imenu-menubar-modified-tick (buffer-modified-tick))
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
989 (let ((index-alist (imenu--make-index-alist t)))
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
990 ;; Don't bother updating if the index-alist has not changed
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
991 ;; since the last time we did it.
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
992 (unless (equal index-alist imenu--last-menubar-index-alist)
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
993 (let (menu menu1 old)
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
994 (setq imenu--last-menubar-index-alist index-alist)
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
995 (setq index-alist (imenu--split-submenus index-alist))
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
996 (setq menu (imenu--split-menu index-alist
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
997 (buffer-name)))
51024
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
998 (setq menu1 (imenu--create-keymap (car menu)
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
999 (cdr (if (< 1 (length (cdr menu)))
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
1000 menu
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
1001 (car (cdr menu))))
4efabfff9aa1 (imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 50846
diff changeset
1002 'imenu--menubar-select))
43982
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
1003 (setq old (lookup-key (current-local-map) [menu-bar index]))
a40fcee55faa (imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents: 43832
diff changeset
1004 (setcdr old (cdr menu1)))))))
13798
4eac65d000d3 (imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents: 13645
diff changeset
1005
4eac65d000d3 (imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents: 13645
diff changeset
1006 (defun imenu--menubar-select (item)
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1007 "Use Imenu to select the function or variable named in this menu ITEM."
17229
b48a8dd2d8ce (imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents: 16698
diff changeset
1008 (if (equal item imenu--rescan-item)
14796
29e7001fecf0 (imenu--menubar-select): Handle the "rescan" item.
Richard M. Stallman <rms@gnu.org>
parents: 14733
diff changeset
1009 (progn
29e7001fecf0 (imenu--menubar-select): Handle the "rescan" item.
Richard M. Stallman <rms@gnu.org>
parents: 14733
diff changeset
1010 (imenu--cleanup)
29e7001fecf0 (imenu--menubar-select): Handle the "rescan" item.
Richard M. Stallman <rms@gnu.org>
parents: 14733
diff changeset
1011 (setq imenu--index-alist nil)
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1012 (imenu-update-menubar)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1013 t)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1014 (imenu item)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1015 nil))
8408
109166e311ce (imenu, imenu--flatten-index-alist): Add marker support.
Richard M. Stallman <rms@gnu.org>
parents: 8296
diff changeset
1016
17229
b48a8dd2d8ce (imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents: 16698
diff changeset
1017 (defun imenu-default-goto-function (name position &optional rest)
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
1018 "Move the point to the given position.
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
1019
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
1020 NAME is ignored. POSITION is where to move. REST is also ignored.
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
1021 The ignored args just make this function have the same interface as a
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
1022 function placed in a special index-item."
17307
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
1023 (if (or (< position (point-min))
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
1024 (> position (point-max)))
17229
b48a8dd2d8ce (imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents: 16698
diff changeset
1025 ;; widen if outside narrowing
b48a8dd2d8ce (imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents: 16698
diff changeset
1026 (widen))
17307
830ad59547e4 (imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents: 17230
diff changeset
1027 (goto-char position))
17229
b48a8dd2d8ce (imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents: 16698
diff changeset
1028
7319
cd73ba498964 (imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents: 6909
diff changeset
1029 ;;;###autoload
12664
ce1cae301efe (imenu--history-list): Don't make this buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 12635
diff changeset
1030 (defun imenu (index-item)
7319
cd73ba498964 (imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents: 6909
diff changeset
1031 "Jump to a place in the buffer chosen using a buffer menu or mouse menu.
21852
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
1032 INDEX-ITEM specifies the position. See `imenu-choose-buffer-index'
5898cd2e4cd6 (imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents: 20857
diff changeset
1033 for more information."
16698
13920eac02e0 (imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16612
diff changeset
1034 (interactive (list (imenu-choose-buffer-index)))
13798
4eac65d000d3 (imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents: 13645
diff changeset
1035 ;; Convert a string to an alist element.
4eac65d000d3 (imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents: 13645
diff changeset
1036 (if (stringp index-item)
4eac65d000d3 (imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents: 13645
diff changeset
1037 (setq index-item (assoc index-item (imenu--make-index-alist))))
41305
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1038 (when index-item
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1039 (push-mark)
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1040 (let* ((is-special-item (listp (cdr index-item)))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1041 (function
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1042 (if is-special-item
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1043 (nth 2 index-item) imenu-default-goto-function))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1044 (position (if is-special-item
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1045 (cadr index-item) (cdr index-item)))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1046 (rest (if is-special-item (cddr index-item))))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1047 (apply function (car index-item) position rest))
71197bcff33c (imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 38412
diff changeset
1048 (run-hooks 'imenu-after-jump-hook)))
8408
109166e311ce (imenu, imenu--flatten-index-alist): Add marker support.
Richard M. Stallman <rms@gnu.org>
parents: 8296
diff changeset
1049
29078
2e20146198ce Add to debug-ignored-errors.
Dave Love <fx@gnu.org>
parents: 25810
diff changeset
1050 (dolist (mess
2e20146198ce Add to debug-ignored-errors.
Dave Love <fx@gnu.org>
parents: 25810
diff changeset
1051 '("^No items suitable for an index found in this buffer$"
2e20146198ce Add to debug-ignored-errors.
Dave Love <fx@gnu.org>
parents: 25810
diff changeset
1052 "^This buffer cannot use `imenu-default-create-index-function'$"
2e20146198ce Add to debug-ignored-errors.
Dave Love <fx@gnu.org>
parents: 25810
diff changeset
1053 "^The mode `.*' does not support Imenu$"))
2e20146198ce Add to debug-ignored-errors.
Dave Love <fx@gnu.org>
parents: 25810
diff changeset
1054 (add-to-list 'debug-ignored-errors mess))
2e20146198ce Add to debug-ignored-errors.
Dave Love <fx@gnu.org>
parents: 25810
diff changeset
1055
6230
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 (provide 'imenu)
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057
4c72f80598ae Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 ;;; imenu.el ends here