bug#68493: Got to be a better way to customize c-ts-mode indentation
Eli Zaretskii <[email protected]>
| Newsgroups | gmane.emacs.bugs |
|---|---|
| Message-ID | <[email protected]> |
> From: Tomas Nordin <[email protected]> > Cc: Eli Zaretskii <[email protected]>, Daniel Colascione <[email protected]>, > [email protected] > Date: Mon, 03 Aug 2026 21:19:29 +0000 > > Björn Lindqvist <[email protected]> writes: > > > Den mån 3 aug. 2026 kl 14:46 skrev Tomas Nordin <[email protected]>: > >> Is the following description this bug? Or should I talk more about it in > >> some other or new report? > >> > >> Its about indentation of concatanated strings like this (in a c-buffer) > >> > >> char *lines = > >> "line1\n" > >> "line2\n" > >> > >> The above is what I "get" with c-mode (in emacs -Q). If I switch over to > >> c-ts-mode and say C-x h and TAB, I get > >> > >> char *lines = > >> "line1\n" > >> "line2\n" > >> > >> Further literals will align with "line2\n". I would like it to be > >> aligned as with c-mode. Is there a setting for this? > >> > >> This has been observed with > >> > >> GNU Emacs 31.0.90 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.49, cairo version 1.18.4) of 2026-07-02 > > > > Hello Tomas, > > > > I can confirm the bug in 32.0.50. However, my c-ts-mode config I > > posted on emacs-devel fixes it: > > > > https://gist.github.com/bjourne/31f53043c72728cb4d8b90feedd0625b > > > > You can take inspiration from that. Specifically, you need to prepend the > > rule ((parent-is "concatenated_string") parent 0) to > > treesit-simple-indent-rules. > > Thanks for inspiration. I spent time trying to understand this stuff > better. After that time I don't understand it much better, but maybe a > little bit. With shotgun programming I arrived at the attached patch. It > fixes the problem I reported, and here are two examples where I get what > I want: > > helpexit (argc, argv, 0, 2, > "Usage: toks [--help] [<delims> [<startchar>]]\n" > "Read lines from stdin and print tokens."); > > and > > char *lines = > "line1\n" > "line2\n"; > > The patch was made on top of todays emacs-31. I re-built the whole thing > (patch applied) and will now run with it for some time and see if it > holds. Thanks. Yuan and Stefan, any comments or suggestions? > diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el > index 5f064716a89..fa09cb21b34 100644 > --- a/lisp/progmodes/c-ts-mode.el > +++ b/lisp/progmodes/c-ts-mode.el > @@ -503,7 +503,8 @@ c-ts-mode--simple-indent-rules > "enum_specifier" > "union_specifier" > "function_declarator" > - "template_declaration"))) > + "template_declaration" > + "concatenated_string"))) > standalone-parent 0) > ;; This is for the trailing-star stype: int * > ;; func()