From: Chong Yidong Date: Sun, 4 Oct 2009 19:22:09 +0000 (+0000) Subject: * cedet/semantic.el (semantic-new-buffer-setup-functions): New X-Git-Tag: emacs-pretest-23.1.90~940 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=82481502da71772099ee46e36389b029d575d742;p=emacs.git * cedet/semantic.el (semantic-new-buffer-setup-functions): New option. (semantic-new-buffer-fcn): Call parser setup functions here. (semantic-mode): Don't call parser setup functions here, it's done in semantic-new-buffer-fcn now. * cedet/srecode/compile.el (srecode-compile-file): Call semantic-new-buffer-fcn if the buffer has not been parsed. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 61bdbf43c2d..8edd3764c63 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2009-10-04 Chong Yidong + + * cedet/semantic.el (semantic-new-buffer-setup-functions): New + option. + (semantic-new-buffer-fcn): Call parser setup functions here. + (semantic-mode): Don't call parser setup functions here, it's done + in semantic-new-buffer-fcn now. + + * cedet/srecode/compile.el (srecode-compile-file): Call + semantic-new-buffer-fcn if the buffer has not been parsed. + 2009-10-04 Chong Yidong * cedet/ede/pmake.el (ede-pmake-insert-variable-once): Delete. diff --git a/lisp/cedet/semantic.el b/lisp/cedet/semantic.el index e7f333def09..da557ecd453 100644 --- a/lisp/cedet/semantic.el +++ b/lisp/cedet/semantic.el @@ -260,6 +260,30 @@ setup to use Semantic." :group 'semantic :type 'hook) +(defcustom semantic-new-buffer-setup-functions + '((js-mode . wisent-javascript-setup-parser) + (java-mode . wisent-java-default-setup) + (scheme-mode . semantic-default-scheme-setup) + (c-mode . semantic-default-c-setup) + (c++-mode . semantic-default-c-setup) + (html-mode . semantic-default-html-setup) + (srecode-template-mode . srecode-template-setup-parser) + (makefile-automake-mode . semantic-default-make-setup) + (makefile-gmake-mode . semantic-default-make-setup) + (makefile-makepp-mode . semantic-default-make-setup) + (makefile-bsdmake-mode . semantic-default-make-setup) + (makefile-imake-mode . semantic-default-make-setup) + (makefile-mode . semantic-default-make-setup)) + "Alist of functions to call to set up Semantic parsing in the buffer. +Each element has the form (MODE . FN), where MODE is a value of +`major-mode' for the buffer and FN is the corresponding function +to call, with no arguments, to set up the parser. + +These functions are called by `semantic-new-buffer-fcn', before +`semantic-inhibit-functions'." + :group 'semantic + :type '(alist :key-type symbol :value-type function)) + (defvar semantic-init-hook nil "Hook run when a buffer is initialized with a parsing table.") @@ -299,6 +323,11 @@ That is if it is dirty or if the current parse tree isn't up to date." If the major mode is ready for Semantic, and no `semantic-inhibit-functions' disabled it, the current buffer is setup to use Semantic, and `semantic-init-hook' is run." + ;; In upstream Semantic, the parser setup functions are called from + ;; mode hooks. In the version bundled with Emacs, we do it here. + (let ((entry (assq major-mode semantic-new-buffer-setup-functions))) + (when entry + (funcall (cdr entry)))) ;; Do stuff if semantic was activated by a mode hook in this buffer, ;; and not afterwards disabled. (when (and semantic--parse-table @@ -1046,30 +1075,9 @@ Semantic mode. (file-exists-p semanticdb-default-system-save-directory)) (require 'semantic/db-ebrowse) (semanticdb-load-ebrowse-caches))) - (add-hook 'mode-local-init-hook 'semantic-new-buffer-fcn) - ;; Add mode-local hooks - (add-hook 'js-mode-hook 'wisent-javascript-setup-parser) - (add-hook 'ecmascript-mode-hook 'wisent-javascript-setup-parser) - (add-hook 'java-mode-hook 'wisent-java-default-setup) - (add-hook 'scheme-mode-hook 'semantic-default-scheme-setup) - (add-hook 'makefile-mode-hook 'semantic-default-make-setup) - (add-hook 'c-mode-hook 'semantic-default-c-setup) - (add-hook 'c++-mode-hook 'semantic-default-c-setup) - (add-hook 'html-mode-hook 'semantic-default-html-setup) - (add-hook 'html-mode-hook 'semantic-default-html-setup) - (add-hook 'srecode-template-mode-hook 'srecode-template-setup-parser)) + (add-hook 'mode-local-init-hook 'semantic-new-buffer-fcn)) ;; Disable all Semantic features. (remove-hook 'mode-local-init-hook 'semantic-new-buffer-fcn) - (remove-hook 'js-mode-hook 'wisent-javascript-setup-parser) - (remove-hook 'ecmascript-mode-hook 'wisent-javascript-setup-parser) - (remove-hook 'java-mode-hook 'wisent-java-default-setup) - (remove-hook 'scheme-mode-hook 'semantic-default-scheme-setup) - (remove-hook 'makefile-mode-hook 'semantic-default-make-setup) - (remove-hook 'c-mode-hook 'semantic-default-c-setup) - (remove-hook 'c++-mode-hook 'semantic-default-c-setup) - (remove-hook 'html-mode-hook 'semantic-default-html-setup) - (remove-hook 'srecode-template-mode-hook 'srecode-template-setup-parser) - ;; FIXME: handle semanticdb-load-ebrowse-caches (dolist (mode semantic-submode-list) (if (and (boundp mode) (eval mode)) diff --git a/lisp/cedet/srecode/compile.el b/lisp/cedet/srecode/compile.el index 51017d0c065..626d8c8d0d0 100644 --- a/lisp/cedet/srecode/compile.el +++ b/lisp/cedet/srecode/compile.el @@ -188,6 +188,8 @@ Arguments ESCAPE-START and ESCAPE-END are the current escape sequences in use." (set-buffer (semantic-find-file-noselect fname)) (set-buffer peb)) ;; Do the compile. + (unless (semantic-active-p) + (semantic-new-buffer-fcn)) (srecode-compile-templates) ;; Trash the buffer if we had to read it in. (if (not peb)