Looks good in general, but I think folding should work when the cursor is 
anywhere in the block, not just on the fold point (vim seems to work this way). 
I played with it a little and came up with something like this:
```C
static gint prepare_fold(CmdParams *p)
{
        /* foldparent of the next line */
        gint line = SSM(p->sci, SCI_GETFOLDPARENT, p->line + 1, 0);

        if (p->line == line)
                ;  /* we are already on the fold point line */
        else
        {
                /* foldparent of the current line */
                line = SSM(p->sci, SCI_GETFOLDPARENT, p->line, 0);
        }

        if (line != -1)
        {
                /* move the cursor on the visible line before the fold */
                gint pos = SSM(p->sci, SCI_POSITIONFROMLINE, line, 0);
                SET_POS_NOX(p->sci, pos, TRUE);
        }

        return line;
}


void cmd_toggle_fold(CmdContext *c, CmdParams *p)
{
        gint line = prepare_fold(p);
        if (line != -1)
                SSM(p->sci, SCI_FOLDLINE, (uptr_t) line, SC_FOLDACTION_TOGGLE);
}
```

If the code looks OK to you and works as expected, could you update all the 
folding functions similarly to `cmd_toggle_fold()` above?

In addition, these aren't exactly "edit" commands and should be placed in a 
separate file. Could you create `fold.c/h`, add them to `Makefile.am` and move 
all these commands there?

-- 
Reply to this email directly or view it on GitHub:
https://github.com/geany/geany-plugins/pull/1327#issuecomment-2077794940
You are receiving this because you are subscribed to this thread.

Message ID: <geany/geany-plugins/pull/1327/c2077794...@github.com>

Reply via email to