diff options
| -rw-r--r-- | main.c | 18 |
1 files changed, 13 insertions, 5 deletions
@@ -160,7 +160,7 @@ static inline int bracket_dir(u32 c) { } } -TxtLoc match_bracket(TxtLoc l) { +int match_bracket(TxtLoc l, TxtLoc *out) { u32 depth = 1; u32 c = txt_chr(l); u32 o = bracket_opp(c); @@ -181,7 +181,12 @@ TxtLoc match_bracket(TxtLoc l) { } } - return l; + if (depth == 0) { + *out = l; + return 1; + } else { + return 0; + } } TxtLoc next_func_end(TxtLoc l) { @@ -203,11 +208,14 @@ TxtLoc prev_func_end(TxtLoc l) { } TxtLoc prev_func(TxtLoc l) { - return match_bracket(prev_func_end(l)); + match_bracket(prev_func_end(l), &l); + return l; } TxtLoc next_func(TxtLoc l) { - return match_bracket(next_func_end(match_bracket(l))); + match_bracket(l, &l); + match_bracket(next_func_end(l), &l); + return l; } int empty_line(TxtLoc l) { @@ -503,7 +511,7 @@ loop: l = next_func(l); break; case '%': - l = match_bracket(l); + if (!match_bracket(l, &l)) return 0; break; case KEY_PGUP: for (u32 i = 0; i < LINES; i += 3) l = prev_line(l); |
