emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master fa175b4: Set next-error-* in xref--xref-buffer-mode


From: Dmitry Gutov
Subject: [Emacs-diffs] master fa175b4: Set next-error-* in xref--xref-buffer-mode
Date: Thu, 30 Apr 2015 00:42:10 +0000

branch: master
commit fa175b449597256dc4cb0411ce1978aa2016c170
Author: Helmut Eller <address@hidden>
Commit: Dmitry Gutov <address@hidden>

    Set next-error-* in xref--xref-buffer-mode
    
    * xref.el (xref--xref-buffer-mode): Set `next-error-function' and
    `next-error-last-buffer'.
    (xref--next-error-function): New function.
    (http://lists.gnu.org/archive/html/emacs-devel/2015-04/msg01311.html)
---
 lisp/progmodes/xref.el |   17 ++++++++++++++++-
 1 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 9f10686..fc27c26 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -444,7 +444,22 @@ Used for temporary buffers.")
 
 (define-derived-mode xref--xref-buffer-mode special-mode "XREF"
   "Mode for displaying cross-references."
-  (setq buffer-read-only t))
+  (setq buffer-read-only t)
+  (setq next-error-function #'xref--next-error-function)
+  (setq next-error-last-buffer (current-buffer)))
+
+(defun xref--next-error-function (n reset?)
+  (when reset?
+    (goto-char (point-min)))
+  (let ((backward (< n 0))
+        (n (abs n))
+        (loc nil))
+    (dotimes (_ n)
+      (setq loc (xref--search-property 'xref-location backward)))
+    (cond (loc
+           (xref--pop-to-location loc))
+          (t
+           (error "No %s xref" (if backward "previous" "next"))))))
 
 (defun xref-quit (&optional kill)
   "Bury temporarily displayed buffers, then quit the current window.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]