From a915d836fce238cd57233f67e8d2451a26d2fb6b Mon Sep 17 00:00:00 2001 From: Yuan Fu Date: Sat, 29 Oct 2022 11:50:15 -0700 Subject: [PATCH] Keep cursor position in treesit-indent * lisp/treesit.el (treesit-indent): Create a marker and jump back to that marker after indentation. --- lisp/treesit.el | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lisp/treesit.el b/lisp/treesit.el index dd0aca50494..90e5d09693f 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -974,12 +974,18 @@ Return (ANCHOR . OFFSET). This function is used by "Indent according to the result of `treesit-indent-function'." (treesit-update-ranges) (pcase-let* ((`(,anchor . ,offset) (treesit--indent-1))) - (when (and anchor offset) - (let ((col (+ (save-excursion - (goto-char anchor) - (current-column)) - offset))) - (indent-line-to col))))) + (if (and anchor offset) + (let ((col (+ (save-excursion + (goto-char anchor) + (current-column)) + offset)) + (delta (- (point-max) (point)))) + (indent-line-to col) + ;; Now point is at the end of indentation. If we started + ;; from within the line, go back to where we started. + (when (> (- (point-max) delta) (point)) + (goto-char (- (point-max) delta)))) + 'noindent))) (defvar treesit--indent-region-batch-size 400 "How many lines of indent value do we precompute. -- 2.39.2