Mercurial > emacs
annotate lisp/cedet/semantic/db-mode.el @ 104436:b9b48267c7d3
cedet/semantic/db-mode.el: New file.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sun, 30 Aug 2009 14:37:55 +0000 |
parents | |
children | 902d22a2d922 |
rev | line source |
---|---|
104436
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1 ;;; semantic/db-mode.el --- Semanticdb Minor Mode |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3 ;; Copyright (C) 2008, 2009 Free Software Foundation, Inc. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
4 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
5 ;; Author: Eric M. Ludlam <eric@siege-engine.com> |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
6 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
7 ;; This file is part of GNU Emacs. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
8 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
9 ;; GNU Emacs is free software: you can redistribute it and/or modify |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
10 ;; it under the terms of the GNU General Public License as published by |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
11 ;; the Free Software Foundation, either version 3 of the License, or |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
12 ;; (at your option) any later version. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
13 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
14 ;; GNU Emacs is distributed in the hope that it will be useful, |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
17 ;; GNU General Public License for more details. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
18 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
19 ;; You should have received a copy of the GNU General Public License |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
20 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
21 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
22 ;;; Commentary: |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
23 ;; |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
24 ;; Major mode for managing Semantic Databases automatically. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
25 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
26 (require 'semantic/db) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
27 ;;; Code: |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
28 (defvar semanticdb-current-database nil |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
29 "For a given buffer, this is the currently active database.") |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
30 (make-variable-buffer-local 'semanticdb-current-database) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
31 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
32 (defvar semanticdb-current-table nil |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
33 "For a given buffer, this is the currently active database table.") |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
34 (make-variable-buffer-local 'semanticdb-current-table) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
35 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
36 (defcustom semanticdb-global-mode nil |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
37 "*If non-nil enable the use of `semanticdb-minor-mode'." |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
38 :group 'semantic |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
39 :type 'boolean |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
40 :require 'semantic/db |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
41 :initialize 'custom-initialize-default |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
42 :set (lambda (sym val) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
43 (global-semanticdb-minor-mode (if val 1 -1)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
44 (custom-set-default sym val))) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
45 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
46 (defcustom semanticdb-mode-hooks nil |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
47 "*Hooks run whenever `global-semanticdb-minor-mode' is run. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
48 Use `semanticdb-minor-mode-p' to determine if the mode has been turned |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
49 on or off." |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
50 :group 'semanticdb |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
51 :type 'hook) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
52 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
53 ;;; Start/Stop database use |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
54 ;; |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
55 (defvar semanticdb-hooks |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
56 '((semanticdb-semantic-init-hook-fcn semantic-init-db-hooks) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
57 (semanticdb-synchronize-table semantic-after-toplevel-cache-change-hook) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
58 (semanticdb-partial-synchronize-table semantic-after-partial-cache-change-hook) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
59 (semanticdb-revert-hook before-revert-hook) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
60 (semanticdb-kill-hook kill-buffer-hook) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
61 (semanticdb-kill-hook change-major-mode-hook) ;; Not really a kill, but we need the same effect. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
62 (semanticdb-kill-emacs-hook kill-emacs-hook) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
63 (semanticdb-save-all-db-idle auto-save-hook) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
64 ) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
65 "List of hooks and values to add/remove when configuring semanticdb.") |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
66 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
67 ;;; SEMANTICDB-MODE |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
68 ;; |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
69 (defun semanticdb-minor-mode-p () |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
70 "Return non-nil if `semanticdb-minor-mode' is active." |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
71 (member (car (car semanticdb-hooks)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
72 (symbol-value (car (cdr (car semanticdb-hooks)))))) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
73 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
74 (defun global-semanticdb-minor-mode (&optional arg) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
75 "Toggle the use of `semanticdb-minor-mode'. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
76 If ARG is positive, enable, if it is negative, disable. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
77 If ARG is nil, then toggle." |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
78 (interactive "P") |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
79 (if (not arg) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
80 (if (semanticdb-minor-mode-p) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
81 (setq arg -1) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
82 (setq arg 1))) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
83 (let ((fn 'add-hook) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
84 (h semanticdb-hooks) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
85 (changed nil)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
86 (if (< arg 0) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
87 (setq changed semanticdb-global-mode |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
88 semanticdb-global-mode nil |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
89 fn 'remove-hook) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
90 (setq changed (not semanticdb-global-mode) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
91 semanticdb-global-mode t)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
92 ;(message "ARG = %d" arg) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
93 (when changed |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
94 (while h |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
95 (funcall fn (car (cdr (car h))) (car (car h))) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
96 (setq h (cdr h))) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
97 ;; Call a hook |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
98 (run-hooks 'semanticdb-mode-hooks)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
99 )) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
100 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
101 (defun semanticdb-toggle-global-mode () |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
102 "Toggle use of the Semantic Database feature. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
103 Update the environment of Semantic enabled buffers accordingly." |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
104 (interactive) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
105 (if (semanticdb-minor-mode-p) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
106 ;; Save databases before disabling semanticdb. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
107 (semanticdb-save-all-db)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
108 ;; Toggle semanticdb minor mode. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
109 (global-semanticdb-minor-mode)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
110 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
111 ;;; Hook Functions: |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
112 ;; |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
113 ;; Functions used in hooks to keep SemanticDB operating. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
114 ;; |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
115 (defun semanticdb-semantic-init-hook-fcn () |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
116 "Function saved in `semantic-init-db-hooks'. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
117 Sets up the semanticdb environment." |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
118 ;; Only initialize semanticdb if we have a file name. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
119 ;; There is no reason to cache a tag table if there is no |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
120 ;; way to load it back in later. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
121 (when (buffer-file-name) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
122 (let* ((ans (semanticdb-create-table-for-file (buffer-file-name))) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
123 (cdb (car ans)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
124 (ctbl (cdr ans)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
125 ) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
126 ;; Get the current DB for this directory |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
127 (setq semanticdb-current-database cdb) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
128 ;; We set the major mode because we know what it is. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
129 (oset ctbl major-mode major-mode) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
130 ;; Local state |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
131 (setq semanticdb-current-table ctbl) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
132 ;; Try to swap in saved tags |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
133 (if (or (not (slot-boundp ctbl 'tags)) (not (oref ctbl tags)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
134 (/= (or (oref ctbl pointmax) 0) (point-max)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
135 ) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
136 (semantic-clear-toplevel-cache) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
137 ;; Unmatched syntax |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
138 (condition-case nil |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
139 (semantic-set-unmatched-syntax-cache |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
140 (oref ctbl unmatched-syntax)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
141 (unbound-slot |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
142 ;; Old version of the semanticdb table can miss the unmatched |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
143 ;; syntax slot. If so, just clear the unmatched syntax cache. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
144 (semantic-clear-unmatched-syntax-cache) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
145 ;; Make sure it has a value. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
146 (oset ctbl unmatched-syntax nil) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
147 )) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
148 ;; Keep lexical tables up to date. Don't load |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
149 ;; semantic-spp if it isn't needed. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
150 (let ((lt (oref ctbl lexical-table))) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
151 (when lt |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
152 (require 'semantic/lex-spp) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
153 (semantic-lex-spp-set-dynamic-table lt))) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
154 ;; Set the main tag cache. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
155 ;; This must happen after setting up buffer local variables |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
156 ;; since this will turn around and re-save those variables. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
157 (semantic--set-buffer-cache (oref ctbl tags)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
158 ;; Don't need it to be dirty. Set dirty due to hooks from above. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
159 (oset ctbl dirty nil) ;; Special case here. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
160 (oset ctbl buffer (current-buffer)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
161 ;; Bind into the buffer. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
162 (semantic--tag-link-cache-to-buffer) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
163 ) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
164 ))) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
165 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
166 (defun semanticdb-revert-hook () |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
167 "Hook run before a revert buffer. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
168 We can't track incremental changes due to a revert, so just clear the cache. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
169 This will prevent the next batch of hooks from wasting time parsing things |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
170 that don't need to be parsed." |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
171 (if (and (semantic-active-p) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
172 semantic--buffer-cache |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
173 semanticdb-current-table) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
174 (semantic-clear-toplevel-cache))) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
175 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
176 (defun semanticdb-kill-hook () |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
177 "Function run when a buffer is killed. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
178 If there is a semantic cache, slurp out the overlays, and store |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
179 it in our database. If that buffer has no cache, ignore it, we'll |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
180 handle it later if need be." |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
181 (when (and (semantic-active-p) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
182 semantic--buffer-cache |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
183 semanticdb-current-table) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
184 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
185 ;; Try to get a fast update. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
186 (semantic-fetch-tags-fast) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
187 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
188 ;; If the buffer is in a bad state, don't save anything... |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
189 (if (semantic-parse-tree-needs-rebuild-p) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
190 ;; If this is the case, don't save anything. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
191 (progn |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
192 (semantic-clear-toplevel-cache) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
193 (oset semanticdb-current-table pointmax 0) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
194 (oset semanticdb-current-table fsize 0) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
195 (oset semanticdb-current-table lastmodtime nil) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
196 ) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
197 ;; We have a clean buffer, save it off. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
198 (condition-case nil |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
199 (progn |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
200 (semantic--tag-unlink-cache-from-buffer) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
201 ;; Set pointmax only if we had some success in the unlink. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
202 (oset semanticdb-current-table pointmax (point-max)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
203 (let ((fattr (file-attributes |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
204 (semanticdb-full-filename |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
205 semanticdb-current-table)))) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
206 (oset semanticdb-current-table fsize (nth 7 fattr)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
207 (oset semanticdb-current-table lastmodtime (nth 5 fattr)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
208 (oset semanticdb-current-table buffer nil) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
209 )) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
210 ;; If this messes up, just clear the system |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
211 (error |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
212 (semantic-clear-toplevel-cache) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
213 (message "semanticdb: Failed to deoverlay tag cache."))) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
214 ) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
215 )) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
216 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
217 (defun semanticdb-kill-emacs-hook () |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
218 "Function called when Emacs is killed. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
219 Save all the databases." |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
220 (semanticdb-save-all-db)) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
221 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
222 ;;; SYNCHRONIZATION HOOKS |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
223 ;; |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
224 (defun semanticdb-synchronize-table (new-table) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
225 "Function run after parsing. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
226 Argument NEW-TABLE is the new table of tags." |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
227 (when semanticdb-current-table |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
228 (semanticdb-synchronize semanticdb-current-table new-table))) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
229 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
230 (defun semanticdb-partial-synchronize-table (new-table) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
231 "Function run after parsing. |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
232 Argument NEW-TABLE is the new table of tags." |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
233 (when semanticdb-current-table |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
234 (semanticdb-partial-synchronize semanticdb-current-table new-table))) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
235 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
236 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
237 (provide 'semantic/db-mode) |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
238 |
b9b48267c7d3
cedet/semantic/db-mode.el: New file.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
239 ;;; semantic/db-mode.el ends here |