aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJuri Linkov2024-06-27 09:42:34 +0300
committerJuri Linkov2024-06-27 09:42:34 +0300
commitd6afb017debb9cc1a88a129eea688e2f2bbf402a (patch)
treee69f3c74dd01bceb961c4b4313fcb9e3c81154b3
parent82125b1a6616259531ef3abd45b41089de160ba7 (diff)
downloademacs-d6afb017debb9cc1a88a129eea688e2f2bbf402a.tar.gz
emacs-d6afb017debb9cc1a88a129eea688e2f2bbf402a.zip
* lisp/progmodes/xref.el (xref-revert-buffer-restore-point): New function.
(xref--xref-buffer-mode): Add xref-revert-buffer-restore-point to revert-buffer-restore-functions (bug#71466).
-rw-r--r--lisp/progmodes/xref.el23
1 files changed, 22 insertions, 1 deletions
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 0b069941438..710293b8dbc 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -1017,7 +1017,9 @@ point."
1017 (lambda (&optional bound move backward looking-at) 1017 (lambda (&optional bound move backward looking-at)
1018 (outline-search-text-property 1018 (outline-search-text-property
1019 'xref-group nil bound move backward looking-at))) 1019 'xref-group nil bound move backward looking-at)))
1020 (setq-local outline-level (lambda () 1))) 1020 (setq-local outline-level (lambda () 1))
1021 (add-hook 'revert-buffer-restore-functions
1022 #'xref-revert-buffer-restore-point nil t))
1021 1023
1022(defvar xref--transient-buffer-mode-map 1024(defvar xref--transient-buffer-mode-map
1023 (let ((map (make-sparse-keymap))) 1025 (let ((map (make-sparse-keymap)))
@@ -1293,6 +1295,25 @@ Return an alist of the form ((GROUP . (XREF ...)) ...)."
1293;;; FIXME: Make this alias obsolete in future release. 1295;;; FIXME: Make this alias obsolete in future release.
1294(defalias 'xref-revert-buffer #'revert-buffer) 1296(defalias 'xref-revert-buffer #'revert-buffer)
1295 1297
1298(defun xref-revert-buffer-restore-point ()
1299 "Restore point on a previous item or group after reverting."
1300 (let* ((item
1301 (when (xref--item-at-point)
1302 (buffer-substring-no-properties (pos-bol) (pos-eol))))
1303 (group
1304 (save-excursion
1305 (when (or (get-text-property (point) 'xref-group)
1306 (and item (xref--search-property 'xref-group t)
1307 (get-text-property (point) 'xref-group)))
1308 (buffer-substring-no-properties (pos-bol) (pos-eol))))))
1309 (when (or item group)
1310 (lambda ()
1311 (goto-char (point-min))
1312 (when (and group (search-forward (concat "\n" group "\n") nil t))
1313 (goto-char (pos-bol 0)))
1314 (when (and item (search-forward (concat "\n" item "\n") nil t))
1315 (goto-char (pos-bol 0)))))))
1316
1296(defun xref--auto-jump-first (buf value) 1317(defun xref--auto-jump-first (buf value)
1297 (when value 1318 (when value
1298 (select-window (get-buffer-window buf)) 1319 (select-window (get-buffer-window buf))