GNU bug report logs - #78402
treesit after-change-functions

Previous Next

Package: emacs;

Reported by: Juri Linkov <juri <at> linkov.net>

Date: Tue, 13 May 2025 06:34:02 UTC

Severity: normal

Full log


Message #41 received at 78402 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: Yuan Fu <casouri <at> gmail.com>
Cc: Stefan Monnier <monnier <at> iro.umontreal.ca>, 78402 <at> debbugs.gnu.org
Subject: Re: bug#78402: treesit after-change-functions
Date: Tue, 03 Jun 2025 18:29:45 +0300
>>>> @@ -4064,6 +4065,7 @@ treesit-outline-search
>>>>  "Search for the next outline heading in the syntax tree.
>>>> For BOUND, MOVE, BACKWARD, LOOKING-AT, see the descriptions in
>>>> `outline-search-function'."
>>>> +  (treesit--pre-redisplay)
>>>>  (if looking-at
>>>>      (when (treesit-outline--at-point) (pos-bol))
>>> 
>>> Alas, the same error:
>> 
>> Gah! Sorry, I don’t have time to properly look into this right now. But I’ll try to find some time as soon as possible (pinky promise).
>
> Hi Juri, how did you produce this error? I tried to use the
> liquid-generic-ts-mode example in bug#77256 but that didn’t trigger
> the error.

You can produce this error by visiting test/manual/indent/html-multi.html
with enabled liquid-generic-ts-mode, then delete the word "script"
(outside of comments).

> BTW, I noticed that when tree-sitter-provided outline is in effect,
> pressing tab on the lines determined as outline titles—like first line
> of a defun—toggles folding instead of indenting the code. That feels
> intrusive IMHO. It’s not a problem for “traditional” kind of outline
> headers in comments, but code is another story.
>
> Take this code as example:
>
> function MyBigFunc(param1
>                   param2) {
>   const abc = 'def';
>   function embed() {
>     return true;
>   }
> }
>
> Right now I can’t indent the embed function, because pressing TAB
> folds it. Another common practice is to select the whole MyBigFunc
> function and press TAB to indent everything in the region, that
> wouldn’t work if point happens to be on the first line, which is
> common.

Indeed, there is a clash between TAB keybindings.
So to address this ambiguity we created a special option
'outline-minor-mode-cycle-filter' that defines in what context
TAB should fold outlines.  For example, you can customize:

  (setopt outline-minor-mode-cycle-filter (lambda () (bolp)))

Then TAB will fold only when pressed at the beginning of the line.
Anywhere else TAB will indent the line.




This bug report was last modified 12 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.