@techee requested changes on this pull request.
Looks good except for the minor comments below.
I was actually thinking about not doing this at all because it doesn't cover all fold/unfold situations like e.g. using Geany's keybindings for folding but the patch is simple and better than nothing so let's do it.
Would you post this as a separate pull request? If https://github.com/geany/geany-plugins/pull/1338 looks good to you, I'd merge that PR after which this one could be merged.
+ +void ensure_current_line_expanded(ScintillaObject *sci) +{ + gint line = GET_CUR_LINE(sci); + if (!SSM(sci, SCI_GETLINEVISIBLE, line, 0)) + SSM(sci, SCI_ENSUREVISIBLE, line, 0); +} + + +gint jump_to_expended_parent(ScintillaObject *sci, gint line) +{ + gint fold_parent = line; + + /* go through the parents as long as they are not visible */ + while (SSM(sci, SCI_GETLINEVISIBLE, fold_parent, 0) == FALSE) {
Better `!SSM(...)` instead of the `FALSE` comparison.
Also place `{` on separate line to match the other code style.
+{
+ gint line = GET_CUR_LINE(sci); + if (!SSM(sci, SCI_GETLINEVISIBLE, line, 0)) + SSM(sci, SCI_ENSUREVISIBLE, line, 0); +} + + +gint jump_to_expended_parent(ScintillaObject *sci, gint line) +{ + gint fold_parent = line; + + /* go through the parents as long as they are not visible */ + while (SSM(sci, SCI_GETLINEVISIBLE, fold_parent, 0) == FALSE) { + gint prev_parent = SSM(sci, SCI_GETFOLDPARENT, fold_parent, 0); + + if (prev_parent == -1) break;
`break` on separate line.
+{
+ gint fold_parent = line; + + /* go through the parents as long as they are not visible */ + while (SSM(sci, SCI_GETLINEVISIBLE, fold_parent, 0) == FALSE) { + gint prev_parent = SSM(sci, SCI_GETFOLDPARENT, fold_parent, 0); + + if (prev_parent == -1) break; + fold_parent = prev_parent; + } + + if (fold_parent != line) + { + /* move the cursor on the visible line before the fold */ + gint pos = SSM(sci, SCI_POSITIONFROMLINE, fold_parent, 0); + SET_POS(sci, pos, TRUE);
Use `SET_POS_NOX()` instead. This one will preserve the "maximum x" cursor value so when further moving up or down, this one will be recovered.
@@ -32,5 +32,8 @@ void perform_substitute(ScintillaObject *sci, const gchar *cmd, gint from, gint
const gchar *flag_override);
gint get_line_number_rel(ScintillaObject *sci, gint shift); +void ensure_current_line_expanded(ScintillaObject *sci);
Again, remove, it's from another patch.
@@ -306,6 +306,14 @@ gboolean vi_notify_sci(SCNotification *nt)
} }
+ if (nt->nmhdr.code == SCN_MARGINCLICK) {
`{` on separate line.