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.