diff options
| author | Juri Linkov | 2024-06-27 09:42:34 +0300 |
|---|---|---|
| committer | Juri Linkov | 2024-06-27 09:42:34 +0300 |
| commit | d6afb017debb9cc1a88a129eea688e2f2bbf402a (patch) | |
| tree | e69f3c74dd01bceb961c4b4313fcb9e3c81154b3 | |
| parent | 82125b1a6616259531ef3abd45b41089de160ba7 (diff) | |
| download | emacs-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.el | 23 |
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)) |