Function: semantic-symref-hit-to-tag-via-buffer
semantic-symref-hit-to-tag-via-buffer is a byte-compiled function
defined in symref.el.gz.
Signature
(semantic-symref-hit-to-tag-via-buffer HIT SEARCHTXT SEARCHTYPE &optional OPEN-BUFFERS)
Documentation
Convert the symref HIT into a TAG by looking up the tag via a buffer.
Return the Semantic tag associated with HIT.
SEARCHTXT is the text that is being searched for.
Used to narrow the in-buffer search.
SEARCHTYPE is the type of search (such as 'symbol or 'tagname).
Optional OPEN-BUFFERS, when nil will use a faster version of
find-file when a file needs to be opened. If non-nil, then
normal buffer initialization will be used.
This function will leave buffers loaded from a file open, but
will add buffers that must be opened to
semantic-symref-recently-opened-buffers.
Any caller MUST deal with that variable, either clearing it, or
deleting the buffers that were opened.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/symref.el.gz
(defun semantic-symref-hit-to-tag-via-buffer (hit searchtxt searchtype &optional open-buffers)
"Convert the symref HIT into a TAG by looking up the tag via a buffer.
Return the Semantic tag associated with HIT.
SEARCHTXT is the text that is being searched for.
Used to narrow the in-buffer search.
SEARCHTYPE is the type of search (such as 'symbol or 'tagname).
Optional OPEN-BUFFERS, when nil will use a faster version of
`find-file' when a file needs to be opened. If non-nil, then
normal buffer initialization will be used.
This function will leave buffers loaded from a file open, but
will add buffers that must be opened to
`semantic-symref-recently-opened-buffers'.
Any caller MUST deal with that variable, either clearing it, or
deleting the buffers that were opened."
(let* ((line (car hit))
(file (cdr hit))
(buff (find-buffer-visiting file))
(tag nil)
)
(cond
;; We have a buffer already. Check it out.
(buff
(set-buffer buff))
;; We have a table, but it needs a refresh.
;; This means we should load in that buffer.
(t
(let ((kbuff
(if open-buffers
;; Even if we keep the buffers open, don't
;; let EDE ask lots of questions.
(let ((ede-auto-add-method 'never))
(find-file-noselect file t))
;; When not keeping the buffers open, then
;; don't setup all the fancy froo-froo features
;; either.
(semantic-find-file-noselect file t))))
(set-buffer kbuff)
(push kbuff semantic-symref-recently-opened-buffers)
(semantic-fetch-tags)
))
)
;; Too much baggage in goto-line
;; (goto-line line)
(goto-char (point-min))
(forward-line (1- line))
;; Search forward for the matching text.
;; FIXME: This still fails if the regexp uses something specific
;; to the extended syntax, like grouping.
(when (re-search-forward (if (memq searchtype '(regexp tagregexp))
searchtxt
(regexp-quote searchtxt))
(point-at-eol)
t)
(goto-char (match-beginning 0))
)
(setq tag (semantic-current-tag))
;; If we are searching for a tag, but bound the tag we are looking
;; for, see if it resides in some other parent tag.
;;
;; If there is no parent tag, then we still need to hang the originator
;; in our list.
(when (and (eq searchtype 'symbol)
(string= (semantic-tag-name tag) searchtxt))
(setq tag (or (semantic-current-tag-parent) tag)))
;; Copy the tag, which adds a :filename property.
(when tag
(setq tag (semantic-tag-copy tag nil t))
;; Ad this hit to the tag.
(semantic--tag-put-property tag :hit (list line)))
tag))