diff options
Diffstat (limited to 'lisp/cedet/ede/emacs.el')
-rw-r--r-- | lisp/cedet/ede/emacs.el | 66 |
1 files changed, 23 insertions, 43 deletions
diff --git a/lisp/cedet/ede/emacs.el b/lisp/cedet/ede/emacs.el index 76925a66713..88df1d2963f 100644 --- a/lisp/cedet/ede/emacs.el +++ b/lisp/cedet/ede/emacs.el @@ -38,37 +38,12 @@ (declare-function semanticdb-refresh-table "semantic/db") ;;; Code: -(defvar ede-emacs-project-list nil - "List of projects created by option `ede-emacs-project'.") - -(defun ede-emacs-file-existing (dir) - "Find a Emacs project in the list of Emacs projects. -DIR is the directory to search from." - (let ((projs ede-emacs-project-list) - (ans nil)) - (while (and projs (not ans)) - (let ((root (ede-project-root-directory (car projs)))) - (when (string-match (concat "^" (regexp-quote root)) - (file-name-as-directory dir)) - (setq ans (car projs)))) - (setq projs (cdr projs))) - ans)) -;;;###autoload +;; @TODO - get rid of this. Stuck in loaddefs right now. + (defun ede-emacs-project-root (&optional dir) "Get the root directory for DIR." - (when (not dir) (setq dir default-directory)) - (let ((case-fold-search t) - (proj (ede-files-find-existing dir ede-emacs-project-list))) - (if proj - (ede-up-directory (file-name-directory - (oref proj :file))) - ;; No pre-existing project. Let's take a wild-guess if we have - ;; an Emacs project here. - (when (string-match "emacs[^/]*" dir) - (let ((base (substring dir 0 (match-end 0)))) - (when (file-exists-p (expand-file-name "src/emacs.c" base)) - base)))))) + nil) (defun ede-emacs-version (dir) "Find the Emacs version for the Emacs src in DIR. @@ -118,8 +93,8 @@ m4_define(\\[SXEM4CS_BETA_VERSION\\], \\[\\([0-9]+\\)\\])") ;; Return a tuple (cons emacs ver)))) -(defclass ede-emacs-project (ede-project eieio-instance-tracker) - ((tracking-symbol :initform 'ede-emacs-project-list) +(defclass ede-emacs-project (ede-project) + ( ) "Project Type for the Emacs source code." :method-invocation-order :depth-first) @@ -129,17 +104,15 @@ m4_define(\\[SXEM4CS_BETA_VERSION\\], \\[\\([0-9]+\\)\\])") Return nil if there isn't one. Argument DIR is the directory it is created for. ROOTPROJ is nil, since there is only one project." - (or (ede-files-find-existing dir ede-emacs-project-list) - ;; Doesn't already exist, so let's make one. - (let* ((vertuple (ede-emacs-version dir)) - (proj (ede-emacs-project - (car vertuple) - :name (car vertuple) - :version (cdr vertuple) - :directory (file-name-as-directory dir) - :file (expand-file-name "src/emacs.c" - dir)))) - (ede-add-project-to-global-list proj)))) + ;; Doesn't already exist, so let's make one. + (let* ((vertuple (ede-emacs-version dir))) + (ede-emacs-project + (car vertuple) + :name (car vertuple) + :version (cdr vertuple) + :directory (file-name-as-directory dir) + :file (expand-file-name "src/emacs.c" + dir)))) ;;;###autoload (ede-add-project-autoload @@ -147,8 +120,6 @@ ROOTPROJ is nil, since there is only one project." :name "EMACS ROOT" :file 'ede/emacs :proj-file "src/emacs.c" - :proj-root-dirmatch "emacs[^/]*" - :proj-root 'ede-emacs-project-root :load-type 'ede-emacs-load :class-sym 'ede-emacs-project :new-p nil @@ -302,6 +273,15 @@ Knows about how the Emacs source tree is organized." (ede-emacs-find-in-directories name dir dirs)) )) +;;; Command Support +;; +(defmethod project-rescan ((this ede-emacs-project)) + "Rescan this Emacs project from the sources." + (let ((ver (ede-emacs-version (ede-project-root-directory this)))) + (oset this name (car ver)) + (oset this version (cdr ver)) + )) + (provide 'ede/emacs) ;; Local variables: |