aboutsummaryrefslogtreecommitdiffstats
path: root/pw.c
diff options
context:
space:
mode:
Diffstat (limited to 'pw.c')
-rw-r--r--pw.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/pw.c b/pw.c
index 1b994bf..8565d1c 100644
--- a/pw.c
+++ b/pw.c
@@ -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;