From: Yuan Fu Date: Thu, 22 Dec 2022 08:41:58 +0000 (-0800) Subject: Set beginning/end-of-defun-function in treesit-major-mode-setup X-Git-Tag: emacs-29.0.90~1047^2 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=02e046566e2c70cf268f359ef29802268ab43de1;p=emacs.git Set beginning/end-of-defun-function in treesit-major-mode-setup * lisp/treesit.el (treesit-major-mode-setup): Set them. --- 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