[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#60983: 29.0.60; Tree-sitter user-level control
From: |
Eli Zaretskii |
Subject: |
bug#60983: 29.0.60; Tree-sitter user-level control |
Date: |
Sun, 29 Jan 2023 15:33:22 +0200 |
> From: Yuan Fu <casouri@gmail.com>
> Date: Mon, 23 Jan 2023 15:55:30 -0800
> Cc: Eli Zaretskii <eliz@gnu.org>,
> Bug Report Emacs <bug-gnu-emacs@gnu.org>
>
> >> Thanks. What about the questions I asked regarding indentation
> >> features, and specifically about c-ts-mode-indent-style?
> >
> > I am working on that, but I hit some issues where I cannot make treesit
> > recognize the new settings before the whole treesit-major-mode-setup
> > reruns. Just setting the symbol doesn't work, and reenabling the mode
> > inside of the :set function isn't the best idea maybe?
> >
> > I'd love some pointers to how other modes do similar stuff, but I didn't
> > really find anything.
>
> One common approach is to iterate over all live buffer and reset the variable
> (in this case treesit-simple-indent-rules) on applicate buffers (in this case
> c/c++-ts-mode buffers).
>
> It would be nice to also have a command c-ts-mode-set-style (like
> c-set-style) that takes a style symbol and sets treesit-simple-indent-rules
> accordingly. And in major-mode setup, ie, c-ts-mode’s body, you call it with
> c-ts-mode-indent-style.
This command now exists, courtesy of Theo, but I see some strange
misbehavior with it in c++-ts-mode, related to keymap inheritance:
emacs -Q
M-x c-ts-mode RET
C-h c C-c C-q
=> C-c C-q runs the command c-ts-mode-indent-defun
But
M-x c++-ts-mode RET
C-h c C-c C-q
=> C-c C-q is undefined
This is strange, since the binding is defined in c-ts-mode-map, which
is used in c-ts-base-mode:
(defvar-keymap c-ts-mode-map
:doc "Keymap for the C language with tree-sitter"
:parent prog-mode-map
"C-c C-q" #'c-ts-mode-indent-defun
"C-c ." #'c-ts-mode-set-style)
;;;###autoload
(define-derived-mode c-ts-base-mode prog-mode "C"
"Major mode for editing C, powered by tree-sitter.
\\{c-ts-mode-map}"
:syntax-table c-ts-mode--syntax-table
and both c-ts-mode and c++-ts-mode derive from c-ts-base-mode:
(define-derived-mode c-ts-mode c-ts-base-mode "C"
"Major mode for editing C, powered by tree-sitter.
(define-derived-mode c++-ts-mode c-ts-base-mode "C++"
"Major mode for editing C++, powered by tree-sitter.
What's missing here? Stefan, any advice?
- bug#60983: 29.0.60; Tree-sitter user-level control, Eli Zaretskii, 2023/01/21
- bug#60983: 29.0.60; Tree-sitter user-level control, Theodor Thornhill, 2023/01/21
- bug#60983: 29.0.60; Tree-sitter user-level control, Eli Zaretskii, 2023/01/21
- bug#60983: 29.0.60; Tree-sitter user-level control, Theodor Thornhill, 2023/01/21
- bug#60983: 29.0.60; Tree-sitter user-level control, Yuan Fu, 2023/01/23
- bug#60983: 29.0.60; Tree-sitter user-level control, Eli Zaretskii, 2023/01/23
- bug#60983: 29.0.60; Tree-sitter user-level control, Theodor Thornhill, 2023/01/23
- bug#60983: 29.0.60; Tree-sitter user-level control, Yuan Fu, 2023/01/23
- bug#60983: 29.0.60; Tree-sitter user-level control,
Eli Zaretskii <=
- bug#60983: 29.0.60; Tree-sitter user-level control, Theodor Thornhill, 2023/01/29
- bug#60983: 29.0.60; Tree-sitter user-level control, Eli Zaretskii, 2023/01/29
- bug#60983: 29.0.60; Tree-sitter user-level control, Stefan Monnier, 2023/01/29
- bug#60983: 29.0.60; Tree-sitter user-level control, Eli Zaretskii, 2023/01/30
- bug#60983: 29.0.60; Tree-sitter user-level control, Eli Zaretskii, 2023/01/23
- bug#60983: 29.0.60; Tree-sitter user-level control, Theodor Thornhill, 2023/01/25
- bug#60983: 29.0.60; Tree-sitter user-level control, Stefan Monnier, 2023/01/25
- bug#60983: 29.0.60; Tree-sitter user-level control, Theodor Thornhill, 2023/01/26
- bug#60983: 29.0.60; Tree-sitter user-level control, Eli Zaretskii, 2023/01/26
- bug#60983: 29.0.60; Tree-sitter user-level control, Theodor Thornhill, 2023/01/26