popup definition emacs
(defun rtags-peek-definition () "Peek at definition at point using rtags." (interactive) (let ((func (lambda () (rtags-find-symbol-at-point) (rtags-location-stack-forward)))) (rtags-start-process-unless-running) (make-peek-frame func))) (defun make-peek-frame (find-definition-function &rest args) "Make a new frame for peeking definition" (when (or (not (rtags-called-interactively-p)) (rtags-sandbox-id-matches)) (let (summary doc-frame x y ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1. Find the absolute position of the current beginning of the symbol at point, ;; ;; in pixels. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (abs-pixel-pos (save-excursion (beginning-of-thing 'symbol) (window-absolute-pixel-position)))) (setq x (car abs-pixel-pos)) ;; (setq y (cdr abs-pixel-pos)) (setq y (+ (cdr abs-pixel-pos) (frame-char-height))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 2. Create a new invisible frame, with the current buffer in it. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq doc-frame (make-frame '((minibuffer . nil) (name . "*RTags Peek*") (width . 80) (visibility . nil) (height . 15)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 3. Position the new frame right under the beginning of the symbol at point. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (set-frame-position doc-frame x y) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 4. Jump to the symbol at point. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (with-selected-frame doc-frame (apply find-definition-function args) (read-only-mode) (when semantic-stickyfunc-mode (semantic-stickyfunc-mode -1)) (recenter-top-bottom 0)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 5. Make frame visible again ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (make-frame-visible doc-frame))))