Mercurial > emacs
annotate lisp/cedet/semantic/imenu.el @ 110523:a5ad4f188e19
Synch Semantic to CEDET 1.0.
Move CEDET ChangeLog entries to new file lisp/cedet/ChangeLog.
* semantic.el (semantic-version): Update to 2.0.
(semantic-mode-map): Add "," and "m" bindings.
(navigate-menu): Update.
* semantic/symref.el (semantic-symref-calculate-rootdir):
New function.
(semantic-symref-detect-symref-tool): Use it.
* semantic/symref/grep.el (semantic-symref-grep-shell): New var.
(semantic-symref-perform-search): Use it. Calculate root dir with
semantic-symref-calculate-rootdir.
(semantic-symref-derive-find-filepatterns): Improve error message.
* semantic/symref/list.el
(semantic-symref-results-mode-map): New bindings.
(semantic-symref-auto-expand-results): New option.
(semantic-symref-results-dump): Obey auto-expand.
(semantic-symref-list-expand-all, semantic-symref-regexp)
(semantic-symref-list-contract-all)
(semantic-symref-list-map-open-hits)
(semantic-symref-list-update-open-hits)
(semantic-symref-list-create-macro-on-open-hit)
(semantic-symref-list-call-macro-on-open-hits): New functions.
(semantic-symref-list-menu-entries)
(semantic-symref-list-menu): New vars.
(semantic-symref-list-map-open-hits): Move cursor to beginning of
match before calling the mapped function.
* semantic/doc.el
(semantic-documentation-comment-preceeding-tag): Do nothing if the
mode doesn't provide comment-start-skip.
* semantic/scope.el
(semantic-analyze-scope-nested-tags-default): Strip duplicates.
(semantic-analyze-scoped-inherited-tag-map): Take the tag we are
looking for as part of the scoped tags list.
* semantic/html.el (semantic-default-html-setup): Add
senator-step-at-tag-classes.
* semantic/decorate/include.el
(semantic-decoration-on-unknown-includes): Change light bgcolor.
(semantic-decoration-on-includes-highlight-default): Check that
the include tag has a postion.
* semantic/complete.el (semantic-collector-local-members):
(semantic-complete-read-tag-local-members)
(semantic-complete-jump-local-members): New class and functions.
(semantic-complete-self-insert): Save excursion before completing.
* semantic/analyze/complete.el
(semantic-analyze-possible-completions-default): If no completions
are found, return the raw by-name-only completion list. Add FLAGS
arguments. Add support for 'no-tc (type constraint) and
'no-unique, or no stripping duplicates.
(semantic-analyze-possible-completions-default): Add FLAGS arg.
* semantic/util-modes.el
(semantic-stickyfunc-show-only-functions-p): New option.
(semantic-stickyfunc-fetch-stickyline): Don't show stickytext for
the very first line in a buffer.
* semantic/util.el (semantic-hack-search)
(semantic-recursive-find-nonterminal-by-name)
(semantic-current-tag-interactive): Deleted.
(semantic-describe-buffer): Fix expand-nonterminal. Add
lex-syntax-mods, type relation separator char, and command
separation char.
(semantic-sanity-check): Only message if called interactively.
* semantic/tag.el (semantic-tag-deep-copy-one-tag): Copy the
:filename property and the tag position.
* semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
Add recursion limit.
* semantic/imenu.el (semantic-imenu-bucketize-type-members):
Make this buffer local, not the obsoleted variable.
* semantic/idle.el: Add breadcrumbs support.
(semantic-idle-summary-current-symbol-info-default)
(semantic-idle-tag-highlight)
(semantic-idle-completion-list-default): Use
semanticdb-without-unloaded-file-searches for speed, and to
conform to the controls that specify if the idle timer is supposed
to be parsing unparsed includes.
(semantic-idle-symbol-highlight-face)
(semantic-idle-symbol-maybe-highlight): Rename from *-summary-*.
Callers changed.
(semantic-idle-work-parse-neighboring-files-flag): Default to nil.
(semantic-idle-work-update-headers-flag): New var.
(semantic-idle-work-for-one-buffer): Use it.
(semantic-idle-local-symbol-highlight): Rename from
semantic-idle-tag-highlight.
(semantic-idle-truncate-long-summaries): New option.
* semantic/ia.el (semantic-ia-cache)
(semantic-ia-get-completions): Deleted. Callers changed.
(semantic-ia-show-variants): New command.
(semantic-ia-show-doc): If doc is empty, don't make a temp buffer.
(semantic-ia-show-summary): If there isn't anything to show, say so.
* semantic/grammar.el (semantic-grammar-create-package):
Save the buffer even in batch mode.
* semantic/fw.el
(semanticdb-without-unloaded-file-searches): New macro.
* semantic/dep.el (semantic-dependency-find-file-on-path):
Fix case dereferencing ede-object when it is a list.
* semantic/db-typecache.el (semanticdb-expand-nested-tag)
(semanticdb-typecache-faux-namespace): New functions.
(semanticdb-typecache-file-tags)
(semanticdb-typecache-merge-streams): Use them.
(semanticdb-typecache-file-tags): When deriving tags from a file,
give the mode a chance to monkey with the tag copy.
(semanticdb-typecache-find-default): Wrap find in save-excursion.
(semanticdb-typecache-find-by-name-helper): Merge found names down.
* semantic/db-global.el
(semanticdb-enable-gnu-global-in-buffer): Don't show messages if
GNU Global is not available and we don't want to throw an error.
* semantic/db-find.el (semanticdb-find-result-nth-in-buffer):
When trying to normalize the tag to a buffer, don't error if
set-buffer method doesn't exist.
* semantic/db-file.el (semanticdb-save-db): Simplify msg.
* semantic/db.el (semanticdb-refresh-table): If forcing a
refresh on a file not in a buffer, use semantic-find-file-noselect
and delete the buffer after use.
(semanticdb-current-database-list): When calculating root via
hooks, force it through true-filename and skip the list of
possible roots.
* semantic/ctxt.el (semantic-ctxt-imported-packages): New.
* semantic/analyze/debug.el
(semantic-analyzer-debug-insert-tag): Reset standard output to
current buffer.
(semantic-analyzer-debug-global-symbol)
(semantic-analyzer-debug-missing-innertype): Change "prefix" to
"symbol" in messages.
* semantic/analyze/refs.el: (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): When calculating value, make sure
the found tag is 'similar' to the originating tag.
(semantic--analyze-refs-find-tags-with-parent): Attempt to
identify matches via imported symbols of parents.
(semantic--analyze-refs-full-lookup-with-parents): Do a deep
search during the brute search.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Be robust to
calculated scopes being nil.
* semantic/bovine/c.el (semantic-c-describe-environment): Add
project macro symbol array.
(semantic-c-parse-lexical-token): Add recursion limit.
(semantic-ctxt-imported-packages, semanticdb-expand-nested-tag):
New overrides.
(semantic-expand-c-tag-namelist): Split a full type from a typedef
out to its own tag.
(semantic-expand-c-tag-namelist): Do not split out a typedef'd
inline type if it is an anonymous type.
(semantic-c-reconstitute-token): Use the optional initializers as
a clue that some function is probably a constructor. When
defining the type of these constructors, split the parent name,
and use only the class part, if applicable.
* semantic/bovine/c-by.el:
* semantic/wisent/python-wy.el: Regenerate.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sat, 18 Sep 2010 22:49:54 -0400 |
parents | 719f64798991 |
children | 9814473572d4 |
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) |
110523
a5ad4f188e19
Synch Semantic to CEDET 1.0.
Chong Yidong <cyd@stupidchicken.com>
parents:
107760
diff
changeset
|
102 (make-variable-buffer-local 'semantic-imenu-bucketize-type-members) |
107497
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 |