[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#78402: treesit after-change-functions
From: |
Juri Linkov |
Subject: |
bug#78402: treesit after-change-functions |
Date: |
Wed, 04 Jun 2025 20:16:02 +0300 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu) |
> Hmm, not sure what I’m doing wrong but I still can’t trigger the
> error. I’m using emacs -q, with Stefan’s patch, enabled liquid mode
> and outline-minor-mode, and deleted the <script> tag on line 19.
> Any ideas?
Sorry, I missed essential non-default settings:
(setq outline-minor-mode-cycle t)
(setq outline-minor-mode-use-buttons t)
Also (setq debug-on-error t) is nice to have.
So here is a complete test case:
0. emacs -Q
1. M-: (setq outline-minor-mode-cycle t)
2. M-: (setq outline-minor-mode-use-buttons t)
3. M-: (setq debug-on-error t)
4. C-x p f test/manual/indent/html-multi.html
5. M-x load-library RET treesit-x
6. M-x liquid-generic-ts-mode
7. M-x outline-minor-mode
8. move point to the first 's' in 'script' on line 19
9. type 'M-d' ('kill-word')
>>> 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.
>
> Thanks. Digging further, I’m only hitting this problem because I have
> outline-minor-mode-cycle set to t. So technically with default
> settings, one wouldn’t have this problem.
>
> But I can’t be the only one that sets outline-minor-mode-cycle to t,
> expecting to only cycle outline sections in comments. Can we do something
> to prevent people tripping on this? Maybe change the default value of
> outline-minor-mode-cycle-filter to exclude code?
Do you use the default 'outline-regexp'? For example in emacs-lisp-mode
it matches not only comments, but also opening parens at the beginning
of function definitions in code. So I don't understand how it would be
useful to fold only comments, but not code.