diff options
-rw-r--r-- | pw.c | 29 |
1 files changed, 20 insertions, 9 deletions
@@ -794,6 +794,21 @@ int isbkgnd(FILE *tty) return (grp != fgrp); } +void clipsplits(pwstate *pw) +{ + int columns = pw->columns; + + if ((pw->stat & stat_lino)) + columns -= 4; + + if (columns < 8 || (int) pw->vsplit1 > columns - 2) { + pw->vsplit2 = 0; + pw->vsplit1 = columns - 2; + } else if ((int) (pw->vsplit1 + pw->vsplit2) >= columns - 2) { + pw->vsplit2 = columns - 2 - pw->vsplit1; + } +} + int main(int argc, char **argv) { struct pwstate pw = { .columns = 80 }; @@ -1092,12 +1107,7 @@ int main(int argc, char **argv) pw.columns = ws.ws_col; - if (pw.columns < 8 || (int) pw.vsplit1 > pw.columns - 1) { - pw.vsplit2 = 0; - pw.vsplit1 = pw.columns - 2; - } else if ((int) (pw.vsplit1 + pw.vsplit2) >= pw.columns - 2) { - pw.vsplit2 = pw.columns - 3 - pw.vsplit1; - } + clipsplits(&pw); } pw.stat |= stat_force; force = 1; @@ -1218,8 +1228,7 @@ int main(int argc, char **argv) if (cmdcount == UINT_MAX) cmdcount = 1; pw.vsplit1 += cmdcount; - pw.vsplit1 = min(pw.vsplit1, pw.columns - 2); - pw.vsplit2 = min(pw.vsplit2, pw.columns - 2 - pw.vsplit1); + clipsplits(&pw); pw.stat |= stat_force; break; case '<': @@ -1234,7 +1243,7 @@ int main(int argc, char **argv) if (pw.vsplit2 == 0) pw.vs2pos = pw.hpos + pw.vsplit1; pw.vsplit2 += cmdcount; - pw.vsplit2 = min(pw.vsplit2, pw.columns - 2 - pw.vsplit1); + clipsplits(&pw); pw.stat |= stat_force; break; case '[': @@ -1348,6 +1357,8 @@ int main(int argc, char **argv) break; case '#': pw.stat ^= stat_lino; + if ((pw.stat & stat_lino)) + clipsplits(&pw); // fallthrough case ctrl('l'): pw.stat |= stat_force; |