--- gtags.el.orig 2009-10-15 14:11:39.000000000 +0200 +++ gtags.el 2009-10-15 14:13:28.000000000 +0200 @@ -223,8 +223,10 @@ (gtags-completing 'gtags string predicate code)) (defun gtags-completing-gsyms (string predicate code) (gtags-completing 'gsyms string predicate code)) +(defun gtags-completing-files (string predicate code) + (gtags-completing 'files string predicate code)) ;; common part of completing-XXXX -;; flag: 'gtags or 'gsyms +;; flag: 'gtags or 'gsyms or 'files (defun gtags-completing (flag string predicate code) (let ((option "-c") (complete-list (make-vector 63 0)) @@ -233,11 +235,18 @@ (set-buffer (generate-new-buffer "*Completions*")) (if (eq flag 'gsyms) (setq option (concat option "s"))) + (if (eq flag 'files) + (setq option "-P")) (call-process "global" nil t nil option string) (goto-char (point-min)) - (while (looking-at gtags-symbol-regexp) - (intern (gtags-match-string 0) complete-list) - (forward-line)) + (if (eq flag 'files) + (while (looking-at (concat ".*\\(" string ".*\\)")) + (intern (gtags-match-string 1) complete-list) + (forward-line)) + (while (looking-at gtags-symbol-regexp) + (intern (gtags-match-string 0) complete-list) + (forward-line)) + ) (kill-buffer (current-buffer)) ; recover current buffer (set-buffer prev-buffer) @@ -349,7 +358,8 @@ (interactive) (let (tagname prompt input) (setq prompt "Find files: ") - (setq input (read-string prompt)) + (setq input (completing-read prompt 'gtags-completing-files + nil nil nil gtags-history-list)) (if (not (equal "" input)) (setq tagname input)) (gtags-push-context) (gtags-goto-tag tagname "P")))