From 02e046566e2c70cf268f359ef29802268ab43de1 Mon Sep 17 00:00:00 2001 From: Yuan Fu Date: Thu, 22 Dec 2022 00:41:58 -0800 Subject: [PATCH] Set beginning/end-of-defun-function in treesit-major-mode-setup * lisp/treesit.el (treesit-major-mode-setup): Set them. --- lisp/treesit.el | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lisp/treesit.el b/lisp/treesit.el index a7882dda2cc..ec5b3e399f9 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -1941,7 +1941,16 @@ before calling this function." (keymap-set (current-local-map) " " #'treesit-beginning-of-defun) (keymap-set (current-local-map) " " - #'treesit-end-of-defun))) + #'treesit-end-of-defun) + ;; `end-of-defun' will not work completely correctly in nested + ;; defuns due to its implementation. However, many lisp programs + ;; use `beginning/end-of-defun', so we should still set + ;; `beginning/end-of-defun-function' so they still mostly work. + ;; This is also what `cc-mode' does: rebind user commands and set + ;; the variables. In future we should update `end-of-defun' to + ;; work with nested defuns. + (setq-local beginning-of-defun-function #'treesit-beginning-of-defun) + (setq-local end-of-defun-function #'treesit-end-of-defun))) ;;; Debugging -- 2.39.2