Function: semantic-ia--fast-jump-helper
semantic-ia--fast-jump-helper is a byte-compiled function defined in
ia.el.gz.
Signature
(semantic-ia--fast-jump-helper DEST)
Documentation
Jump to DEST, a Semantic tag.
This helper manages the mark, buffer switching, and pulsing.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/ia.el.gz
;;; FAST Jump
;;
;; Jump to a destination based on the local context.
;;
;; This shows how to use the analyzer context, and the
;; analyzer references objects to choose a good destination.
(defun semantic-ia--fast-jump-helper (dest)
"Jump to DEST, a Semantic tag.
This helper manages the mark, buffer switching, and pulsing."
;; We have a tag, but in C++, we usually get a prototype instead
;; because of header files. Let's try to find the actual
;; implementation instead.
(when (semantic-tag-prototype-p dest)
(let* ((refs (semantic-analyze-tag-references dest))
(impl (semantic-analyze-refs-impl refs t))
)
(when impl (setq dest (car impl)))))
;; Make sure we have a place to go...
(if (not (and (or (semantic-tag-with-position-p dest)
(semantic-tag-get-attribute dest :line))
(semantic-tag-file-name dest)))
(error "Tag %s has no buffer information"
(semantic-format-tag-name dest)))
;; Once we have the tag, we can jump to it. Here
;; are the key bits to the jump:
;; 1) Push the mark, so you can pop global mark back, or
;; use semantic-mru-bookmark mode to do so.
(push-mark)
(when (fboundp 'xref-push-marker-stack)
(xref-push-marker-stack))
;; 2) Visits the tag.
(semantic-go-to-tag dest)
;; 3) go-to-tag doesn't switch the buffer in the current window,
;; so it is like find-file-noselect. Bring it forward.
(pop-to-buffer-same-window (current-buffer))
;; 4) Fancy pulsing.
(pulse-momentary-highlight-one-line (point))
)