1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-06 06:20:55 -08:00

* cedet/ede.el (global-ede-mode-map): Move menu to

global-ede-mode-map.
(ede-minor-mode, global-ede-mode): Use define-minor-mode.

* cedet/semantic.el (semantic-mode-map): Use cedet-menu-map.

* cedet/cedet.el (cedet-menu-map): New var.  Don't require
Semantic etc.
This commit is contained in:
Chong Yidong 2009-09-27 17:50:53 +00:00
parent 78f9c78d2d
commit 715f35a55d
4 changed files with 259 additions and 212 deletions

View file

@ -1,3 +1,14 @@
2009-09-27 Chong Yidong <cyd@stupidchicken.com>
* cedet/ede.el (global-ede-mode-map): Move menu to
global-ede-mode-map.
(ede-minor-mode, global-ede-mode): Use define-minor-mode.
* cedet/semantic.el (semantic-mode-map): Use cedet-menu-map.
* cedet/cedet.el (cedet-menu-map): New var. Don't require
Semantic etc.
2009-09-27 Chong Yidong <cyd@stupidchicken.com> 2009-09-27 Chong Yidong <cyd@stupidchicken.com>
* cedet/semantic/symref/list.el: Require semantic/complete. * cedet/semantic/symref/list.el: Require semantic/complete.

View file

@ -34,15 +34,11 @@
(eval-when-compile (eval-when-compile
(require 'cl)) (require 'cl))
(declare-function inversion-find-version "inversion")
(defconst cedet-version "1.0pre7" (defconst cedet-version "1.0pre7"
"Current version of CEDET.") "Current version of CEDET.")
(require 'eieio)
(require 'semantic)
(require 'srecode)
(require 'ede)
(require 'speedbar)
(defconst cedet-packages (defconst cedet-packages
`( `(
;;PACKAGE MIN-VERSION ;;PACKAGE MIN-VERSION
@ -54,7 +50,40 @@
(speedbar "1.0.3")) (speedbar "1.0.3"))
"Table of CEDET packages to install.") "Table of CEDET packages to install.")
(declare-function inversion-find-version "inversion") (defvar cedet-menu-map ;(make-sparse-keymap "CEDET menu")
(let ((map (make-sparse-keymap "CEDET menu")))
(define-key map [semantic-force-refresh] 'undefined)
(define-key map [semantic-edit-menu] 'undefined)
(define-key map [navigate-menu] 'undefined)
(define-key map [semantic-options-separator] 'undefined)
(define-key map [global-semantic-highlight-func-mode] 'undefined)
(define-key map [global-semantic-highlight-func-mode] 'undefined)
(define-key map [global-semantic-decoration-mode] 'undefined)
(define-key map [global-semantic-idle-completions-mode] 'undefined)
(define-key map [global-semantic-idle-summary-mode] 'undefined)
(define-key map [global-semanticdb-minor-mode] 'undefined)
(define-key map [global-semantic-idle-scheduler-mode] 'undefined)
(define-key map [semantic-menu-separator] '("--"))
(define-key map [semantic-mode]
'(menu-item "Enable parsers (Semantic)" semantic-mode
:help "Enable language parsers (Semantic)"
:visible (not (bound-and-true-p semantic-mode))))
(define-key map [cedet-menu-separator] 'undefined)
(define-key map [ede-mode]
'(menu-item "Enable Projects (EDE)" global-ede-mode
:help "Enable the Emacs Development Environment (EDE)"
:visible (not (bound-and-true-p global-ede-mode))))
(define-key map [ede-menu-separator] '("--"))
(define-key map [ede-find-file] 'undefined)
(define-key map [ede-speedbar] 'undefined)
(define-key map [ede] 'undefined)
(define-key map [ede-new] 'undefined)
(define-key map [ede-target-options] 'undefined)
(define-key map [ede-project-options] 'undefined)
(define-key map [ede-build-forms-menu] 'undefined)
map)
"Menu keymap for the CEDET package.
This is used by `semantic-mode' and `global-ede-mode'.")
(defun cedet-version () (defun cedet-version ()
"Display all active versions of CEDET and Dependant packages. "Display all active versions of CEDET and Dependant packages.

View file

@ -39,6 +39,7 @@
;; ;;
;; (global-ede-mode t) ;; (global-ede-mode t)
(require 'cedet)
(require 'eieio) (require 'eieio)
(require 'eieio-speedbar) (require 'eieio-speedbar)
(require 'ede/source) (require 'ede/source)
@ -549,14 +550,7 @@ Argument LIST-O-O is the list of objects to choose from."
;;; Menu and Keymap ;;; Menu and Keymap
(defvar ede-minor-mode nil (defvar ede-minor-mode-map
"Non-nil in EDE controlled buffers.")
(make-variable-buffer-local 'ede-minor-mode)
;; We don't want to waste space. There is a menu after all.
(add-to-list 'minor-mode-alist '(ede-minor-mode ""))
(defvar ede-minor-keymap
(let ((map (make-sparse-keymap)) (let ((map (make-sparse-keymap))
(pmap (make-sparse-keymap))) (pmap (make-sparse-keymap)))
(define-key pmap "e" 'ede-edit-file-target) (define-key pmap "e" 'ede-edit-file-target)
@ -576,32 +570,37 @@ Argument LIST-O-O is the list of objects to choose from."
map) map)
"Keymap used in project minor mode.") "Keymap used in project minor mode.")
(if ede-minor-keymap (defvar global-ede-mode-map
(progn (let ((map (make-sparse-keymap)))
(easy-menu-define (define-key map [menu-bar cedet-menu]
ede-minor-menu ede-minor-keymap "Project Minor Mode Menu" (cons "Development" cedet-menu-map))
'("Project" map)
( "Build" :filter ede-build-forms-menu ) "Keymap used in `global-ede-mode'")
( "Project Options" :filter ede-project-forms-menu )
( "Target Options" :filter ede-target-forms-menu )
[ "Create Project" ede-new (not ede-object) ]
[ "Load a project" ede t ]
;; [ "Select Active Target" 'undefined nil ]
;; [ "Remove Project" 'undefined nil ]
"---"
[ "Find File in Project..." ede-find-file t ]
( "Customize" :filter ede-customize-forms-menu )
[ "View Project Tree" ede-speedbar t ]
))
))
;; Allow re-insertion of a new keymap ;; Activate the EDE items in cedet-menu-map
(let ((a (assoc 'ede-minor-mode minor-mode-map-alist)))
(if a (define-key cedet-menu-map [ede-find-file]
(setcdr a ede-minor-keymap) '(menu-item "Find File in Project..." ede-find-file :enable ede-object))
(add-to-list 'minor-mode-map-alist (define-key cedet-menu-map [ede-speedbar]
(cons 'ede-minor-mode ede-minor-keymap)) '(menu-item "View Project Tree" ede-speedbar :enable ede-object))
)) (define-key cedet-menu-map [ede]
'(menu-item "Load Project" ede))
(define-key cedet-menu-map [ede-new]
'(menu-item "Create Project" ede-new
:enable (not ede-object)))
(define-key cedet-menu-map [ede-target-options]
'(menu-item "Target Options" ede-target-options
:filter ede-target-forms-menu))
(define-key cedet-menu-map [ede-project-options]
'(menu-item "Project Options" ede-project-options
:filter ede-project-forms-menu))
(define-key cedet-menu-map [ede-build-forms-menu]
'(menu-item "Build Project" ede-build-forms-menu
:filter ede-build-forms-menu
:enable ede-object))
(define-key cedet-menu-map [semantic-menu-separator] 'undefined)
(define-key cedet-menu-map [cedet-menu-separator] 'undefined)
(define-key cedet-menu-map [ede-menu-separator] '("--"))
(defun ede-menu-obj-of-class-p (class) (defun ede-menu-obj-of-class-p (class)
"Return non-nil if some member of `ede-object' is a child of CLASS." "Return non-nil if some member of `ede-object' is a child of CLASS."
@ -781,22 +780,20 @@ To be used in hook functions."
(eq major-mode 'vc-dired-mode)) (eq major-mode 'vc-dired-mode))
(ede-minor-mode 1))) (ede-minor-mode 1)))
(defun ede-minor-mode (&optional arg) (define-minor-mode ede-minor-mode
"Project minor mode. "Toggle EDE (Emacs Development Environment) minor mode.
If this file is contained, or could be contained in an EDE With non-nil argument ARG, enable EDE minor mode if ARG is
controlled project, then this mode should be active. positive; otherwise, disable it.
With argument ARG positive, turn on the mode. Negative, turn off the If this file is contained, or could be contained in an EDE
mode. nil means to toggle the mode." controlled project, then this mode is activated automatically
(interactive "P") provided `global-ede-mode' is enabled."
(if (or (eq major-mode 'dired-mode) :group 'ede
(cond ((or (eq major-mode 'dired-mode)
(eq major-mode 'vc-dired-mode)) (eq major-mode 'vc-dired-mode))
(ede-dired-minor-mode arg) (ede-dired-minor-mode (if ede-minor-mode 1 -1)))
(progn (ede-minor-mode
(setq ede-minor-mode (if (and (not ede-constructing)
(not (or (and (null arg) ede-minor-mode)
(<= (prefix-numeric-value arg) 0))))
(if (and ede-minor-mode (not ede-constructing)
(ede-directory-project-p default-directory t)) (ede-directory-project-p default-directory t))
(let* ((ROOT nil) (let* ((ROOT nil)
(proj (ede-directory-get-open-project default-directory (proj (ede-directory-get-open-project default-directory
@ -804,7 +801,6 @@ mode. nil means to toggle the mode."
(when (not proj) (when (not proj)
;; @todo - this could be wasteful. ;; @todo - this could be wasteful.
(setq proj (ede-load-project-file default-directory 'ROOT))) (setq proj (ede-load-project-file default-directory 'ROOT)))
(setq ede-object-project proj) (setq ede-object-project proj)
(setq ede-object-root-project (setq ede-object-root-project
(or ROOT (ede-project-root proj))) (or ROOT (ede-project-root proj)))
@ -813,8 +809,7 @@ mode. nil means to toggle the mode."
(ede-auto-add-to-target)) (ede-auto-add-to-target))
(ede-apply-target-options)) (ede-apply-target-options))
;; If we fail to have a project here, turn it back off. ;; If we fail to have a project here, turn it back off.
(if (not (interactive-p)) (ede-minor-mode -1)))))
(setq ede-minor-mode nil))))))
(defun ede-reset-all-buffers (onoff) (defun ede-reset-all-buffers (onoff)
"Reset all the buffers due to change in EDE. "Reset all the buffers due to change in EDE.
@ -827,15 +822,17 @@ ONOFF indicates enabling or disabling the mode."
(setq b (cdr b))))) (setq b (cdr b)))))
;;;###autoload ;;;###autoload
(defun global-ede-mode (arg) (define-minor-mode global-ede-mode
"Turn on variable `ede-minor-mode' mode when ARG is positive. "Toggle global EDE (Emacs Development Environment) mode.
If ARG is negative, disable. Toggle otherwise." With non-nil argument ARG, enable global EDE mode if ARG is
(interactive "P") positive; otherwise, disable it.
(if (not arg)
(if (member 'ede-turn-on-hook find-file-hook) This global minor mode enables `ede-minor-mode' in all buffers in
(global-ede-mode -1) an EDE controlled project."
(global-ede-mode 1)) :global t
(if (or (eq arg t) (> arg 0)) :group 'ede
(if global-ede-mode
;; Turn on global-ede-mode
(progn (progn
(add-hook 'semanticdb-project-predicate-functions 'ede-directory-project-p) (add-hook 'semanticdb-project-predicate-functions 'ede-directory-project-p)
(add-hook 'semanticdb-project-root-functions 'ede-toplevel-project-or-nil) (add-hook 'semanticdb-project-root-functions 'ede-toplevel-project-or-nil)
@ -843,15 +840,17 @@ If ARG is negative, disable. Toggle otherwise."
(add-hook 'find-file-hook 'ede-turn-on-hook) (add-hook 'find-file-hook 'ede-turn-on-hook)
(add-hook 'dired-mode-hook 'ede-turn-on-hook) (add-hook 'dired-mode-hook 'ede-turn-on-hook)
(add-hook 'kill-emacs-hook 'ede-save-cache) (add-hook 'kill-emacs-hook 'ede-save-cache)
(ede-load-cache)) (ede-load-cache)
(ede-reset-all-buffers 1))
;; Turn off global-ede-mode
(remove-hook 'semanticdb-project-predicate-functions 'ede-directory-project-p) (remove-hook 'semanticdb-project-predicate-functions 'ede-directory-project-p)
(remove-hook 'semanticdb-project-root-functions 'ede-toplevel-project-or-nil) (remove-hook 'semanticdb-project-root-functions 'ede-toplevel-project-or-nil)
(remove-hook 'ecb-source-path-functions 'ede-ecb-project-paths) (remove-hook 'ecb-source-path-functions 'ede-ecb-project-paths)
(remove-hook 'find-file-hook 'ede-turn-on-hook) (remove-hook 'find-file-hook 'ede-turn-on-hook)
(remove-hook 'dired-mode-hook 'ede-turn-on-hook) (remove-hook 'dired-mode-hook 'ede-turn-on-hook)
(remove-hook 'kill-emacs-hook 'ede-save-cache) (remove-hook 'kill-emacs-hook 'ede-save-cache)
(ede-save-cache)) (ede-save-cache)
(ede-reset-all-buffers arg))) (ede-reset-all-buffers -1)))
(defvar ede-ignored-file-alist (defvar ede-ignored-file-alist
'( "\\.cvsignore$" '( "\\.cvsignore$"

View file

@ -30,6 +30,7 @@
;; designed to handle typical functional and object oriented languages. ;; designed to handle typical functional and object oriented languages.
(require 'assoc) (require 'assoc)
(require 'cedet)
(require 'semantic/tag) (require 'semantic/tag)
(require 'semantic/lex) (require 'semantic/lex)
@ -830,14 +831,43 @@ a START and END part."
Throw away all the old tags, and recreate the tag database." Throw away all the old tags, and recreate the tag database."
(interactive) (interactive)
(semantic-clear-toplevel-cache) (semantic-clear-toplevel-cache)
(semantic-fetch-tags)) (semantic-fetch-tags)
(message "Buffer reparsed."))
(defvar semantic-mode-map (defvar semantic-mode-map
(let ((map (make-sparse-keymap)) (let ((map (make-sparse-keymap)))
(menu (make-sparse-keymap "Semantic")) ;; Key bindings:
(navigate-menu (make-sparse-keymap "Navigate Tags")) ;; (define-key km "f" 'senator-search-set-tag-class-filter)
;; (define-key km "i" 'senator-isearch-toggle-semantic-mode)
(define-key map "\C-c,j" 'semantic-complete-jump-local)
(define-key map "\C-c,J" 'semantic-complete-jump)
(define-key map "\C-c,g" 'semantic-symref-symbol)
(define-key map "\C-c,G" 'semantic-symref)
(define-key map "\C-c,p" 'senator-previous-tag)
(define-key map "\C-c,n" 'senator-next-tag)
(define-key map "\C-c,u" 'senator-go-to-up-reference)
(define-key map "\C-c, " 'semantic-complete-analyze-inline)
(define-key map "\C-c,\C-w" 'senator-kill-tag)
(define-key map "\C-c,\M-w" 'senator-copy-tag)
(define-key map "\C-c,\C-y" 'senator-yank-tag)
(define-key map "\C-c,r" 'senator-copy-tag-to-register)
(define-key map [?\C-c ?, up] 'senator-transpose-tags-up)
(define-key map [?\C-c ?, down] 'senator-transpose-tags-down)
(define-key map "\C-c,l" 'semantic-analyze-possible-completions)
;; This hack avoids showing the CEDET menu twice if ede-minor-mode
;; and Semantic are both enabled. Is there a better way?
(define-key map [menu-bar cedet-menu]
(list 'menu-item "Development" cedet-menu-map
:enable (quote (not (bound-and-true-p global-ede-mode)))))
;; (define-key km "-" 'senator-fold-tag)
;; (define-key km "+" 'senator-unfold-tag)
map))
;; Activate the Semantic items in cedet-menu-map
(let ((navigate-menu (make-sparse-keymap "Navigate Tags"))
(edit-menu (make-sparse-keymap "Edit Tags"))) (edit-menu (make-sparse-keymap "Edit Tags")))
;; Edit Tags submenu:
(define-key edit-menu [semantic-analyze-possible-completions] (define-key edit-menu [semantic-analyze-possible-completions]
'(menu-item "List Completions" semantic-analyze-possible-completions '(menu-item "List Completions" semantic-analyze-possible-completions
:help "Display a list of completions for the tag at point")) :help "Display a list of completions for the tag at point"))
@ -873,6 +903,7 @@ Throw away all the old tags, and recreate the tag database."
:active (semantic-current-tag) :active (semantic-current-tag)
:help "Kill the current tag, and copy it to the tag ring")) :help "Kill the current tag, and copy it to the tag ring"))
;; Navigate Tags submenu:
(define-key navigate-menu [senator-narrow-to-defun] (define-key navigate-menu [senator-narrow-to-defun]
'(menu-item "Narrow to Tag" senator-narrow-to-defun '(menu-item "Narrow to Tag" senator-narrow-to-defun
:active (semantic-current-tag) :active (semantic-current-tag)
@ -900,75 +931,52 @@ Throw away all the old tags, and recreate the tag database."
'(menu-item "Previous Tag" senator-previous-tag '(menu-item "Previous Tag" senator-previous-tag
:help "Go to the previous tag")) :help "Go to the previous tag"))
(define-key menu [semantic-force-refresh] ;; Top level menu items:
(define-key cedet-menu-map [semantic-force-refresh]
'(menu-item "Reparse Buffer" semantic-force-refresh '(menu-item "Reparse Buffer" semantic-force-refresh
:help "Force a full reparse of the current buffer.")) :help "Force a full reparse of the current buffer."))
(define-key menu [semantic-refresh-separator] (define-key cedet-menu-map [semantic-edit-menu]
'("--"))
(define-key menu [edit-menu]
(cons "Edit Tags" edit-menu)) (cons "Edit Tags" edit-menu))
(define-key menu [navigate-menu] (define-key cedet-menu-map [navigate-menu]
(cons "Navigate Tags" navigate-menu)) (cons "Navigate Tags" navigate-menu))
(define-key menu [semantic-options-separator] (define-key cedet-menu-map [semantic-options-separator]
'("--")) '("--"))
(define-key menu [global-semantic-highlight-func-mode] (define-key cedet-menu-map [global-semantic-highlight-func-mode]
(menu-bar-make-mm-toggle (menu-bar-make-mm-toggle
global-semantic-highlight-func-mode global-semantic-highlight-func-mode
"Highlight Current Function" "Highlight Current Function"
"Highlight the tag at point")) "Highlight the tag at point"))
(define-key menu [global-semantic-decoration-mode] (define-key cedet-menu-map [global-semantic-decoration-mode]
(menu-bar-make-mm-toggle (menu-bar-make-mm-toggle
global-semantic-decoration-mode global-semantic-decoration-mode
"Decorate Tags" "Decorate Tags"
"Decorate tags based on various attributes")) "Decorate tags based on various attributes"))
(define-key menu [global-semantic-idle-completions-mode] (define-key cedet-menu-map [global-semantic-idle-completions-mode]
(menu-bar-make-mm-toggle (menu-bar-make-mm-toggle
global-semantic-idle-completions-mode global-semantic-idle-completions-mode
"Show Tag Completions" "Show Tag Completions"
"Show tag completions when idle")) "Show tag completions when idle"))
(define-key menu [global-semantic-idle-summary-mode] (define-key cedet-menu-map [global-semantic-idle-summary-mode]
(menu-bar-make-mm-toggle (menu-bar-make-mm-toggle
global-semantic-idle-summary-mode global-semantic-idle-summary-mode
"Show Tag Summaries" "Show Tag Summaries"
"Show tag summaries when idle")) "Show tag summaries when idle"))
(define-key menu [global-semanticdb-minor-mode] (define-key cedet-menu-map [global-semanticdb-minor-mode]
'(menu-item "Semantic Database" global-semanticdb-minor-mode '(menu-item "Semantic Database" global-semanticdb-minor-mode
:help "Store tag information in a database" :help "Store tag information in a database"
:button (:toggle . (semanticdb-minor-mode-p)))) :button (:toggle . (semanticdb-minor-mode-p))))
(define-key menu [global-semantic-idle-scheduler-mode] (define-key cedet-menu-map [global-semantic-idle-scheduler-mode]
(menu-bar-make-mm-toggle (menu-bar-make-mm-toggle
global-semantic-idle-scheduler-mode global-semantic-idle-scheduler-mode
"Reparse When Idle" "Reparse When Idle"
"Keep a buffer's parse tree up to date when idle")) "Keep a buffer's parse tree up to date when idle"))
(define-key map [menu-bar semantic] (define-key cedet-menu-map [ede-menu-separator] 'undefined)
(cons "Development" menu)) (define-key cedet-menu-map [cedet-menu-separator] 'undefined)
(define-key cedet-menu-map [semantic-menu-separator] '("--")))
;; Key bindings:
;; (define-key km "f" 'senator-search-set-tag-class-filter)
;; (define-key km "i" 'senator-isearch-toggle-semantic-mode)
(define-key map "\C-c,j" 'semantic-complete-jump-local)
(define-key map "\C-c,J" 'semantic-complete-jump)
(define-key map "\C-c,g" 'semantic-symref-symbol)
(define-key map "\C-c,G" 'semantic-symref)
(define-key map "\C-c,p" 'senator-previous-tag)
(define-key map "\C-c,n" 'senator-next-tag)
(define-key map "\C-c,u" 'senator-go-to-up-reference)
(define-key map "\C-c, " 'semantic-complete-analyze-inline)
(define-key map "\C-c,\C-w" 'senator-kill-tag)
(define-key map "\C-c,\M-w" 'senator-copy-tag)
(define-key map "\C-c,\C-y" 'senator-yank-tag)
(define-key map "\C-c,r" 'senator-copy-tag-to-register)
(define-key map [?\C-c ?, up] 'senator-transpose-tags-up)
(define-key map [?\C-c ?, down] 'senator-transpose-tags-down)
(define-key map "\C-c,l" 'semantic-analyze-possible-completions)
;; (define-key km "-" 'senator-fold-tag)
;; (define-key km "+" 'senator-unfold-tag)
map))
;; The `semantic-mode' command, in conjuction with the ;; The `semantic-mode' command, in conjuction with the
;; `semantic-default-submodes' variable, are used to collectively ;; `semantic-default-submodes' variable, toggles Semantic's various
;; toggle Semantic's various auxilliary minor modes. ;; auxilliary minor modes.
(defvar semantic-load-system-cache-loaded nil (defvar semantic-load-system-cache-loaded nil
"Non nil when the Semantic system caches have been loaded. "Non nil when the Semantic system caches have been loaded.