annotate lisp/cedet/semantic/imenu.el @ 109807:88276a8b38b9

* net/tramp.el (tramp-handle-make-symbolic-link): Flush file properties. (tramp-handle-process-file): Call the program in a subshell, in order to preserve working directory. (tramp-action-password): Hide password prompt before next run. (tramp-process-actions): Widen connection buffer for the trace.
author Michael Albinus <albinus@detlef>
date Tue, 17 Aug 2010 06:52:16 +0200
parents 719f64798991
children a5ad4f188e19
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
107497
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1 ;;; semantic/imenu.el --- Use Semantic as an imenu tag generator
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3 ;;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2010
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
4 ;; Free Software Foundation, Inc.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
5
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
6 ;; Author: Eric M. Ludlam <zappo@gnu.org>
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
7 ;; Maintainer: Eric Ludlam
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
8
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
10
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
13 ;; the Free Software Foundation, either version 3 of the License, or
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
14 ;; (at your option) any later version.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
15
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
19 ;; GNU General Public License for more details.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
20
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
23
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
24 ;;; Commentary:
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
25 ;;
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
26 ;; This support function can be used in any buffer which supports
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
27 ;; the bovinator to create the imenu index.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
28 ;;
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
29 ;; To use this in a buffer, do this in a hook.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
30 ;;
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
31 ;; (add-hook 'mode-hook
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
32 ;; (lambda ()
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
33 ;; (setq imenu-create-index-function 'semantic-create-imenu-index)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
34 ;; ))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
35
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
36 (require 'semantic)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
37 (require 'semantic/format)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
38 (require 'semantic/db)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
39 (require 'semantic/db-file)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
40 (require 'semantic/sort)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
41 (require 'imenu)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
42
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
43 (declare-function pulse-momentary-highlight-one-line "pulse" (o &optional face))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
44 (declare-function semanticdb-semantic-init-hook-fcn "db-mode")
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
45
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
46 ;; Because semantic imenu tags will hose the current imenu handling
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
47 ;; code in speedbar, force semantic/sb in.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
48 (if (featurep 'speedbar)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
49 (require 'semantic/sb)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
50 (add-hook 'speedbar-load-hook (lambda () (require 'semantic/sb))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
51
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
52 (defgroup semantic-imenu nil
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
53 "Semantic interface to Imenu."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
54 :group 'semantic
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
55 :group 'imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
56 )
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
57
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
58 ;;;###autoload
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
59 (defcustom semantic-imenu-summary-function 'semantic-format-tag-abbreviate
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
60 "*Function to use when creating items in Imenu.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
61 Some useful functions are found in `semantic-format-tag-functions'."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
62 :group 'semantic-imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
63 :type semantic-format-tag-custom-list)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
64 (make-variable-buffer-local 'semantic-imenu-summary-function)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
65
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
66 ;;;###autoload
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
67 (defcustom semantic-imenu-bucketize-file t
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
68 "*Non-nil if tags in a file are to be grouped into buckets."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
69 :group 'semantic-imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
70 :type 'boolean)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
71 (make-variable-buffer-local 'semantic-imenu-bucketize-file)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
72
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
73 (defcustom semantic-imenu-adopt-external-members t
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
74 "*Non-nil if types in a file should adopt externally defined members.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
75 C++ and CLOS can define methods that are not in the body of a class
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
76 definition."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
77 :group 'semantic-imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
78 :type 'boolean)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
79
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
80 (defcustom semantic-imenu-buckets-to-submenu t
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
81 "*Non-nil if buckets of tags are to be turned into submenus.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
82 This option is ignored if `semantic-imenu-bucketize-file' is nil."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
83 :group 'semantic-imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
84 :type 'boolean)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
85 (make-variable-buffer-local 'semantic-imenu-buckets-to-submenu)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
86
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
87 ;;;###autoload
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
88 (defcustom semantic-imenu-expand-type-members t
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
89 "*Non-nil if types should have submenus with members in them."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
90 :group 'semantic-imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
91 :type 'boolean)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
92 (make-variable-buffer-local 'semantic-imenu-expand-type-members)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
93 (semantic-varalias-obsolete 'semantic-imenu-expand-type-parts
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
94 'semantic-imenu-expand-type-members "23.2")
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
95
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
96 (defcustom semantic-imenu-bucketize-type-members t
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
97 "*Non-nil if members of a type should be grouped into buckets.
107760
719f64798991 Fix typos in semantic/imenu.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 107499
diff changeset
98 A nil value means to keep them in the same order.
107497
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
99 Overriden to nil if `semantic-imenu-bucketize-file' is nil."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
100 :group 'semantic-imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
101 :type 'boolean)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
102 (make-variable-buffer-local 'semantic-imenu-bucketize-type-parts)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
103 (semantic-varalias-obsolete 'semantic-imenu-bucketize-type-parts
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
104 'semantic-imenu-bucketize-type-members "23.2")
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
105
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
106 (defcustom semantic-imenu-sort-bucket-function nil
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
107 "*Function to use when sorting tags in the buckets of functions.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
108 See `semantic-bucketize' and the FILTER argument for more details on this function."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
109 :group 'semantic-imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
110 :type '(radio (const :tag "No Sorting" nil)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
111 (const semantic-sort-tags-by-name-increasing)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
112 (const semantic-sort-tags-by-name-decreasing)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
113 (const semantic-sort-tags-by-type-increasing)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
114 (const semantic-sort-tags-by-type-decreasing)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
115 (const semantic-sort-tags-by-name-increasing-ci)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
116 (const semantic-sort-tags-by-name-decreasing-ci)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
117 (const semantic-sort-tags-by-type-increasing-ci)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
118 (const semantic-sort-tags-by-type-decreasing-ci)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
119 (function)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
120 (make-variable-buffer-local 'semantic-imenu-sort-bucket-function)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
121
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
122 (defcustom semantic-imenu-index-directory nil
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
123 "*Non nil to index the entire directory for tags.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
124 Doesn't actually parse the entire directory, but displays tags for all files
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
125 currently listed in the current Semantic database.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
126 This variable has no meaning if semanticdb is not active."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
127 :group 'semantic-imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
128 :type 'boolean)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
129
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
130 (defcustom semantic-imenu-auto-rebuild-directory-indexes nil
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
131 "*If non-nil automatically rebuild directory index imenus.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
132 That is when a directory index imenu is updated, automatically rebuild
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
133 other buffer local ones based on the same semanticdb."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
134 :group 'semantic-imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
135 :type 'boolean)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
136
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
137 (defvar semantic-imenu-directory-current-file nil
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
138 "When building a file index, this is the file name currently being built.")
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
139
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
140 (defvar semantic-imenu-auto-rebuild-running nil
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
141 "Non-nil if `semantic-imenu-rebuild-directory-indexes' is running.")
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
142
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
143 ;;;###autoload
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
144 (defvar semantic-imenu-expandable-tag-classes '(type)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
145 "List of expandable tag classes.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
146 Tags of those classes will be given submenu with children.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
147 By default, a `type' has interesting children. In Texinfo, however, a
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
148 `section' has interesting children.")
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
149 (make-variable-buffer-local 'semantic-imenu-expandable-tag-classes)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
150 (semantic-varalias-obsolete 'semantic-imenu-expandable-token
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
151 'semantic-imenu-expandable-tag-classes "23.2")
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
152
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
153 ;;; Code:
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
154 (defun semantic-imenu-tag-overlay (tag)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
155 "Return the overlay belonging to tag.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
156 If TAG doesn't have an overlay, and instead as a vector of positions,
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
157 concoct a combination of file name, and position."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
158 (let ((o (semantic-tag-overlay tag)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
159 (if (not (semantic-overlay-p o))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
160 (let ((v (make-vector 3 nil)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
161 (aset v 0 semantic-imenu-directory-current-file)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
162 (aset v 1 (aref o 0))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
163 (aset v 2 (aref o 1))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
164 v)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
165 o)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
166
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
167
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
168 (defun semantic-imenu-goto-function (name position &optional rest)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
169 "Move point associated with NAME to POSITION.
107760
719f64798991 Fix typos in semantic/imenu.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 107499
diff changeset
170 Used to override function `imenu-default-goto-function' so that
719f64798991 Fix typos in semantic/imenu.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 107499
diff changeset
171 we can continue to use overlays to maintain the current position.
107497
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
172 Optional argument REST is some extra stuff."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
173 (require 'pulse)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
174 (if (semantic-overlay-p position)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
175 (let ((os (semantic-overlay-start position))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
176 (ob (semantic-overlay-buffer position)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
177 (if os
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
178 (progn
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
179 (if (not (eq ob (current-buffer)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
180 (switch-to-buffer ob))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
181 (imenu-default-goto-function name os rest)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
182 (pulse-momentary-highlight-one-line (point))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
183 )
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
184 ;; This should never happen, but check anyway.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
185 (message "Imenu is out of date, try again. (internal bug)")
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
186 (setq imenu--index-alist nil)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
187 ;; When the POSITION is actually a pair of numbers in an array, then
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
188 ;; the file isn't loaded into the current buffer.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
189 (if (vectorp position)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
190 (let ((file (aref position 0))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
191 (pos (aref position 1)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
192 (and file (find-file file))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
193 (imenu-default-goto-function name pos rest)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
194 (pulse-momentary-highlight-one-line (point))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
195 )
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
196 ;; When the POSITION is the symbol 'file-only' it means that this
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
197 ;; is a directory index entry and there is no tags in this
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
198 ;; file. So just jump to the beginning of the file.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
199 (if (eq position 'file-only)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
200 (progn
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
201 (find-file name)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
202 (imenu-default-goto-function name (point-min) rest)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
203 (pulse-momentary-highlight-one-line (point))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
204 )
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
205 ;; Probably POSITION don't came from a semantic imenu. Try
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
206 ;; the default imenu goto function.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
207 (condition-case nil
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
208 (progn
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
209 (imenu-default-goto-function name position rest)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
210 (pulse-momentary-highlight-one-line (point))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
211 )
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
212 (error
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
213 (message "Semantic Imenu override problem. (Internal bug)")
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
214 (setq imenu--index-alist nil)))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
215 ))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
216
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
217 (defun semantic-imenu-flush-fcn (&optional ignore)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
218 "This function is called as a hook to clear the imenu cache.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
219 It is cleared after any parsing.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
220 IGNORE arguments."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
221 (if (eq imenu-create-index-function 'semantic-create-imenu-index)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
222 (setq imenu--index-alist nil
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
223 imenu-menubar-modified-tick 0))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
224 (remove-hook 'semantic-after-toplevel-cache-change-hook
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
225 'semantic-imenu-flush-fcn t)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
226 (remove-hook 'semantic-after-partial-cache-change-hook
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
227 'semantic-imenu-flush-fcn t)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
228 )
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
229
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
230 ;;;###autoload
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
231 (defun semantic-create-imenu-index (&optional stream)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
232 "Create an imenu index for any buffer which supports Semantic.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
233 Uses the output of the Semantic parser to create the index.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
234 Optional argument STREAM is an optional stream of tags used to create menus."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
235 (setq imenu-default-goto-function 'semantic-imenu-goto-function)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
236 (prog1
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
237 (if (and semantic-imenu-index-directory
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
238 (featurep 'semanticdb)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
239 (semanticdb-minor-mode-p))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
240 (semantic-create-imenu-directory-index
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
241 (or stream (semantic-fetch-tags-fast)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
242 (semantic-create-imenu-index-1
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
243 (or stream (semantic-fetch-tags-fast)) nil))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
244 (semantic-make-local-hook 'semantic-after-toplevel-cache-change-hook)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
245 (add-hook 'semantic-after-toplevel-cache-change-hook
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
246 'semantic-imenu-flush-fcn nil t)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
247 (semantic-make-local-hook 'semantic-after-partial-cache-change-hook)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
248 (add-hook 'semantic-after-partial-cache-change-hook
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
249 'semantic-imenu-flush-fcn nil t)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
250
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
251 (defun semantic-create-imenu-directory-index (&optional stream)
107760
719f64798991 Fix typos in semantic/imenu.el.
Juanma Barranquero <lekktu@gmail.com>
parents: 107499
diff changeset
252 "Create an imenu tag index based on all files active in semanticdb.
107497
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
253 Optional argument STREAM is the stream of tags for the current buffer."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
254 (if (not semanticdb-current-database)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
255 (semantic-create-imenu-index-1 stream nil)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
256 ;; We have a database, list all files, with the current file on top.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
257 (let ((index (list
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
258 (cons (oref semanticdb-current-table file)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
259 (or (semantic-create-imenu-index-1 stream nil)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
260 ;; No tags in this file
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
261 'file-only))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
262 (tables (semanticdb-get-database-tables semanticdb-current-database)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
263 (while tables
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
264 (let ((semantic-imenu-directory-current-file
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
265 (oref (car tables) file))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
266 tags)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
267 (when (and (not (eq (car tables) semanticdb-current-table))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
268 (semanticdb-live-p (car tables))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
269 (semanticdb-equivalent-mode (car tables))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
270 )
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
271 (setq tags (oref (car tables) tags)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
272 index (cons (cons semantic-imenu-directory-current-file
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
273 (or (and tags
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
274 ;; don't pass nil stream because
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
275 ;; it will use the current
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
276 ;; buffer
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
277 (semantic-create-imenu-index-1
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
278 (oref (car tables) tags)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
279 nil))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
280 ;; no tags in the file
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
281 'file-only))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
282 index)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
283 (setq tables (cdr tables))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
284
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
285 ;; If enabled automatically rebuild other imenu directory
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
286 ;; indexes based on the same Semantic database
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
287 (or (not semantic-imenu-auto-rebuild-directory-indexes)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
288 ;; If auto rebuild already in progress does nothing
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
289 semantic-imenu-auto-rebuild-running
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
290 (unwind-protect
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
291 (progn
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
292 (setq semantic-imenu-auto-rebuild-running t)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
293 (semantic-imenu-rebuild-directory-indexes
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
294 semanticdb-current-database))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
295 (setq semantic-imenu-auto-rebuild-running nil)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
296
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
297 (nreverse index))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
298
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
299 (defun semantic-create-imenu-index-1 (stream &optional parent)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
300 "Create an imenu index for any buffer which supports Semantic.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
301 Uses the output of the Semantic parser to create the index.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
302 STREAM is a stream of tags used to create menus.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
303 Optional argument PARENT is a tag parent of STREAM."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
304 (let ((tags stream)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
305 (semantic-imenu-adopt-external-members
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
306 semantic-imenu-adopt-external-members))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
307 ;; If we should regroup, do so.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
308 (if semantic-imenu-adopt-external-members
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
309 (setq tags (semantic-adopt-external-members tags)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
310 ;; Don't allow recursion here.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
311 semantic-imenu-adopt-external-members nil))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
312 ;; Test for bucketing vs not.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
313 (if semantic-imenu-bucketize-file
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
314 (let ((buckets (semantic-bucketize
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
315 tags parent
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
316 semantic-imenu-sort-bucket-function))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
317 item name
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
318 index)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
319 (cond
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
320 ((null buckets)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
321 nil)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
322 ((or (cdr-safe buckets) ;; if buckets has more than one item in it.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
323 (not semantic-imenu-buckets-to-submenu)) ;; to force separators between buckets
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
324 (while buckets
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
325 (setq name (car (car buckets))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
326 item (cdr (car buckets)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
327 (if semantic-imenu-buckets-to-submenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
328 (progn
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
329 ;; Make submenus
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
330 (if item
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
331 (setq index
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
332 (cons (cons name
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
333 (semantic-create-imenu-subindex item))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
334 index))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
335 ;; Glom everything together with "---" between
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
336 (if item
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
337 (setq index
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
338 (append index
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
339 ;; do not create a menu separator in the parent menu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
340 ;; when creating a sub-menu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
341 (if (memq (semantic-tag-class (car item))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
342 semantic-imenu-expandable-tag-classes)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
343 (semantic-create-imenu-subindex item)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
344 (cons
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
345 '("---")
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
346 (semantic-create-imenu-subindex item)))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
347 ))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
348 (setq buckets (cdr buckets)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
349 (if semantic-imenu-buckets-to-submenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
350 (nreverse index)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
351 index))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
352 (t
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
353 (setq name (car (car buckets))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
354 item (cdr (car buckets)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
355 (semantic-create-imenu-subindex item))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
356 ;; Else, group everything together
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
357 (semantic-create-imenu-subindex tags))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
358
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
359 (defun semantic-create-imenu-subindex (tags)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
360 "From TAGS, create an imenu index of interesting things."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
361 (let ((notypecheck (not semantic-imenu-expand-type-members))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
362 children index tag parts)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
363 (while tags
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
364 (setq tag (car tags)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
365 children (semantic-tag-components-with-overlays tag))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
366 (if (and (not notypecheck)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
367 (memq (semantic-tag-class tag)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
368 semantic-imenu-expandable-tag-classes)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
369 children
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
370 )
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
371 ;; to keep an homogeneous menu organisation, type menu items
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
372 ;; always have a sub-menu with at least the *definition*
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
373 ;; item (even if the tag has no type components)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
374 (progn
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
375 (setq parts children)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
376 ;; There is options which create the submenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
377 ;; * Type has an overlay, but children do.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
378 ;; The type doesn't have to have it's own overlay,
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
379 ;; but a type with no overlay and no children should be
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
380 ;; invalid.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
381 (setq index
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
382 (cons
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
383 (cons
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
384 (funcall semantic-imenu-summary-function tag)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
385 ;; Add a menu for getting at the type definitions
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
386 (if (and parts
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
387 ;; Note to self: enable menu items for
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
388 ;; sub parts even if they are not proper
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
389 ;; tags.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
390 (semantic-tag-p (car parts)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
391 (let ((submenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
392 (if (and semantic-imenu-bucketize-type-members
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
393 semantic-imenu-bucketize-file)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
394 (semantic-create-imenu-index-1 parts tag)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
395 (semantic-create-imenu-subindex parts))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
396 ;; Only add a *definition* if we have a postion
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
397 ;; in that type tag.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
398 (if (semantic-tag-with-position-p tag)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
399 (cons
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
400 (cons "*definition*"
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
401 (semantic-imenu-tag-overlay tag))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
402 submenu)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
403 submenu))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
404 ;; There were no parts, or something like that, so
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
405 ;; instead just put the definition here.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
406 (if (semantic-tag-with-position-p tag)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
407 (semantic-imenu-tag-overlay tag)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
408 nil)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
409 ))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
410 index)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
411 (if (semantic-tag-with-position-p tag)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
412 (setq index (cons
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
413 (cons
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
414 (funcall semantic-imenu-summary-function tag)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
415 (semantic-imenu-tag-overlay tag))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
416 index))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
417 (setq tags (cdr tags)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
418 ;; `imenu--split-submenus' sort submenus according to
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
419 ;; `imenu-sort-function' setting and split them up if they are
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
420 ;; longer than `imenu-max-items'.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
421 (imenu--split-submenus (nreverse index))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
422
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
423 ;;; directory imenu rebuilding.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
424 ;;
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
425 (defun semantic-imenu-rebuild-directory-indexes (db)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
426 "Rebuild directory index imenus based on Semantic database DB."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
427 (let ((l (buffer-list))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
428 b)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
429 (while l
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
430 (setq b (car l)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
431 l (cdr l))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
432 (if (and (not (eq b (current-buffer)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
433 (buffer-live-p b))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
434 (with-current-buffer b
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
435 ;; If there is a buffer local Semantic index directory
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
436 ;; imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
437 (when (and (eq imenu-create-index-function
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
438 'semantic-create-imenu-index)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
439 semanticdb-current-database
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
440 (eq semanticdb-current-database db))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
441 ;; Rebuild the imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
442 (imenu--cleanup)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
443 (setq imenu--index-alist nil)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
444 (funcall
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
445 (if (fboundp 'imenu-menu-filter)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
446 ;; XEmacs imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
447 'imenu-menu-filter
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
448 ;; Emacs imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
449 'imenu-update-menubar))))))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
450
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
451 (defun semantic-imenu-semanticdb-hook ()
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
452 "Function to be called from `semanticdb-mode-hook'.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
453 Clears all imenu menus that may be depending on the database."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
454 (require 'semantic/db-mode)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
455 (semantic-map-buffers
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
456 #'(lambda ()
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
457 ;; Set up semanticdb environment if enabled.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
458 (if (semanticdb-minor-mode-p)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
459 (semanticdb-semantic-init-hook-fcn))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
460 ;; Clear imenu cache to redraw the imenu.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
461 (semantic-imenu-flush-fcn))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
462
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
463 (add-hook 'semanticdb-mode-hook 'semantic-imenu-semanticdb-hook)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
464
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
465 ;;; Interactive Utilities
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
466 ;;
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
467 (defun semantic-imenu-toggle-bucketize-file ()
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
468 "Toggle the ability of imenu to bucketize the current file."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
469 (interactive)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
470 (setq semantic-imenu-bucketize-file (not semantic-imenu-bucketize-file))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
471 ;; Force a rescan
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
472 (setq imenu--index-alist nil))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
473
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
474 (defun semantic-imenu-toggle-buckets-to-submenu ()
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
475 "Toggle the ability of imenu to turn buckets into submenus."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
476 (interactive)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
477 (setq semantic-imenu-buckets-to-submenu (not semantic-imenu-buckets-to-submenu))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
478 ;; Force a rescan
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
479 (setq imenu--index-alist nil))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
480
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
481 (defun semantic-imenu-toggle-bucketize-type-parts ()
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
482 "Toggle the ability of imenu to bucketize the current file."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
483 (interactive)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
484 (setq semantic-imenu-bucketize-type-members (not semantic-imenu-bucketize-type-members))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
485 ;; Force a rescan
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
486 (setq imenu--index-alist nil))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
487
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
488 ;;; Which function support
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
489 ;;
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
490 ;; The which-function library will display the current function in the
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
491 ;; mode line. It tries do do this through imenu. With a semantic parsed
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
492 ;; buffer, there is a much more efficient way of doing this.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
493 ;; Advise `which-function' so that we optionally use semantic tags
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
494 ;; instead, and get better stuff.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
495 (require 'advice)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
496
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
497 (defvar semantic-which-function 'semantic-default-which-function
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
498 "Function to convert semantic tags into `which-function' text.")
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
499
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
500 (defcustom semantic-which-function-use-color nil
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
501 "*Use color when displaying the current function with `which-function'."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
502 :group 'semantic-imenu
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
503 :type 'boolean)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
504
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
505 (defun semantic-default-which-function (taglist)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
506 "Convert TAGLIST into a string usable by `which-function'.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
507 Returns the first tag name in the list, unless it is a type,
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
508 in which case it concatenates them together."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
509 (cond ((eq (length taglist) 1)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
510 (semantic-format-tag-abbreviate
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
511 (car taglist) nil semantic-which-function-use-color))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
512 ((memq (semantic-tag-class (car taglist))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
513 semantic-imenu-expandable-tag-classes)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
514 (concat (semantic-format-tag-name
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
515 (car taglist) nil semantic-which-function-use-color)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
516 (car semantic-type-relation-separator-character)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
517 ;; recurse until we no longer have a type
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
518 ;; or any tags left.
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
519 (semantic-default-which-function (cdr taglist))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
520 (t (semantic-format-tag-abbreviate
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
521 (car taglist) nil semantic-which-function-use-color))))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
522
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
523 ;; (defadvice which-function (around semantic-which activate)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
524 ;; "Choose the function to display via semantic if it is currently active."
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
525 ;; (if (and (featurep 'semantic) semantic--buffer-cache)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
526 ;; (let ((ol (semantic-find-tag-by-overlay)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
527 ;; (setq ad-return-value (funcall semantic-which-function ol)))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
528 ;; ad-do-it))
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
529
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
530 (provide 'semantic/imenu)
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
531
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
532 ;; Local variables:
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
533 ;; generated-autoload-file: "loaddefs.el"
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
534 ;; generated-autoload-load-name: "semantic/imenu"
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
535 ;; End:
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
536
b09401cc9d96 * cedet/semantic/imenu.el: New file from the CEDET repository (Bug#5412).
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
537 ;;; semantic/imenu.el ends here