changeset 69148:ed7ce86c68db

(tags-completion-table): Do completion from all the tables in the current list, as documented in the manual.
author Francesco Potortì <pot@gnu.org>
date Sat, 25 Feb 2006 01:48:09 +0000
parents fd2452e681b8
children b5043066337b
files lisp/progmodes/etags.el
diffstat 1 files changed, 18 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/etags.el	Sat Feb 25 01:47:29 2006 +0000
+++ b/lisp/progmodes/etags.el	Sat Feb 25 01:48:09 2006 +0000
@@ -746,27 +746,25 @@
 ;; their tags included in the completion table.
 (defun tags-completion-table ()
   (or tags-completion-table
+      ;; No cached value for this buffer.
       (condition-case ()
-	  (prog2
-	   (message "Making tags completion table for %s..." buffer-file-name)
-	   (let ((included (tags-included-tables))
-		 (table (funcall tags-completion-table-function)))
-	     (save-excursion
-	       ;; Iterate over the list of included tables, and combine each
-	       ;; included table's completion obarray to the parent obarray.
-	       (while included
-		 ;; Visit the buffer.
-		 (let ((tags-file-name (car included)))
-		   (visit-tags-table-buffer 'same))
-		 ;; Recurse in that buffer to compute its completion table.
-		 (if (tags-completion-table)
-		     ;; Combine the tables.
-		     (mapatoms (lambda (sym) (intern (symbol-name sym) table))
-			       tags-completion-table))
-		 (setq included (cdr included))))
-	     (setq tags-completion-table table))
-	   (message "Making tags completion table for %s...done"
-		    buffer-file-name))
+	  (let (current-table combined-table)
+	    (message "Making tags completion table for %s..." buffer-file-name)
+	    (save-excursion
+	      ;; Iterate over the current list of tags tables.
+	      (while (visit-tags-table-buffer (and combined-table t))
+		;; Find possible completions in this table.
+		(setq current-table (funcall tags-completion-table-function))
+		;; Merge this buffer's completions into the combined table.
+		(if combined-table
+		    (mapatoms
+		     (lambda (sym) (intern (symbol-name sym) combined-table))
+		     current-table)
+		  (setq combined-table current-table))))
+	    (message "Making tags completion table for %s...done"
+		     buffer-file-name)
+	    ;; Cache the result a buffer-local variable.
+	    (setq tags-completion-table combined-table))
 	(quit (message "Tags completion table construction aborted.")
 	      (setq tags-completion-table nil)))))