Mercurial > emacs
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.