From: Yuan Fu Date: Sat, 29 Oct 2022 18:50:15 +0000 (-0700) Subject: Keep cursor position in treesit-indent X-Git-Tag: emacs-29.0.90~1754 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a915d836fce238cd57233f67e8d2451a26d2fb6b;p=emacs.git Keep cursor position in treesit-indent * lisp/treesit.el (treesit-indent): Create a marker and jump back to that marker after indentation. --- 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.