]> code.delx.au - gnu-emacs/blobdiff - lisp/cedet/cedet-global.el
Merge from emacs-23
[gnu-emacs] / lisp / cedet / cedet-global.el
index 35a963af577b4881eabcde2a8f8f2996e7543411..8ac4ba1d0baa48c85532d1f8a691268f3791292c 100644 (file)
@@ -1,8 +1,9 @@
 ;;; cedet-global.el --- GNU Global support for CEDET.
 
-;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+;; Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <eric@siege-engine.com>
+;; Package: cedet
 
 ;; This file is part of GNU Emacs.
 
   :type 'string
   :group 'cedet)
 
+(defcustom cedet-global-gtags-command "gtags"
+  "Command name for the GNU Global gtags executable.
+GTAGS is used to create the tags table queried by the 'global' command."
+  :type 'string
+  :group 'cedet)
+
 ;;; Code:
 (defun cedet-gnu-global-search (searchtext texttype type scope)
   "Perform a search with GNU Global, return the created buffer.
@@ -67,8 +74,7 @@ SCOPE is the scope of the search, such as 'project or 'subdirs."
   "Call GNU Global with the list of FLAGS."
   (let ((b (get-buffer-create "*CEDET Global*"))
        (cd default-directory))
-    (save-excursion
-      (set-buffer b)
+    (with-current-buffer b
       (setq default-directory cd)
       (erase-buffer))
     (apply 'call-process cedet-global-command
@@ -76,17 +82,29 @@ SCOPE is the scope of the search, such as 'project or 'subdirs."
           flags)
     b))
 
+(defun cedet-gnu-global-gtags-call (flags)
+  "Create GNU Global TAGS using gtags with FLAGS."
+  (let ((b (get-buffer-create "*CEDET Global gtags*"))
+       (cd default-directory)
+       )
+    (with-current-buffer b
+      (setq default-directory cd)
+      (erase-buffer))
+    (apply 'call-process cedet-global-gtags-command
+          nil b nil
+          flags)
+    b))
+
 (defun cedet-gnu-global-expand-filename (filename)
   "Expand the FILENAME with GNU Global.
 Return a fully qualified filename."
   (interactive "sFile: ")
-  (let ((ans (save-excursion
-              (set-buffer (cedet-gnu-global-call (list "-Pa" filename)))
+  (let ((ans (with-current-buffer (cedet-gnu-global-call (list "-Pa" filename))
               (goto-char (point-min))
               (if (looking-at "global: ")
                   (error "GNU Global not available")
                 (split-string (buffer-string) "\n" t)))))
-    (when (interactive-p)
+    (when (called-interactively-p 'interactive)
       (if ans
          (if (= (length ans) 1)
              (message "%s" (car ans))
@@ -105,8 +123,7 @@ Return a fully qualified filename."
 If a default starting DIR is not specified, the current buffer's
 `default-directory' is used."
   (let ((default-directory (or dir default-directory)))
-    (save-excursion
-      (set-buffer (cedet-gnu-global-call (list "-pq")))
+    (with-current-buffer (cedet-gnu-global-call (list "-pq"))
       (goto-char (point-min))
       (when (not (eobp))
        (file-name-as-directory
@@ -125,11 +142,10 @@ return nil."
        (rev nil))
     (if (not b)
        (progn
-         (when (interactive-p)
+         (when (called-interactively-p 'interactive)
            (message "GNU Global not found."))
          nil)
-      (save-excursion
-       (set-buffer b)
+      (with-current-buffer b
        (goto-char (point-min))
        (re-search-forward "GNU GLOBAL \\([0-9.]+\\)" nil t)
        (setq rev (match-string 1))
@@ -139,7 +155,7 @@ return nil."
              (error "Version of GNU Global is %s.  Need at least %s"
                     rev cedet-global-min-version))
          ;; Else, return TRUE, as in good enough.
-         (when (interactive-p)
+         (when (called-interactively-p 'interactive)
            (message "GNU Global %s  - Good enough for CEDET." rev))
          t)))))
 
@@ -147,8 +163,7 @@ return nil."
   "Scan all the hits from the GNU Global output BUFFER."
   (let ((hits nil)
        (r1 "^\\([^ ]+\\) +\\([0-9]+\\) \\([^ ]+\\) "))
-    (save-excursion
-      (set-buffer buffer)
+    (with-current-buffer buffer
       (goto-char (point-min))
       (while (re-search-forward r1 nil t)
        (setq hits (cons (cons (string-to-number (match-string 2))
@@ -157,6 +172,19 @@ return nil."
       ;; Return the results
       (nreverse hits))))
 
+(defun cedet-gnu-global-create/update-database (&optional dir)
+  "Create a GNU Global database in DIR.
+If a database already exists, then just update it."
+  (interactive "DDirectory: ")
+  (let ((root (cedet-gnu-global-root dir)))
+    (if root (setq dir root))
+    (let ((default-directory dir))
+      (cedet-gnu-global-gtags-call
+       (when root
+        '("-i");; Incremental update flag.
+        )))))
+
 (provide 'cedet-global)
 
+;; arch-tag: 0d0d3ac2-91ef-4820-bb2b-1d59ccf38392
 ;;; cedet-global.el ends here