Mercurial > emacs
annotate lisp/imenu.el @ 65185:7d1da711be4c
(mouse-select-or-drag-move-point): Don't pass X and Y (they are ignored anyway).
(mouse-set-mark, mouse-select-window, mouse-delete-other-windows,
mouse-delete-window): Make arguments optional.
author | Juanma Barranquero <lekktu@gmail.com> |
---|---|
date | Mon, 29 Aug 2005 10:12:36 +0000 |
parents | 41bb365f41c4 |
children | 3bd95f4f2941 2d92f5c9d6ae |
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 | 2 |
64762
41bb365f41c4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64091
diff
changeset
|
3 ;; Copyright (C) 1994, 1995, 1996, 1997, 1998, 2002, 2003, 2004, |
41bb365f41c4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64091
diff
changeset
|
4 ;; 2005 Free Software Foundation, Inc. |
6230 | 5 |
6 ;; Author: Ake Stenhoff <etxaksf@aom.ericsson.se> | |
7 ;; Lars Lindberg <lli@sypro.cap.se> | |
17970 | 8 ;; Maintainer: FSF |
6230 | 9 ;; Created: 8 Feb 1994 |
22250
a77d473867b8
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21959
diff
changeset
|
10 ;; Keywords: tools convenience |
14169 | 11 |
12 ;; This file is part of GNU Emacs. | |
13 | |
14 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
6230 | 15 ;; it under the terms of the GNU General Public License as published by |
16 ;; the Free Software Foundation; either version 2, or (at your option) | |
17 ;; any later version. | |
14169 | 18 |
19 ;; GNU Emacs is distributed in the hope that it will be useful, | |
6230 | 20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
22 ;; GNU General Public License for more details. | |
14169 | 23 |
6230 | 24 ;; You should have received a copy of the GNU General Public License |
14169 | 25 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
64091 | 26 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
27 ;; Boston, MA 02110-1301, USA. | |
6230 | 28 |
29 ;;; Commentary: | |
14169 | 30 |
6230 | 31 ;; Purpose of this package: |
32 ;; To present a framework for mode-specific buffer indexes. | |
33 ;; A buffer index is an alist of names and buffer positions. | |
34 ;; For instance all functions in a C-file and their positions. | |
35 ;; | |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
36 ;; 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
|
37 ;; |
6230 | 38 ;; How it works: |
39 | |
40 ;; A mode-specific function is called to generate the index. It is | |
41 ;; then presented to the user, who can choose from this index. | |
42 ;; | |
43 ;; The package comes with a set of example functions for how to | |
44 ;; utilize this package. | |
45 | |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
46 ;; 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
|
47 ;; 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
|
48 ;; 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
|
49 ;; index position is also supplied. |
6230 | 50 |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
51 ;;; History: |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
52 ;; Thanks go to |
6241 | 53 ;; [simon] - Simon Leinen simon@lia.di.epfl.ch |
54 ;; [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
|
55 ;; [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
|
56 ;; [greg] - Greg Thompson gregt@porsche.visix.COM |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
57 ;; [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
|
58 ;; [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
|
59 ;; [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
|
60 ;; [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
|
61 ;; [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
|
62 |
38412
253f761ad37b
Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents:
36637
diff
changeset
|
63 ;;; Code: |
14169 | 64 |
6909
9e59751db725
Require cl only at compile time.
Richard M. Stallman <rms@gnu.org>
parents:
6241
diff
changeset
|
65 (eval-when-compile (require 'cl)) |
6230 | 66 |
67 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
68 ;;; | |
69 ;;; Customizable variables | |
70 ;;; | |
71 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
72 |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
73 (defgroup imenu nil |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
74 "Mode-specific buffer indexes." |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
75 :group 'matching |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
76 :group 'frames |
22250
a77d473867b8
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21959
diff
changeset
|
77 :group 'convenience |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
78 :link '(custom-manual "(elisp)Imenu")) |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
79 |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
80 (defcustom imenu-use-markers t |
17307
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
81 "*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
|
82 |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
83 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
|
84 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
|
85 |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
86 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
|
87 :type 'boolean |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
88 :group 'imenu) |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
89 |
17307
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
90 |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
91 (defcustom imenu-max-item-length 60 |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
92 "*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
|
93 :type '(choice integer |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
94 (const :tag "Unlimited")) |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
95 :group 'imenu) |
17307
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
96 |
17677
3ab08563e855
(imenu-auto-rescan): Fix typo.
Richard M. Stallman <rms@gnu.org>
parents:
17634
diff
changeset
|
97 (defcustom imenu-auto-rescan nil |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
98 "*Non-nil means Imenu should always rescan the buffers." |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
99 :type 'boolean |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
100 :group 'imenu) |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
101 |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
102 (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
|
103 "*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
|
104 This variable is buffer-local." |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
105 :type 'integer |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
106 :group 'imenu) |
6230 | 107 |
46894
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
108 (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
|
109 (make-obsolete-variable 'imenu-always-use-completion-buffer-p |
59996
aac0a33f5772
Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents:
59568
diff
changeset
|
110 'imenu-use-popup-menu "22.1") |
6230 | 111 |
46894
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
112 (defcustom imenu-use-popup-menu |
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
113 (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
|
114 (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
|
115 'on-mouse) |
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
116 "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
|
117 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
|
118 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
|
119 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
|
120 :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
|
121 (const :tag "Never" nil) |
62531
c905fcf5e3d9
Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents:
61769
diff
changeset
|
122 (other :tag "Always" t)) |
c905fcf5e3d9
Specify missing group (and type, if simple) in defcustom.
Juanma Barranquero <lekktu@gmail.com>
parents:
61769
diff
changeset
|
123 :group 'imenu) |
46894
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
124 |
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
125 (defcustom imenu-eager-completion-buffer |
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
126 (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
|
127 "If non-nil, eagerly popup the completion buffer." |
57926
f697668630d7
(imenu-eager-completion-buffer): Add :version.
Richard M. Stallman <rms@gnu.org>
parents:
57775
diff
changeset
|
128 :type 'boolean |
f697668630d7
(imenu-eager-completion-buffer): Add :version.
Richard M. Stallman <rms@gnu.org>
parents:
57775
diff
changeset
|
129 :group 'imenu |
59996
aac0a33f5772
Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents:
59568
diff
changeset
|
130 :version "22.1") |
6230 | 131 |
25810
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
132 (defcustom imenu-after-jump-hook nil |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
133 "*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
|
134 |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
135 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
|
136 \(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
|
137 :type 'hook |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
138 :group 'imenu) |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
139 |
22798
434ac4a14be3
(imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
22628
diff
changeset
|
140 ;;;###autoload |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
141 (defcustom imenu-sort-function nil |
6230 | 142 "*The function to use for sorting the index mouse-menu. |
143 | |
144 Affects only the mouse index menu. | |
145 | |
146 Set this to nil if you don't want any sorting (faster). | |
147 The items in the menu are then presented in the order they were found | |
148 in the buffer. | |
149 | |
6909
9e59751db725
Require cl only at compile time.
Richard M. Stallman <rms@gnu.org>
parents:
6241
diff
changeset
|
150 Set it to `imenu--sort-by-name' if you want alphabetic sorting. |
6230 | 151 |
23358
3812bb3ae006
(imenu--generic-function): Sort each submenu by position.
Karl Heuer <kwzh@gnu.org>
parents:
22798
diff
changeset
|
152 The function should take two arguments and return t if the first |
6230 | 153 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
|
154 \(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
|
155 :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
|
156 (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
|
157 (function :tag "Another function")) |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
158 :group 'imenu) |
6230 | 159 |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
160 (defcustom imenu-max-items 25 |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
161 "*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
|
162 :type 'integer |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
163 :group 'imenu) |
6230 | 164 |
57775
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
165 ;; No longer used. KFS 2004-10-27 |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
166 ;; (defcustom imenu-scanning-message "Scanning buffer for index (%3d%%)" |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
167 ;; "*Progress message during the index scanning of the buffer. |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
168 ;; If non-nil, user gets a message during the scanning of the buffer. |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
169 ;; |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
170 ;; Relevant only if the mode-specific function that creates the buffer |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
171 ;; index use `imenu-progress-message', and not useful if that is fast, in |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
172 ;; which case you might as well set this to nil." |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
173 ;; :type '(choice string |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
174 ;; (const :tag "None" nil)) |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
175 ;; :group 'imenu) |
6230 | 176 |
22628
d5a086ed37f5
(imenu-space-replacement): Use `.'.
Richard M. Stallman <rms@gnu.org>
parents:
22586
diff
changeset
|
177 (defcustom imenu-space-replacement "." |
6230 | 178 "*The replacement string for spaces in index names. |
22628
d5a086ed37f5
(imenu-space-replacement): Use `.'.
Richard M. Stallman <rms@gnu.org>
parents:
22586
diff
changeset
|
179 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
|
180 names work as tokens." |
46894
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
181 :type '(choice string (const nil)) |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
182 :group 'imenu) |
6230 | 183 |
17634
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
184 (defcustom imenu-level-separator ":" |
6230 | 185 "*The separator between index names of different levels. |
186 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
|
187 with name concatenation." |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
188 :type 'string |
247c2a11843d
Use defgroup and defcustom.
Richard M. Stallman <rms@gnu.org>
parents:
17307
diff
changeset
|
189 :group 'imenu) |
6230 | 190 |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
191 ;;;###autoload |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
192 (defvar imenu-generic-expression nil |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
193 "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
|
194 |
62568
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
195 If non-nil this pattern is passed to `imenu--generic-function' to |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
196 create a buffer index. Look there for the documentation of this |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
197 pattern's structure. |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
198 |
41305
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
199 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
|
200 `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
|
201 characters which normally have \"symbol\" syntax \"word\" syntax |
fc00137bf0bf
(imenu-generic-expression): Doc fix.
Dave Love <fx@gnu.org>
parents:
35688
diff
changeset
|
202 during matching.") |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
203 |
14816
485422b900d3
(imenu-generic-expression): Autoload the make-variable-buffer-local call.
Richard M. Stallman <rms@gnu.org>
parents:
14798
diff
changeset
|
204 ;;;###autoload |
12664
ce1cae301efe
(imenu--history-list): Don't make this buffer-local.
Richard M. Stallman <rms@gnu.org>
parents:
12635
diff
changeset
|
205 (make-variable-buffer-local 'imenu-generic-expression) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
206 |
6230 | 207 ;;;; Hooks |
208 | |
22798
434ac4a14be3
(imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
22628
diff
changeset
|
209 ;;;###autoload |
6230 | 210 (defvar imenu-create-index-function 'imenu-default-create-index-function |
211 "The function to use for creating a buffer index. | |
212 | |
213 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
|
214 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
|
215 |
00bece0cd6c2
(imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents:
16244
diff
changeset
|
216 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
|
217 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
|
218 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
|
219 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
|
220 if it is a sub-alist. |
6230 | 221 |
56683
dee43d88905e
Several doc fixes: don't say variables are buffer-local.
Richard M. Stallman <rms@gnu.org>
parents:
56549
diff
changeset
|
222 This function is called within a `save-excursion'.") |
22798
434ac4a14be3
(imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
22628
diff
changeset
|
223 ;;;###autoload |
6230 | 224 (make-variable-buffer-local 'imenu-create-index-function) |
225 | |
22798
434ac4a14be3
(imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
22628
diff
changeset
|
226 ;;;###autoload |
7319
cd73ba498964
(imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents:
6909
diff
changeset
|
227 (defvar imenu-prev-index-position-function 'beginning-of-defun |
6230 | 228 "Function for finding the next index position. |
229 | |
6909
9e59751db725
Require cl only at compile time.
Richard M. Stallman <rms@gnu.org>
parents:
6241
diff
changeset
|
230 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
|
231 `imenu-default-create-index-function', then you must set this variable |
6230 | 232 to a function that will find the next index, looking backwards in the |
233 file. | |
234 | |
235 The function should leave point at the place to be connected to the | |
56549
7e0e6be19969
(imenu-prev-index-position-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55826
diff
changeset
|
236 index and it should return nil when it doesn't find another index.") |
22798
434ac4a14be3
(imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
22628
diff
changeset
|
237 ;;;###autoload |
7319
cd73ba498964
(imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents:
6909
diff
changeset
|
238 (make-variable-buffer-local 'imenu-prev-index-position-function) |
6230 | 239 |
22798
434ac4a14be3
(imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
22628
diff
changeset
|
240 ;;;###autoload |
7319
cd73ba498964
(imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents:
6909
diff
changeset
|
241 (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
|
242 "Function for extracting the index item name, given a position. |
6230 | 243 |
20857
185fa242a2ea
(imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
20770
diff
changeset
|
244 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
|
245 finds a position for an index item, with point at that position. |
56549
7e0e6be19969
(imenu-prev-index-position-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55826
diff
changeset
|
246 It should return the name for that index item.") |
22798
434ac4a14be3
(imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
22628
diff
changeset
|
247 ;;;###autoload |
7319
cd73ba498964
(imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents:
6909
diff
changeset
|
248 (make-variable-buffer-local 'imenu-extract-index-name-function) |
6230 | 249 |
22798
434ac4a14be3
(imenu-create-index-function): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
22628
diff
changeset
|
250 ;;;###autoload |
25810
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
251 (defvar imenu-name-lookup-function nil |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
252 "Function to compare string with index item. |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
253 |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
254 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
|
255 non-nil if they match. |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
256 |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
257 If nil, comparison is done with `string='. |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
258 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
|
259 such as \"begins with\" or \"name matches and number of |
56549
7e0e6be19969
(imenu-prev-index-position-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55826
diff
changeset
|
260 arguments match\".") |
25810
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
261 ;;;###autoload |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
262 (make-variable-buffer-local 'imenu-name-lookup-function) |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
263 |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
264 ;;;###autoload |
17229
b48a8dd2d8ce
(imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents:
16698
diff
changeset
|
265 (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
|
266 "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
|
267 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
|
268 ;;;###autoload |
17229
b48a8dd2d8ce
(imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents:
16698
diff
changeset
|
269 (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
|
270 |
b48a8dd2d8ce
(imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents:
16698
diff
changeset
|
271 |
16271
00bece0cd6c2
(imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents:
16244
diff
changeset
|
272 (defun imenu--subalist-p (item) |
00bece0cd6c2
(imenu--generic-function): Create a special entry
Richard M. Stallman <rms@gnu.org>
parents:
16244
diff
changeset
|
273 (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
|
274 (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
|
275 |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
276 ;; 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
|
277 ;; 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
|
278 ;; 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
|
279 ;; is calculated. |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
280 ;; 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
|
281 (defmacro imenu-progress-message (prevpos &optional relpos reverse) |
57775
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
282 |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
283 ;; Made obsolete/empty, as computers are now faster than the eye, and |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
284 ;; it had problems updating the messages correctly, and could shadow |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
285 ;; more important messages/prompts in the minibuffer. KFS 2004-10-27. |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
286 |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
287 ;; `(and |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
288 ;; imenu-scanning-message |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
289 ;; (let ((pos ,(if relpos |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
290 ;; relpos |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
291 ;; `(imenu--relative-position ,reverse)))) |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
292 ;; (if ,(if relpos t |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
293 ;; `(> pos (+ 5 ,prevpos))) |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
294 ;; (progn |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
295 ;; (message imenu-scanning-message pos) |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
296 ;; (setq ,prevpos pos))))) |
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
297 ) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
298 |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
299 |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
300 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
301 ;;;; |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
302 ;;;; Some examples of functions utilizing the framework of this |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
303 ;;;; package. |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
304 ;;;; |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
305 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
306 |
57417
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
307 ;; FIXME: This is the only imenu-example-* definition that's actually used, |
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
308 ;; and it seems to only be used by cperl-mode.el. We should just move it to |
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
309 ;; cperl-mode.el and remove the rest. |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
310 (defun imenu-example--name-and-position () |
57417
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
311 "Return the current/previous sexp and its (beginning) location. |
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
312 Don't move point." |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
313 (save-excursion |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
314 (forward-sexp -1) |
17307
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
315 ;; [ydi] modified for imenu-use-markers |
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
316 (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
|
317 (end (progn (forward-sexp) (point)))) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
318 (cons (buffer-substring beg end) |
17307
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
319 beg)))) |
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 ;;; Lisp |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
323 ;;; |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
324 |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
325 (defun imenu-example--lisp-extract-index-name () |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
326 ;; 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
|
327 ;; 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
|
328 (save-match-data |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
329 (and (looking-at "(def") |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
330 (condition-case nil |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
331 (progn |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
332 (down-list 1) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
333 (forward-sexp 2) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
334 (let ((beg (point)) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
335 (end (progn (forward-sexp -1) (point)))) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
336 (buffer-substring beg end))) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
337 (error nil))))) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
338 |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
339 (defun imenu-example--create-lisp-index () |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
340 ;; Example of a candidate for `imenu-create-index-function'. |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
341 ;; It will generate a nested index of definitions. |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
342 (let ((index-alist '()) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
343 (index-var-alist '()) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
344 (index-type-alist '()) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
345 (index-unknown-alist '()) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
346 prev-pos) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
347 (goto-char (point-max)) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
348 (imenu-progress-message prev-pos 0) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
349 ;; Search for the function |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
350 (while (beginning-of-defun) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
351 (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
|
352 (save-match-data |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
353 (and (looking-at "(def") |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
354 (save-excursion |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
355 (down-list 1) |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
356 (cond |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
357 ((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
|
358 (forward-sexp 2) |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
359 (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
|
360 index-var-alist)) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
361 ((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
|
362 (forward-sexp 2) |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
363 (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
|
364 index-alist)) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
365 ((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
|
366 (forward-sexp 2) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
367 (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
|
368 (progn |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
369 (forward-sexp -1) |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
370 (down-list 1) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
371 (forward-sexp 1))) |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
372 (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
|
373 index-type-alist)) |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
374 (t |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
375 (forward-sexp 2) |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
376 (push (imenu-example--name-and-position) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
377 index-unknown-alist))))))) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
378 (imenu-progress-message prev-pos 100) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
379 (and index-var-alist |
14726
35e1cfdd29a4
(imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents:
14725
diff
changeset
|
380 (push (cons "Variables" index-var-alist) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
381 index-alist)) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
382 (and index-type-alist |
14726
35e1cfdd29a4
(imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents:
14725
diff
changeset
|
383 (push (cons "Types" index-type-alist) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
384 index-alist)) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
385 (and index-unknown-alist |
14726
35e1cfdd29a4
(imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents:
14725
diff
changeset
|
386 (push (cons "Syntax-unknown" index-unknown-alist) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
387 index-alist)) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
388 index-alist)) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
389 |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
390 ;; Regular expression to find C functions |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
391 (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
|
392 (concat |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
393 "^[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
|
394 "\\([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
|
395 "\\([a-zA-Z0-9_*]+[ \t]+\\)?" |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
396 "\\([*&]+[ \t]*\\)?" ; pointer |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
397 "\\([a-zA-Z0-9_*]+\\)[ \t]*(" ; name |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
398 )) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
399 |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
400 (defun imenu-example--create-c-index (&optional regexp) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
401 (let ((index-alist '()) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
402 prev-pos char) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
403 (goto-char (point-min)) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
404 (imenu-progress-message prev-pos 0) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
405 ;; Search for the function |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
406 (save-match-data |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
407 (while (re-search-forward |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
408 (or regexp imenu-example--function-name-regexp-c) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
409 nil t) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
410 (imenu-progress-message prev-pos) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
411 (backward-up-list 1) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
412 (save-excursion |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
413 (goto-char (scan-sexps (point) 1)) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
414 (setq char (following-char))) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
415 ;; 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
|
416 (if (not (eq char ?\;)) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
417 (push (imenu-example--name-and-position) index-alist)))) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
418 (imenu-progress-message prev-pos 100) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
419 (nreverse index-alist))) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
420 |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
421 |
6230 | 422 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
423 ;;; | |
424 ;;; Internal variables | |
425 ;;; | |
426 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
427 | |
428 ;; The item to use in the index for rescanning the buffer. | |
429 (defconst imenu--rescan-item '("*Rescan*" . -99)) | |
430 | |
431 ;; The latest buffer index. | |
432 ;; Buffer local. | |
20857
185fa242a2ea
(imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
20770
diff
changeset
|
433 (defvar imenu--index-alist nil |
185fa242a2ea
(imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
20770
diff
changeset
|
434 "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
|
435 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
|
436 Special elements look like (INDEX-NAME INDEX-POSITION FUNCTION ARGUMENTS...). |
56549
7e0e6be19969
(imenu-prev-index-position-function)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
55826
diff
changeset
|
437 A nested sub-alist element looks like (INDEX-NAME SUB-ALIST).") |
20857
185fa242a2ea
(imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
20770
diff
changeset
|
438 |
6230 | 439 (make-variable-buffer-local 'imenu--index-alist) |
440 | |
24270
02ae21f066ec
(imenu--last-menubar-index-alist): Add doc.
Richard M. Stallman <rms@gnu.org>
parents:
24233
diff
changeset
|
441 (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
|
442 "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
|
443 |
13798
4eac65d000d3
(imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents:
13645
diff
changeset
|
444 (make-variable-buffer-local 'imenu--last-menubar-index-alist) |
4eac65d000d3
(imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents:
13645
diff
changeset
|
445 |
6230 | 446 ;; 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
|
447 ;; Making this buffer local caused it not to work! |
6230 | 448 (defvar imenu--history-list nil) |
449 | |
450 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
451 ;;; | |
452 ;;; Internal support functions | |
453 ;;; | |
454 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
455 | |
456 ;;; | |
457 ;;; Sort function | |
458 ;;; 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
|
459 ;;; An item looks like (NAME . POSITION). |
6230 | 460 ;;; |
461 (defun imenu--sort-by-name (item1 item2) | |
462 (string-lessp (car item1) (car item2))) | |
463 | |
23358
3812bb3ae006
(imenu--generic-function): Sort each submenu by position.
Karl Heuer <kwzh@gnu.org>
parents:
22798
diff
changeset
|
464 (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
|
465 (< (cdr item1) (cdr item2))) |
3812bb3ae006
(imenu--generic-function): Sort each submenu by position.
Karl Heuer <kwzh@gnu.org>
parents:
22798
diff
changeset
|
466 |
6230 | 467 (defun imenu--relative-position (&optional reverse) |
468 ;; Support function to calculate relative position in buffer | |
469 ;; Beginning of buffer is 0 and end of buffer is 100 | |
470 ;; If REVERSE is non-nil then the beginning is 100 and the end is 0. | |
471 (let ((pos (point)) | |
472 (total (buffer-size))) | |
473 (and reverse (setq pos (- total pos))) | |
474 (if (> total 50000) | |
475 ;; Avoid overflow from multiplying by 100! | |
476 (/ (1- pos) (max (/ total 100) 1)) | |
477 (/ (* 100 (1- pos)) (max total 1))))) | |
478 | |
479 ;; Split LIST into sublists of max length N. | |
480 ;; Example (imenu--split '(1 2 3 4 5 6 7 8) 3)-> '((1 2 3) (4 5 6) (7 8)) | |
481 (defun imenu--split (list n) | |
482 (let ((remain list) | |
483 (result '()) | |
484 (sublist '()) | |
485 (i 0)) | |
486 (while remain | |
487 (push (pop remain) sublist) | |
488 (incf i) | |
489 (and (= i n) | |
490 ;; We have finished a sublist | |
491 (progn (push (nreverse sublist) result) | |
492 (setq i 0) | |
493 (setq sublist '())))) | |
494 ;; There might be a sublist (if the length of LIST mod n is != 0) | |
495 ;; that has to be added to the result list. | |
496 (and sublist | |
497 (push (nreverse sublist) result)) | |
498 (nreverse result))) | |
499 | |
14726
35e1cfdd29a4
(imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents:
14725
diff
changeset
|
500 ;;; 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
|
501 ;;; In any case, add TITLE to the front of the alist. |
6230 | 502 (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
|
503 (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
|
504 (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
|
505 (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
|
506 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
|
507 (setq tail menulist) |
41305
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
508 (dolist (item tail) |
51024
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
509 (when (imenu--subalist-p item) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
510 (push item keep-at-top) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
511 (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
|
512 (if imenu-sort-function |
59568
3c6c2682ad8f
(imenu--split-menu): Copy menulist before sorting.
Richard M. Stallman <rms@gnu.org>
parents:
58743
diff
changeset
|
513 (setq menulist (sort (copy-sequence menulist) imenu-sort-function))) |
51024
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
514 (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
|
515 (setq menulist |
51024
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
516 (mapcar |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
517 (lambda (menu) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
518 (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
|
519 (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
|
520 (cons title |
b64d00e44e7b
(imenu--split-menu): Keep the rescan item at top level.
Richard M. Stallman <rms@gnu.org>
parents:
16271
diff
changeset
|
521 (nconc (nreverse keep-at-top) menulist)))) |
14726
35e1cfdd29a4
(imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents:
14725
diff
changeset
|
522 |
35e1cfdd29a4
(imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents:
14725
diff
changeset
|
523 ;;; 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
|
524 ;;; into nested alists. |
35e1cfdd29a4
(imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents:
14725
diff
changeset
|
525 (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
|
526 (mapcar (function |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
527 (lambda (elt) |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
528 (if (and (consp elt) |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
529 (stringp (car elt)) |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
530 (listp (cdr elt))) |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
531 (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
|
532 elt))) |
14726
35e1cfdd29a4
(imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents:
14725
diff
changeset
|
533 alist)) |
6230 | 534 |
17307
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
535 ;;; 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
|
536 (defun imenu--truncate-items (menulist) |
35243
569b2a1b20df
(imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents:
32780
diff
changeset
|
537 (mapcar (function |
569b2a1b20df
(imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents:
32780
diff
changeset
|
538 (lambda (item) |
569b2a1b20df
(imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents:
32780
diff
changeset
|
539 (cond |
569b2a1b20df
(imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents:
32780
diff
changeset
|
540 ((consp (cdr item)) |
569b2a1b20df
(imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents:
32780
diff
changeset
|
541 (imenu--truncate-items (cdr item))) |
57417
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
542 ;; truncate if necessary |
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
543 ((and (numberp imenu-max-item-length) |
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
544 (> (length (car item)) imenu-max-item-length)) |
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
545 (setcar item (substring (car item) 0 imenu-max-item-length)))))) |
35243
569b2a1b20df
(imenu--truncate-items): Revert last change.
Dave Love <fx@gnu.org>
parents:
32780
diff
changeset
|
546 menulist)) |
17307
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
547 |
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
548 |
16369
187e7c8aaff5
(imenu--make-index-alist): Add doc string.
Richard M. Stallman <rms@gnu.org>
parents:
16315
diff
changeset
|
549 (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
|
550 "Create an index-alist for the definitions in the current buffer. |
6230 | 551 |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
552 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
|
553 non-nil. |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
554 |
16369
187e7c8aaff5
(imenu--make-index-alist): Add doc string.
Richard M. Stallman <rms@gnu.org>
parents:
16315
diff
changeset
|
555 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
|
556 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
|
557 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
|
558 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
|
559 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
|
560 |
187e7c8aaff5
(imenu--make-index-alist): Add doc string.
Richard M. Stallman <rms@gnu.org>
parents:
16315
diff
changeset
|
561 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
|
562 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
|
563 (or (and imenu--index-alist |
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
564 (or (not imenu-auto-rescan) |
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
565 (and imenu-auto-rescan |
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
566 (> (buffer-size) imenu-auto-rescan-maxout)))) |
17307
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
567 ;; Get the index; truncate if necessary |
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
568 (progn |
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
569 (setq imenu--index-alist |
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
570 (save-excursion |
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
571 (save-restriction |
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
572 (widen) |
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
573 (funcall imenu-create-index-function)))) |
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
574 (imenu--truncate-items imenu--index-alist))) |
13798
4eac65d000d3
(imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents:
13645
diff
changeset
|
575 (or imenu--index-alist noerror |
4eac65d000d3
(imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents:
13645
diff
changeset
|
576 (error "No items suitable for an index found in this buffer")) |
6230 | 577 (or imenu--index-alist |
13798
4eac65d000d3
(imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents:
13645
diff
changeset
|
578 (setq imenu--index-alist (list nil))) |
6230 | 579 ;; Add a rescan option to the index. |
580 (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
|
581 |
8408
109166e311ce
(imenu, imenu--flatten-index-alist): Add marker support.
Richard M. Stallman <rms@gnu.org>
parents:
8296
diff
changeset
|
582 ;;; 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
|
583 ;;; them point nowhere. |
16315
cca1c6324cab
(imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents:
16272
diff
changeset
|
584 ;;; 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
|
585 ;;; non-nil arguments are in recursivecalls. |
cca1c6324cab
(imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents:
16272
diff
changeset
|
586 (defvar imenu--cleanup-seen) |
cca1c6324cab
(imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents:
16272
diff
changeset
|
587 |
8408
109166e311ce
(imenu, imenu--flatten-index-alist): Add marker support.
Richard M. Stallman <rms@gnu.org>
parents:
8296
diff
changeset
|
588 (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
|
589 ;; 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
|
590 ;; 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
|
591 ;; and use imenu--index-alist. |
cca1c6324cab
(imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents:
16272
diff
changeset
|
592 (if alist |
cca1c6324cab
(imenu--cleanup): Handle shared structure in alist.
Richard M. Stallman <rms@gnu.org>
parents:
16272
diff
changeset
|
593 (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
|
594 (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
|
595 |
10795
8cbc8846b19b
(imenu--cleanup): Set alist to its default just once, at the beginning.
Richard M. Stallman <rms@gnu.org>
parents:
10221
diff
changeset
|
596 (and alist |
31560
5dd0eccb46c5
(imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents:
29552
diff
changeset
|
597 (mapc |
5dd0eccb46c5
(imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents:
29552
diff
changeset
|
598 (lambda (item) |
5dd0eccb46c5
(imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents:
29552
diff
changeset
|
599 (cond |
5dd0eccb46c5
(imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents:
29552
diff
changeset
|
600 ((markerp (cdr item)) |
5dd0eccb46c5
(imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents:
29552
diff
changeset
|
601 (set-marker (cdr item) nil)) |
5dd0eccb46c5
(imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents:
29552
diff
changeset
|
602 ;; Don't process one alist twice. |
5dd0eccb46c5
(imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents:
29552
diff
changeset
|
603 ((memq (cdr item) imenu--cleanup-seen)) |
5dd0eccb46c5
(imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents:
29552
diff
changeset
|
604 ((imenu--subalist-p item) |
5dd0eccb46c5
(imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents:
29552
diff
changeset
|
605 (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
|
606 alist) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
607 t)) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
608 |
51024
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
609 (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
|
610 (list* 'keymap title |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
611 (mapcar |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
612 (lambda (item) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
613 (list* (car item) (car item) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
614 (cond |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
615 ((imenu--subalist-p item) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
616 (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
|
617 (t |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
618 `(lambda () (interactive) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
619 ,(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
|
620 alist))) |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
621 |
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
622 (defun imenu--in-alist (str alist) |
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
623 "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
|
624 (let (elt head tail res) |
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
625 (setq res nil) |
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
626 (while alist |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
627 (setq elt (car alist) |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
628 tail (cdr elt) |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
629 alist (cdr alist) |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
630 head (car elt)) |
15929
955269257adf
(imenu--in-alist): Accept only bottom-level matches.
Richard M. Stallman <rms@gnu.org>
parents:
15831
diff
changeset
|
631 ;; 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
|
632 ;; (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
|
633 ;; 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
|
634 ;; (INDEX-NAME . INDEX-POSITION) |
955269257adf
(imenu--in-alist): Accept only bottom-level matches.
Richard M. Stallman <rms@gnu.org>
parents:
15831
diff
changeset
|
635 ;; 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
|
636 ;; 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
|
637 (cond ((listp tail) |
955269257adf
(imenu--in-alist): Accept only bottom-level matches.
Richard M. Stallman <rms@gnu.org>
parents:
15831
diff
changeset
|
638 (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
|
639 (setq alist nil))) |
25810
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
640 ((if imenu-name-lookup-function |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
641 (funcall imenu-name-lookup-function str head) |
f1417ed050c0
(imenu-after-jump-hook): New variable.
Phillip Rulon <pjr@gnu.org>
parents:
24578
diff
changeset
|
642 (string= str head)) |
15929
955269257adf
(imenu--in-alist): Accept only bottom-level matches.
Richard M. Stallman <rms@gnu.org>
parents:
15831
diff
changeset
|
643 (setq alist nil res elt)))) |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
644 res)) |
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
645 |
20770
31a8ad177c4c
(imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents:
20769
diff
changeset
|
646 (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
|
647 "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
|
648 |
31a8ad177c4c
(imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents:
20769
diff
changeset
|
649 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
|
650 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
|
651 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
|
652 |
31a8ad177c4c
(imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents:
20769
diff
changeset
|
653 This is typically used to give word syntax to characters which |
22260 | 654 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
|
655 and speed-up matching.") |
35688
8b295a5d2192
(imenu-syntax-alist): Add autoload cookie for
Gerd Moellmann <gerd@gnu.org>
parents:
35243
diff
changeset
|
656 ;;;###autoload |
20770
31a8ad177c4c
(imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents:
20769
diff
changeset
|
657 (make-variable-buffer-local 'imenu-syntax-alist) |
31a8ad177c4c
(imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents:
20769
diff
changeset
|
658 |
6230 | 659 (defun imenu-default-create-index-function () |
660 "*Wrapper for index searching functions. | |
661 | |
662 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
|
663 `imenu-prev-index-position-function' and `imenu-extract-index-name-function'. |
6230 | 664 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
|
665 ;; 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
|
666 ;; 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
|
667 (cond ((and imenu-prev-index-position-function |
c42156dab61b
(imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents:
20051
diff
changeset
|
668 imenu-extract-index-name-function) |
7350
542ab48d0f18
(imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents:
7319
diff
changeset
|
669 (let ((index-alist '()) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
670 prev-pos name) |
7350
542ab48d0f18
(imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents:
7319
diff
changeset
|
671 (goto-char (point-max)) |
8296
b2b493c007ff
(imenu-choose-buffer-index): Use last-nonmenu-event
Richard M. Stallman <rms@gnu.org>
parents:
8256
diff
changeset
|
672 (imenu-progress-message prev-pos 0 t) |
7350
542ab48d0f18
(imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents:
7319
diff
changeset
|
673 ;; 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
|
674 (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
|
675 (imenu-progress-message prev-pos nil t) |
7350
542ab48d0f18
(imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents:
7319
diff
changeset
|
676 (save-excursion |
542ab48d0f18
(imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents:
7319
diff
changeset
|
677 (setq name (funcall imenu-extract-index-name-function))) |
542ab48d0f18
(imenu-default-create-index-function):
Richard M. Stallman <rms@gnu.org>
parents:
7319
diff
changeset
|
678 (and (stringp name) |
17307
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
679 ;; [ydi] updated for imenu-use-markers |
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
680 (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
|
681 index-alist))) |
8296
b2b493c007ff
(imenu-choose-buffer-index): Use last-nonmenu-event
Richard M. Stallman <rms@gnu.org>
parents:
8256
diff
changeset
|
682 (imenu-progress-message prev-pos 100 t) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
683 index-alist)) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
684 ;; Use generic expression if possible. |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
685 ((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
|
686 (imenu--generic-function imenu-generic-expression)) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
687 (t |
17307
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
688 (error "This buffer cannot use `imenu-default-create-index-function'")))) |
6230 | 689 |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
690 ;; 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
|
691 ;; (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
|
692 ;; ;; 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
|
693 ;; ;; 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
|
694 ;; ;; 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
|
695 ;; ;; 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
|
696 ;; (mapcan |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
697 ;; (lambda (item) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
698 ;; (let* ((name (car item)) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
699 ;; (pos (cdr item)) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
700 ;; (new-prefix (and concat-names |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
701 ;; (if prefix |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
702 ;; (concat prefix imenu-level-separator name) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
703 ;; name)))) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
704 ;; (cond |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
705 ;; ((or (markerp pos) (numberp pos)) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
706 ;; (list (cons new-prefix pos))) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
707 ;; (t |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
708 ;; (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
|
709 ;; index-alist)) |
6230 | 710 |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
711 ;;; |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
712 ;;; Generic index gathering function. |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
713 ;;; |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
714 |
20769
aa3481dd4d84
(imenu-case-fold-search): New buffer-local variable.
Dave Love <fx@gnu.org>
parents:
20249
diff
changeset
|
715 (defvar imenu-case-fold-search t |
aa3481dd4d84
(imenu-case-fold-search): New buffer-local variable.
Dave Love <fx@gnu.org>
parents:
20249
diff
changeset
|
716 "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
|
717 |
41305
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
718 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
|
719 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
|
720 `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
|
721 ;;;###autoload |
20769
aa3481dd4d84
(imenu-case-fold-search): New buffer-local variable.
Dave Love <fx@gnu.org>
parents:
20249
diff
changeset
|
722 (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
|
723 |
58489
5df4ac03694d
Don't always require newcomment.
Richard M. Stallman <rms@gnu.org>
parents:
58364
diff
changeset
|
724 ;; This function can be called with quitting disabled, |
5df4ac03694d
Don't always require newcomment.
Richard M. Stallman <rms@gnu.org>
parents:
58364
diff
changeset
|
725 ;; so it needs to be careful never to loop! |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
726 (defun imenu--generic-function (patterns) |
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
727 "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
|
728 |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
729 PATTERNS is an alist with elements that look like this: |
62568
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
730 (MENU-TITLE REGEXP INDEX) |
52733
9cb896b7b7e2
(imenu--generic-function): Docstring fix.
Lute Kamstra <lute@gnu.org>
parents:
52401
diff
changeset
|
731 or like this: |
9cb896b7b7e2
(imenu--generic-function): Docstring fix.
Lute Kamstra <lute@gnu.org>
parents:
52401
diff
changeset
|
732 (MENU-TITLE REGEXP INDEX FUNCTION ARGUMENTS...) |
62568
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
733 with zero or more ARGUMENTS. The former format creates a simple |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
734 element in the index alist when it matches; the latter creates a |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
735 special element of the form (NAME POSITION-MARKER FUNCTION |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
736 ARGUMENTS...) with FUNCTION and ARGUMENTS copied from |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
737 `imenu-generic-expression'. |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
738 |
62568
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
739 MENU-TITLE is a string used as the title for the submenu or nil |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
740 if the entries are not nested. |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
741 |
62568
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
742 REGEXP is a regexp that should match a construct in the buffer |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
743 that is to be displayed in the menu; i.e., function or variable |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
744 definitions, etc. It contains a substring which is the name to |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
745 appear in the menu. See the info section on Regexps for more |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
746 information. REGEXP may also be a function, called without |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
747 arguments. It is expected to search backwards. It shall return |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
748 true and set `match-data' iff it finds another element. |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
749 |
62568
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
750 INDEX points to the substring in REGEXP that contains the |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
751 name (of the function, variable or type) that is to appear in the |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
752 menu. |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
753 |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
754 The variable `imenu-case-fold-search' determines whether or not the |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
755 regexp matches are case sensitive, and `imenu-syntax-alist' can be |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
756 used to alter the syntax table for the search. |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
757 |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
758 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
|
759 |
12664
ce1cae301efe
(imenu--history-list): Don't make this buffer-local.
Richard M. Stallman <rms@gnu.org>
parents:
12635
diff
changeset
|
760 Returns an index of the current buffer as an alist. The elements in |
52733
9cb896b7b7e2
(imenu--generic-function): Docstring fix.
Lute Kamstra <lute@gnu.org>
parents:
52401
diff
changeset
|
761 the alist look like: |
9cb896b7b7e2
(imenu--generic-function): Docstring fix.
Lute Kamstra <lute@gnu.org>
parents:
52401
diff
changeset
|
762 (INDEX-NAME . INDEX-POSITION) |
9cb896b7b7e2
(imenu--generic-function): Docstring fix.
Lute Kamstra <lute@gnu.org>
parents:
52401
diff
changeset
|
763 or like: |
9cb896b7b7e2
(imenu--generic-function): Docstring fix.
Lute Kamstra <lute@gnu.org>
parents:
52401
diff
changeset
|
764 (INDEX-NAME INDEX-POSITION FUNCTION ARGUMENTS...) |
57775
206e30bf844c
(imenu-scanning-message): Remove.
Kim F. Storm <storm@cua.dk>
parents:
57717
diff
changeset
|
765 They may also be nested index alists like: |
52733
9cb896b7b7e2
(imenu--generic-function): Docstring fix.
Lute Kamstra <lute@gnu.org>
parents:
52401
diff
changeset
|
766 (INDEX-NAME . INDEX-ALIST) |
9cb896b7b7e2
(imenu--generic-function): Docstring fix.
Lute Kamstra <lute@gnu.org>
parents:
52401
diff
changeset
|
767 depending on PATTERNS." |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
768 |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
769 (let ((index-alist (list 'dummy)) |
61769
ff6d0a7e180e
(imenu--generic-function): The official position of a
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
770 prev-pos |
50846
1ac6f8245bff
(imenu--generic-function): Use font-lock-defaults
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46981
diff
changeset
|
771 (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
|
772 (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
|
773 imenu-case-fold-search |
1ac6f8245bff
(imenu--generic-function): Use font-lock-defaults
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46981
diff
changeset
|
774 (nth 2 font-lock-defaults))) |
20770
31a8ad177c4c
(imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents:
20769
diff
changeset
|
775 (old-table (syntax-table)) |
31a8ad177c4c
(imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents:
20769
diff
changeset
|
776 (table (copy-syntax-table (syntax-table))) |
31a8ad177c4c
(imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents:
20769
diff
changeset
|
777 (slist imenu-syntax-alist)) |
31a8ad177c4c
(imenu-syntax-alist): New buffer-local variable.
Dave Love <fx@gnu.org>
parents:
20769
diff
changeset
|
778 ;; 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
|
779 (dolist (syn slist) |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
780 ;; 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
|
781 (if (numberp (car syn)) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
782 (modify-syntax-entry (car syn) (cdr syn) table) |
46977
54ce0e6e293f
(imenu--generic-function): Use mapc.
Glenn Morris <rgm@gnu.org>
parents:
46894
diff
changeset
|
783 (mapc (lambda (c) |
54ce0e6e293f
(imenu--generic-function): Use mapc.
Glenn Morris <rgm@gnu.org>
parents:
46894
diff
changeset
|
784 (modify-syntax-entry c (cdr syn) table)) |
54ce0e6e293f
(imenu--generic-function): Use mapc.
Glenn Morris <rgm@gnu.org>
parents:
46894
diff
changeset
|
785 (car syn)))) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
786 (goto-char (point-max)) |
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
787 (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
|
788 (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
|
789 (save-match-data |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
790 (set-syntax-table table) |
58489
5df4ac03694d
Don't always require newcomment.
Richard M. Stallman <rms@gnu.org>
parents:
58364
diff
changeset
|
791 |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
792 ;; 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
|
793 ;; (typically functions, variables ...) |
41305
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
794 (dolist (pat patterns) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
795 (let ((menu-title (car pat)) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
796 (regexp (nth 1 pat)) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
797 (index (nth 2 pat)) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
798 (function (nth 3 pat)) |
57717
d198f03d3ba5
(imenu--generic-function): Skip matches in comments.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
57417
diff
changeset
|
799 (rest (nthcdr 4 pat)) |
61769
ff6d0a7e180e
(imenu--generic-function): The official position of a
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
800 start beg) |
41305
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
801 ;; 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
|
802 (goto-char (point-max)) |
62568
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
803 (while (and (if (functionp regexp) |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
804 (funcall regexp) |
7be08219b736
(imenu-generic-expression, imenu--generic-function'): REGEXP may also be a search function now. The part of doc-string for describing the structure was 95% identical to that of `imenu--generic-function'. Unify it there.
Daniel Pfeiffer <occitan@esperanto.org>
parents:
62531
diff
changeset
|
805 (re-search-backward regexp nil t)) |
58489
5df4ac03694d
Don't always require newcomment.
Richard M. Stallman <rms@gnu.org>
parents:
58364
diff
changeset
|
806 ;; Exit the loop if we get an empty match, |
5df4ac03694d
Don't always require newcomment.
Richard M. Stallman <rms@gnu.org>
parents:
58364
diff
changeset
|
807 ;; because it means a bad regexp was specified. |
5df4ac03694d
Don't always require newcomment.
Richard M. Stallman <rms@gnu.org>
parents:
58364
diff
changeset
|
808 (not (= (match-beginning 0) (match-end 0)))) |
58364
c8e69a3cb57f
(imenu--generic-function):
Richard M. Stallman <rms@gnu.org>
parents:
57926
diff
changeset
|
809 (setq start (point)) |
61769
ff6d0a7e180e
(imenu--generic-function): The official position of a
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
810 ;; Record the start of the line in which the match starts. |
59568
3c6c2682ad8f
(imenu--split-menu): Copy menulist before sorting.
Richard M. Stallman <rms@gnu.org>
parents:
58743
diff
changeset
|
811 ;; That's the official position of this definition. |
61769
ff6d0a7e180e
(imenu--generic-function): The official position of a
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
812 (goto-char (match-beginning index)) |
ff6d0a7e180e
(imenu--generic-function): The official position of a
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
813 (beginning-of-line) |
ff6d0a7e180e
(imenu--generic-function): The official position of a
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
814 (setq beg (point)) |
58743
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
815 (imenu-progress-message prev-pos nil t) |
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
816 ;; Add this sort of submenu only when we've found an |
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
817 ;; item for it, avoiding empty, duff menus. |
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
818 (unless (assoc menu-title index-alist) |
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
819 (push (list menu-title) index-alist)) |
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
820 (if imenu-use-markers |
61769
ff6d0a7e180e
(imenu--generic-function): The official position of a
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
821 (setq beg (copy-marker beg))) |
58743
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
822 (let ((item |
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
823 (if function |
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
824 (nconc (list (match-string-no-properties index) |
61769
ff6d0a7e180e
(imenu--generic-function): The official position of a
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
825 beg function) |
58743
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
826 rest) |
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
827 (cons (match-string-no-properties index) |
61769
ff6d0a7e180e
(imenu--generic-function): The official position of a
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
828 beg))) |
58743
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
829 ;; This is the desired submenu, |
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
830 ;; starting with its title (or nil). |
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
831 (menu (assoc menu-title index-alist))) |
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
832 ;; Insert the item unless it is already present. |
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
833 (unless (member item (cdr menu)) |
6abce81016a6
(imenu--generic-function): Delete code to exclude matches in comments.
Richard M. Stallman <rms@gnu.org>
parents:
58489
diff
changeset
|
834 (setcdr menu |
61769
ff6d0a7e180e
(imenu--generic-function): The official position of a
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
835 (cons item (cdr menu))))) |
ff6d0a7e180e
(imenu--generic-function): The official position of a
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
836 ;; Go to the start of the match, to make sure we |
ff6d0a7e180e
(imenu--generic-function): The official position of a
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
837 ;; keep making progress backwards. |
ff6d0a7e180e
(imenu--generic-function): The official position of a
Richard M. Stallman <rms@gnu.org>
parents:
59996
diff
changeset
|
838 (goto-char start)))) |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
839 (set-syntax-table old-table))) |
14726
35e1cfdd29a4
(imenu--menubar-select): No longer interactive.
Richard M. Stallman <rms@gnu.org>
parents:
14725
diff
changeset
|
840 (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
|
841 ;; Sort each submenu by position. |
3812bb3ae006
(imenu--generic-function): Sort each submenu by position.
Karl Heuer <kwzh@gnu.org>
parents:
22798
diff
changeset
|
842 ;; 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
|
843 (dolist (item index-alist) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
844 (when (listp item) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
845 (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
|
846 (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
|
847 (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
|
848 (cdr main-element))))) |
10093
caafb376e619
(imenu-generic-expression): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
10072
diff
changeset
|
849 |
6230 | 850 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
851 ;;; | |
852 ;;; The main functions for this package! | |
853 ;;; | |
854 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
855 | |
41305
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
856 ;; 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
|
857 (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
|
858 "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
|
859 (catch 'found |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
860 (let ((case-fold-search t)) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
861 (if (assoc guess completions) guess |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
862 (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
|
863 (concat "\\`" (regexp-quote guess)) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
864 (concat (regexp-quote guess) "\\'") |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
865 (regexp-quote guess))) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
866 (dolist (x completions) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
867 (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
|
868 |
6230 | 869 (defun imenu--completion-buffer (index-alist &optional prompt) |
870 "Let the user select from INDEX-ALIST in a completion buffer with PROMPT. | |
871 | |
57417
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
872 Return one of the entries in index-alist or nil." |
6230 | 873 ;; 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
|
874 (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
|
875 choice |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
876 (prepared-index-alist |
46894
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
877 (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
|
878 (mapcar |
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
879 (lambda (item) |
63848
65786fe1837b
(imenu--completion-buffer): Change space constants followed by a sexp to "?\s ".
Juanma Barranquero <lekktu@gmail.com>
parents:
62568
diff
changeset
|
880 (cons (subst-char-in-string ?\s (aref imenu-space-replacement 0) |
46894
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
881 (car item)) |
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
882 (cdr item))) |
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
883 index-alist)))) |
41305
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
884 (when (stringp name) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
885 (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
|
886 (cond (prompt) |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
887 ((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
|
888 (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
|
889 (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
|
890 (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
|
891 ;; Display the completion buffer. |
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
892 (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
|
893 (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
|
894 (setq name (completing-read prompt |
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
895 prepared-index-alist |
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
896 nil t nil 'imenu--history-list name))) |
55826
e7bdb5b77df2
(imenu--menubar-select): Set imenu-menubar-modified-tick
Richard M. Stallman <rms@gnu.org>
parents:
52733
diff
changeset
|
897 |
57417
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
898 (when (stringp name) |
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
899 (setq choice (assoc name prepared-index-alist)) |
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
900 (if (imenu--subalist-p choice) |
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
901 (imenu--completion-buffer (cdr choice) prompt) |
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
902 choice)))) |
7319
cd73ba498964
(imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents:
6909
diff
changeset
|
903 |
6230 | 904 (defun imenu--mouse-menu (index-alist event &optional title) |
905 "Let the user select from a buffer index from a mouse menu. | |
906 | |
907 INDEX-ALIST is the buffer index and EVENT is a mouse event. | |
908 | |
16148
8ca583c0b988
(imenu): Tests for when to widen were backwards.
Richard M. Stallman <rms@gnu.org>
parents:
15929
diff
changeset
|
909 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
|
910 (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
|
911 (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
|
912 (map (imenu--create-keymap (car menu) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
913 (cdr (if (< 1 (length (cdr menu))) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
914 menu |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
915 (car (cdr menu))))))) |
41305
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
916 (popup-menu map event))) |
6230 | 917 |
6241 | 918 (defun imenu-choose-buffer-index (&optional prompt alist) |
6230 | 919 "Let the user select from a buffer index and return the chosen index. |
920 | |
921 If the user originally activated this function with the mouse, a mouse | |
922 menu is used. Otherwise a completion buffer is used and the user is | |
923 prompted with PROMPT. | |
924 | |
6241 | 925 If you call this function with index alist ALIST, then it lets the user |
926 select from ALIST. | |
927 | |
6909
9e59751db725
Require cl only at compile time.
Richard M. Stallman <rms@gnu.org>
parents:
6241
diff
changeset
|
928 With no index alist ALIST, it calls `imenu--make-index-alist' to |
6241 | 929 create the index alist. |
930 | |
46894
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
931 If `imenu-use-popup-menu' is non-nil, then the |
6230 | 932 completion buffer is always used, no matter if the mouse was used or |
933 not. | |
934 | |
16369
187e7c8aaff5
(imenu--make-index-alist): Add doc string.
Richard M. Stallman <rms@gnu.org>
parents:
16315
diff
changeset
|
935 The returned value is of the form (INDEX-NAME . INDEX-POSITION)." |
6230 | 936 (let (index-alist |
8296
b2b493c007ff
(imenu-choose-buffer-index): Use last-nonmenu-event
Richard M. Stallman <rms@gnu.org>
parents:
8256
diff
changeset
|
937 (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
|
938 (result t)) |
6230 | 939 ;; If selected by mouse, see to that the window where the mouse is |
940 ;; really is selected. | |
941 (and mouse-triggered | |
12396
d0c82df80d70
(imenu-choose-buffer-index): Understand that (menu-bar)
Richard M. Stallman <rms@gnu.org>
parents:
12394
diff
changeset
|
942 (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
|
943 (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
|
944 (or (framep window) (null window) (select-window window)))) |
6230 | 945 ;; Create a list for this buffer only when needed. |
946 (while (eq result t) | |
6241 | 947 (setq index-alist (if alist alist (imenu--make-index-alist))) |
6230 | 948 (setq result |
46894
f8b45e2dec81
(imenu-always-use-completion-buffer-p): Make obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43982
diff
changeset
|
949 (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
|
950 (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
|
951 (imenu--mouse-menu index-alist last-nonmenu-event) |
6230 | 952 (imenu--completion-buffer index-alist prompt))) |
57417
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
953 (and (equal result imenu--rescan-item) |
8408
109166e311ce
(imenu, imenu--flatten-index-alist): Add marker support.
Richard M. Stallman <rms@gnu.org>
parents:
8296
diff
changeset
|
954 (imenu--cleanup) |
57417
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
955 (setq result t imenu--index-alist nil))) |
6230 | 956 result)) |
957 | |
12394
4fbc70e4d5e7
(imenu-use-keymap-menu): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10795
diff
changeset
|
958 ;;;###autoload |
8408
109166e311ce
(imenu, imenu--flatten-index-alist): Add marker support.
Richard M. Stallman <rms@gnu.org>
parents:
8296
diff
changeset
|
959 (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
|
960 "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
|
961 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
|
962 See the command `imenu' for more information." |
13798
4eac65d000d3
(imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents:
13645
diff
changeset
|
963 (interactive "sImenu menu item name: ") |
20249
c42156dab61b
(imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents:
20051
diff
changeset
|
964 (if (or (and imenu-prev-index-position-function |
c42156dab61b
(imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents:
20051
diff
changeset
|
965 imenu-extract-index-name-function) |
c42156dab61b
(imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents:
20051
diff
changeset
|
966 imenu-generic-expression |
c42156dab61b
(imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents:
20051
diff
changeset
|
967 (not (eq imenu-create-index-function |
c42156dab61b
(imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents:
20051
diff
changeset
|
968 'imenu-default-create-index-function))) |
31560
5dd0eccb46c5
(imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents:
29552
diff
changeset
|
969 (let ((newmap (make-sparse-keymap))) |
5dd0eccb46c5
(imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents:
29552
diff
changeset
|
970 (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
|
971 (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
|
972 (define-key newmap [menu-bar index] |
32284
700a91f9a4b4
(imenu-add-to-menubar): Fix again.
Dave Love <fx@gnu.org>
parents:
32279
diff
changeset
|
973 `(menu-item ,name ,(make-sparse-keymap "Imenu"))) |
31560
5dd0eccb46c5
(imenu--truncate-items, imenu--cleanup)
Dave Love <fx@gnu.org>
parents:
29552
diff
changeset
|
974 (use-local-map newmap) |
20249
c42156dab61b
(imenu-default-create-index-function):
Karl Heuer <kwzh@gnu.org>
parents:
20051
diff
changeset
|
975 (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
|
976 (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
|
977 |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
978 ;;;###autoload |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
979 (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
|
980 "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
|
981 |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
982 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
|
983 (interactive) |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
984 (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
|
985 |
14642
01e8fdb45deb
(imenu-buffer-menubar): Add defvar.
Karl Heuer <kwzh@gnu.org>
parents:
14575
diff
changeset
|
986 (defvar imenu-buffer-menubar nil) |
01e8fdb45deb
(imenu-buffer-menubar): Add defvar.
Karl Heuer <kwzh@gnu.org>
parents:
14575
diff
changeset
|
987 |
43982
a40fcee55faa
(imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
43832
diff
changeset
|
988 (defvar imenu-menubar-modified-tick 0 |
56683
dee43d88905e
Several doc fixes: don't say variables are buffer-local.
Richard M. Stallman <rms@gnu.org>
parents:
56549
diff
changeset
|
989 "The value of (buffer-modified-tick) as of last call to `imenu-update-menubar'.") |
43982
a40fcee55faa
(imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
43832
diff
changeset
|
990 (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
|
991 |
13798
4eac65d000d3
(imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents:
13645
diff
changeset
|
992 (defun imenu-update-menubar () |
43982
a40fcee55faa
(imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
43832
diff
changeset
|
993 (when (and (current-local-map) |
a40fcee55faa
(imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
43832
diff
changeset
|
994 (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
|
995 (not (eq (buffer-modified-tick) |
a40fcee55faa
(imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
43832
diff
changeset
|
996 imenu-menubar-modified-tick))) |
a40fcee55faa
(imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
43832
diff
changeset
|
997 (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
|
998 (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
|
999 ;; 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
|
1000 ;; since the last time we did it. |
a40fcee55faa
(imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
43832
diff
changeset
|
1001 (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
|
1002 (let (menu menu1 old) |
a40fcee55faa
(imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
43832
diff
changeset
|
1003 (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
|
1004 (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
|
1005 (setq menu (imenu--split-menu index-alist |
a40fcee55faa
(imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
43832
diff
changeset
|
1006 (buffer-name))) |
51024
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
1007 (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
|
1008 (cdr (if (< 1 (length (cdr menu))) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
1009 menu |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
1010 (car (cdr menu)))) |
4efabfff9aa1
(imenu--split-menu): Remove unused var `count'.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
50846
diff
changeset
|
1011 'imenu--menubar-select)) |
43982
a40fcee55faa
(imenu-menubar-modified-tick): Renamed from
Richard M. Stallman <rms@gnu.org>
parents:
43832
diff
changeset
|
1012 (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
|
1013 (setcdr old (cdr menu1))))))) |
13798
4eac65d000d3
(imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents:
13645
diff
changeset
|
1014 |
4eac65d000d3
(imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents:
13645
diff
changeset
|
1015 (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
|
1016 "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
|
1017 (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
|
1018 (progn |
29e7001fecf0
(imenu--menubar-select): Handle the "rescan" item.
Richard M. Stallman <rms@gnu.org>
parents:
14733
diff
changeset
|
1019 (imenu--cleanup) |
55826
e7bdb5b77df2
(imenu--menubar-select): Set imenu-menubar-modified-tick
Richard M. Stallman <rms@gnu.org>
parents:
52733
diff
changeset
|
1020 ;; Make sure imenu-update-menubar redoes everything. |
e7bdb5b77df2
(imenu--menubar-select): Set imenu-menubar-modified-tick
Richard M. Stallman <rms@gnu.org>
parents:
52733
diff
changeset
|
1021 (setq imenu-menubar-modified-tick -1) |
14796
29e7001fecf0
(imenu--menubar-select): Handle the "rescan" item.
Richard M. Stallman <rms@gnu.org>
parents:
14733
diff
changeset
|
1022 (setq imenu--index-alist nil) |
55826
e7bdb5b77df2
(imenu--menubar-select): Set imenu-menubar-modified-tick
Richard M. Stallman <rms@gnu.org>
parents:
52733
diff
changeset
|
1023 (setq imenu--last-menubar-index-alist nil) |
41305
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
1024 (imenu-update-menubar) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
1025 t) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
1026 (imenu item) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
1027 nil)) |
8408
109166e311ce
(imenu, imenu--flatten-index-alist): Add marker support.
Richard M. Stallman <rms@gnu.org>
parents:
8296
diff
changeset
|
1028 |
17229
b48a8dd2d8ce
(imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents:
16698
diff
changeset
|
1029 (defun imenu-default-goto-function (name position &optional rest) |
57417
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
1030 "Move to the given position. |
21852
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
1031 |
5898cd2e4cd6
(imenu--generic-function): Doc fix. Rewritten to be faster.
Richard M. Stallman <rms@gnu.org>
parents:
20857
diff
changeset
|
1032 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
|
1033 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
|
1034 function placed in a special index-item." |
17307
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
1035 (if (or (< position (point-min)) |
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
1036 (> position (point-max))) |
17229
b48a8dd2d8ce
(imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents:
16698
diff
changeset
|
1037 ;; widen if outside narrowing |
b48a8dd2d8ce
(imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents:
16698
diff
changeset
|
1038 (widen)) |
17307
830ad59547e4
(imenu-default-goto-function): Simplify.
Richard M. Stallman <rms@gnu.org>
parents:
17230
diff
changeset
|
1039 (goto-char position)) |
17229
b48a8dd2d8ce
(imenu-scanning-message): Support for bigger numbers.
Richard M. Stallman <rms@gnu.org>
parents:
16698
diff
changeset
|
1040 |
7319
cd73ba498964
(imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents:
6909
diff
changeset
|
1041 ;;;###autoload |
12664
ce1cae301efe
(imenu--history-list): Don't make this buffer-local.
Richard M. Stallman <rms@gnu.org>
parents:
12635
diff
changeset
|
1042 (defun imenu (index-item) |
7319
cd73ba498964
(imenu): Renamed from goto-index-pos.
Richard M. Stallman <rms@gnu.org>
parents:
6909
diff
changeset
|
1043 "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
|
1044 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
|
1045 for more information." |
16698
13920eac02e0
(imenu-generic-expression): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
16612
diff
changeset
|
1046 (interactive (list (imenu-choose-buffer-index))) |
13798
4eac65d000d3
(imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents:
13645
diff
changeset
|
1047 ;; Convert a string to an alist element. |
4eac65d000d3
(imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents:
13645
diff
changeset
|
1048 (if (stringp index-item) |
4eac65d000d3
(imenu-update-menubar): New function.
Karl Heuer <kwzh@gnu.org>
parents:
13645
diff
changeset
|
1049 (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
|
1050 (when index-item |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
1051 (push-mark) |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
1052 (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
|
1053 (function |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
1054 (if is-special-item |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
1055 (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
|
1056 (position (if is-special-item |
71197bcff33c
(imenu--split-menu): Use dolist and copy-sequence.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
38412
diff
changeset
|
1057 (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
|
1058 (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
|
1059 (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
|
1060 (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
|
1061 |
29078 | 1062 (dolist (mess |
1063 '("^No items suitable for an index found in this buffer$" | |
1064 "^This buffer cannot use `imenu-default-create-index-function'$" | |
1065 "^The mode `.*' does not support Imenu$")) | |
1066 (add-to-list 'debug-ignored-errors mess)) | |
1067 | |
6230 | 1068 (provide 'imenu) |
1069 | |
57417
1389687cfa0a
(imenu--completion-buffer): Don't return t for rescan.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56683
diff
changeset
|
1070 ;; arch-tag: 98a2f5f5-4b91-4704-b18c-3aacf77d77a7 |
6230 | 1071 ;;; imenu.el ends here |