[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 14c1d21 1/2: Add xref-pulse-on-jump
From: |
Dmitry Gutov |
Subject: |
[Emacs-diffs] master 14c1d21 1/2: Add xref-pulse-on-jump |
Date: |
Mon, 04 May 2015 15:52:25 +0000 |
branch: master
commit 14c1d2106cc770581d16a695734eb56e7b9662f2
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>
Add xref-pulse-on-jump
* lisp/cedet/pulse.el (pulse-momentary-highlight-one-line):
Add autoload cookie.
* lisp/progmodes/xref.el (xref-pulse-on-jump): New option.
(xref--maybe-pulse): New function.
(xref-pop-marker-stack, xref--pop-to-location)
(xref--display-position): Use it.
(xref--location-at-point): Use back-to-indentation.
---
lisp/cedet/pulse.el | 1 +
lisp/progmodes/xref.el | 21 +++++++++++++++++----
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/lisp/cedet/pulse.el b/lisp/cedet/pulse.el
index 89d44c2..59fd518 100644
--- a/lisp/cedet/pulse.el
+++ b/lisp/cedet/pulse.el
@@ -224,6 +224,7 @@ Optional argument FACE specifies the face to do the
highlighting."
;; Remove this hook.
(remove-hook 'pre-command-hook 'pulse-momentary-unhighlight))
+;;;###autoload
(defun pulse-momentary-highlight-one-line (point &optional face)
"Highlight the line around POINT, unhighlighting before next command.
Optional argument FACE specifies the face to do the highlighting."
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index b972bf2..a73085f 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -285,6 +285,11 @@ or when the command has been called with the prefix
argument."
(const :tag "auto" nil))
:version "25.1")
+(defcustom xref-pulse-on-jump t
+ "When non-nil, momentarily highlight jump locations."
+ :type 'boolean
+ :version "25.1")
+
(defvar xref--marker-ring (make-ring xref-marker-ring-length)
"Ring of markers to implement the marker stack.")
@@ -303,7 +308,12 @@ or when the command has been called with the prefix
argument."
(switch-to-buffer (or (marker-buffer marker)
(error "The marked buffer has been deleted")))
(goto-char (marker-position marker))
- (set-marker marker nil nil))))
+ (set-marker marker nil nil)
+ (xref--maybe-pulse))))
+
+(defun xref--maybe-pulse ()
+ (when xref-pulse-on-jump
+ (pulse-momentary-highlight-one-line (point))))
;; etags.el needs this
(defun xref-clear-marker-stack ()
@@ -338,7 +348,8 @@ WINDOW controls how the buffer is displayed:
(cl-ecase window
((nil) (switch-to-buffer (current-buffer)))
(window (pop-to-buffer (current-buffer) t))
- (frame (let ((pop-up-frames t)) (pop-to-buffer (current-buffer) t)))))
+ (frame (let ((pop-up-frames t)) (pop-to-buffer (current-buffer) t))))
+ (xref--maybe-pulse))
;;; XREF buffer (part of the UI)
@@ -374,6 +385,7 @@ Used for temporary buffers.")
(with-selected-window (display-buffer (current-buffer) other-window)
(goto-char pos)
(recenter recenter-arg)
+ (xref--maybe-pulse)
(let ((buf (current-buffer))
(win (selected-window)))
(with-current-buffer xref-buf
@@ -415,7 +427,9 @@ Used for temporary buffers.")
(xref-show-location-at-point))
(defun xref--location-at-point ()
- (get-text-property (point) 'xref-location))
+ (save-excursion
+ (back-to-indentation)
+ (get-text-property (point) 'xref-location)))
(defvar-local xref--window nil
"ACTION argument to call `display-buffer' with.")
@@ -423,7 +437,6 @@ Used for temporary buffers.")
(defun xref-goto-xref ()
"Jump to the xref on the current line and bury the xref buffer."
(interactive)
- (back-to-indentation)
(let ((loc (or (xref--location-at-point)
(user-error "No reference at point")))
(window xref--window))