From: Juri Linkov Date: Sun, 12 Jan 2025 18:17:16 +0000 (+0200) Subject: Add treesit-thing-settings to yaml-ts-mode and enable transpose-sexps X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=80024c54552f2d706111dde4cb5cdcde0537aa42;p=emacs.git Add treesit-thing-settings to yaml-ts-mode and enable transpose-sexps * lisp/treesit.el (treesit-major-mode-setup): Move setting of 'transpose-sexps-function' outside of 'treesit-thing-defined-p' since 'treesit-transpose-sexps' doesn't depend on the 'sexp' thing. * lisp/textmodes/yaml-ts-mode.el (yaml-ts-mode): Add 'treesit-thing-settings' with the 'list' thing, but use it only for list commands, not sexp commands (bug#73404). (cherry picked from commit 2d2bc6f1bc678b21c46af26cf343e24acdb48b79) --- diff --git a/lisp/textmodes/yaml-ts-mode.el b/lisp/textmodes/yaml-ts-mode.el index 957102950b4..defef096aa6 100644 --- a/lisp/textmodes/yaml-ts-mode.el +++ b/lisp/textmodes/yaml-ts-mode.el @@ -167,7 +167,22 @@ boundaries. JUSTIFY is passed to `fill-paragraph'." (setq-local fill-paragraph-function #'yaml-ts-mode--fill-paragraph) - (treesit-major-mode-setup))) + ;; Navigation. + (setq-local treesit-thing-settings + `((yaml + (list ,(regexp-opt '("block_mapping_pair" + "flow_sequence")) + 'symbols)))) + + (treesit-major-mode-setup) + + ;; Use the `list' thing defined above to navigate only lists + ;; with `C-M-n', `C-M-p', `C-M-u', `C-M-d', but not sexps + ;; with `C-M-f', `C-M-b' neither adapt to 'show-paren-mode' + ;; that is problematic in languages without explicit + ;; opening/closing nodes. + (setq-local forward-sexp-function nil) + (setq-local show-paren-data-function 'show-paren--default))) (derived-mode-add-parents 'yaml-ts-mode '(yaml-mode)) diff --git a/lisp/treesit.el b/lisp/treesit.el index fa25b067cca..6c0f119dc5d 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -3586,9 +3586,10 @@ before calling this function." (setq-local add-log-current-defun-function #'treesit-add-log-current-defun)) + (setq-local transpose-sexps-function #'treesit-transpose-sexps) + (when (treesit-thing-defined-p 'sexp nil) - (setq-local forward-sexp-function #'treesit-forward-sexp) - (setq-local transpose-sexps-function #'treesit-transpose-sexps)) + (setq-local forward-sexp-function #'treesit-forward-sexp)) (when (treesit-thing-defined-p 'list nil) (setq-local forward-sexp-function #'treesit-forward-sexp-list)