]> code.delx.au - gnu-emacs-elpa/commitdiff
Merge branch 'master' of github.com:leoliu/ggtags
authorLeo Liu <sdl.web@gmail.com>
Tue, 5 Nov 2013 09:45:06 +0000 (17:45 +0800)
committerLeo Liu <sdl.web@gmail.com>
Tue, 5 Nov 2013 09:45:06 +0000 (17:45 +0800)
packages/ggtags/ggtags.el

index 96e17800200680486a225e11bc670a01bc05726d..c047d95c66a987b1af25c32c39fdafbc251d0b0b 100644 (file)
@@ -150,6 +150,12 @@ If an integer abbreviate only names longer than that number."
   :type 'boolean
   :group 'ggtags)
 
+(defcustom ggtags-global-treat-text nil
+  "Non-nil if Global should include matches from text files."
+  :safe 'booleanp
+  :type 'boolean
+  :group 'ggtags)
+
 (defcustom ggtags-mode-prefix-key "\C-c"
   "Key binding used for `ggtags-mode-prefix-map'.
 Users should change the value using `customize-variable' to
@@ -226,14 +232,6 @@ properly update `ggtags-mode-map'."
                        (list "GTAGSLABEL=ctags")))))
      ,@body))
 
-(defmacro ggtags-with-ctags-maybe (&rest body) ; XXX: remove
-  `(let ((process-environment
-          (if (and (ggtags-find-project)
-                   (ggtags-project-ctags-p (ggtags-find-project)))
-              (cons "GTAGSLABEL=ctags" process-environment)
-            process-environment)))
-     ,@body))
-
 (defun ggtags-list-of-string-p (xs)
   "Return non-nil if XS is a list of strings."
   (if (null xs)
@@ -272,22 +270,23 @@ properly update `ggtags-mode-map'."
 
 (defun ggtags-make-project (root)
   (check-type root string)
-  (let* ((root (file-truename (file-name-as-directory root)))
-         (has-rtags (> (length
-                        (split-string (let ((default-directory root))
-                                        (shell-command-to-string
-                                         "gtags -d GRTAGS | head -10"))
-                                      "\n" t))
-                       4))
+  (let* ((default-directory (file-truename (file-name-as-directory root)))
+         (rtags-size (nth 7 (file-attributes "GRTAGS")))
+         (has-rtags (when (and rtags-size (< rtags-size (* 32 1024 1024)))
+                      (with-demoted-errors
+                        (> (length
+                            (split-string
+                             (ggtags-process-string "gtags" "-d" "GRTAGS")
+                             "\n" t))
+                           4))))
          (oversize-p (pcase ggtags-oversize-limit
                        (`nil nil)
                        (`t t)
-                       (t (> (or (nth 7 (file-attributes
-                                         (expand-file-name "GTAGS" root)))
-                                 0)
+                       (t (> (or (nth 7 (file-attributes "GTAGS")) 0)
                              ggtags-oversize-limit)))))
-    (puthash root (ggtags-project--make
-                   :root root :has-rtags has-rtags :oversize-p oversize-p)
+    (puthash default-directory (ggtags-project--make
+                                :root default-directory :has-rtags has-rtags
+                                :oversize-p oversize-p)
              ggtags-projects)))
 
 (defvar-local ggtags-project nil)
@@ -315,7 +314,7 @@ properly update `ggtags-mode-map'."
   (let* ((default-directory (ggtags-current-project-root))
          ;; Not using `ggtags-with-process-environment' to preserve
          ;; environment variables that may be present in
-         ;; ggtags-process-environment.
+         ;; `ggtags-process-environment'.
          (process-environment
           (append ggtags-process-environment
                   process-environment
@@ -407,6 +406,7 @@ properly update `ggtags-mode-map'."
                           (and ggtags-global-has-color "--color")
                           (and ggtags-global-has-path-style
                                "--path-style=shorter")
+                          (and ggtags-global-treat-text "--other")
                           (pcase cmd
                             ((pred stringp) cmd)
                             (`definition "-d")
@@ -459,9 +459,9 @@ If point is at a definition tag, find references, and vice versa.
 With a prefix arg (non-nil DEFINITION) always find defintions."
   (interactive (list (ggtags-read-tag) current-prefix-arg))
   (if (or definition
+          (not buffer-file-name)
           (and (ggtags-find-project)
-               (not (ggtags-project-has-rtags (ggtags-find-project))))
-          (not buffer-file-name))
+               (not (ggtags-project-has-rtags (ggtags-find-project)))))
       (ggtags-find-tag 'definition name)
     (ggtags-find-tag (format "--from-here=%d:%s"
                              (line-number-at-pos)