changeset 450:0bac8c701777

*** empty log message ***
author Eric S. Raymond <esr@snark.thyrsus.com>
date Sun, 08 Dec 1991 10:11:17 +0000
parents 4a1a5ad2d9d0
children 1eb88445014d
files lisp/progmodes/etags.el
diffstat 1 files changed, 45 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/etags.el	Sun Dec 08 09:58:46 1991 +0000
+++ b/lisp/progmodes/etags.el	Sun Dec 08 10:11:17 1991 +0000
@@ -136,6 +136,51 @@
 	      default
 	    spec))))
 
+(defun find-tag-noselect (tagname exact &optional next)
+  "Find a tag and return its buffer, but don't select or display it."
+  (let (buffer file linebeg startpos)
+    (save-excursion
+      (visit-tags-table-buffer)
+      (if (not next)
+	  (goto-char (point-min))
+	(setq tagname last-tag))
+      (setq last-tag tagname)
+      (while (progn
+	       (if (not (search-forward
+			 (if exact (concat tagname "(") tagname)
+			 nil t))
+		   (error "No %sentries containing %s"
+			  (if next "more " "") tagname))
+	       (not (looking-at "[^\n\177]*\177"))))
+      (search-forward "\177")
+      (setq file (expand-file-name (file-of-tag)
+				   (file-name-directory tags-file-name)))
+      (setq linebeg
+	    (buffer-substring (1- (point))
+			      (save-excursion (beginning-of-line) (point))))
+      (search-forward ",")
+      (setq startpos (read (current-buffer)))
+      (prog1
+	  (set-buffer (find-file-noselect file))
+	(widen)
+	(push-mark)
+	(let ((offset 1000)
+	      found
+	      (pat (concat "^" (regexp-quote linebeg))))
+	  (or startpos (setq startpos (point-min)))
+	  (while (and (not found)
+		      (progn
+			(goto-char (- startpos offset))
+			(not (bobp))))
+	    (setq found
+		  (re-search-forward pat (startpos offset) t))
+	    (setq offset (* 3 offset)))
+	  (or found
+	      (re-search-forward pat nil t)
+	      (error "%s not found in %s" pat file)))
+	(beginning-of-line)))
+    ))
+
 ;;;###autoload
 (defun find-tag (tagname &optional next other-window)
   "Find tag (in current tag table) whose name contains TAGNAME.