diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2022-05-06 20:23:32 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2022-05-06 20:23:32 -0700 |
commit | b1484760fe0c82f8c787af7f1ebca49bcb522190 (patch) | |
tree | 1ff46f125de415a49135d391bc4d74b9d0e57d8c /pw.c | |
parent | 2956d8d747fba4edcdf8b68683a699e9e8b5d7d5 (diff) | |
download | pw-b1484760fe0c82f8c787af7f1ebca49bcb522190.tar.gz pw-b1484760fe0c82f8c787af7f1ebca49bcb522190.tar.bz2 pw-b1484760fe0c82f8c787af7f1ebca49bcb522190.zip |
Show display params with Ctrl-G; restore with -p option.
Diffstat (limited to 'pw.c')
-rw-r--r-- | pw.c | 60 |
1 files changed, 56 insertions, 4 deletions
@@ -578,7 +578,7 @@ static void redraw(pwstate *pw) drawstatus(pw); } -static int getzp(const char *str, char **err) +static int getznn(const char *str, char **err) { char *endp; long val = strtol(str, &endp, 10); @@ -587,9 +587,8 @@ static int getzp(const char *str, char **err) *err = dsdup("number expected"); return -1; } - if (val <= 0) { - *err = dsdup("positive value required"); + *err = dsdup("non-negative value required"); return -1; } @@ -601,6 +600,18 @@ static int getzp(const char *str, char **err) return val; } +static int getzp(const char *str, char **err) +{ + int val = getznn(str, err); + + if (val <= 0) { + *err = dsdup("positive value required"); + return -1; + } + + return val; +} + static int getms(const char *str, char **err) { errno = 0; @@ -850,7 +861,7 @@ int main(int argc, char **argv) } } - while ((opt = getopt(argc, argv, "n:i:l:dEBg:q:m:")) != -1) { + while ((opt = getopt(argc, argv, "n:i:l:dEBg:q:m:p:")) != -1) { switch (opt) { case 'n': { @@ -938,6 +949,39 @@ int main(int argc, char **argv) maxlen = max(72, val); } break; + case 'p': + { + char *err; + char *hpos = strtok(optarg, ", \t"); + char *lpane = hpos ? strtok(0, ", \t") : 0; + char *rpane = lpane ? strtok(0, ", \t") : 0; + char *vs2pos = rpane ? strtok(0, ", \t") : 0; + + if (hpos) { + if ((pw.hpos = getznn(hpos, &err)) < 0) + error("-%c option: bad horizontal scroll offset %s: %s\n", + opt, hpos, err); + } + + if (lpane) { + if ((pw.vsplit1 = getznn(lpane, &err)) < 0) + error("-%c option: bad left pane width %s: %s\n", + opt, lpane, err); + } + + if (rpane) { + if ((pw.vsplit2 = getznn(rpane, &err)) < 0) + error("-%c option: bad right pane width %s: %s\n", + opt, rpane, err); + } + + if (vs2pos) { + if ((pw.vs2pos = getznn(vs2pos, &err)) < 0) + error("-%c option: bad right pane view offset %s: %s\n", + opt, vs2pos, err); + } + } + break; default: usage(); } @@ -961,6 +1005,8 @@ int main(int argc, char **argv) pw.columns = ws.ws_col; } + clipsplits(&pw); + ttyget(ttyfd, &tty_saved); tty_new = tty_saved; @@ -1365,6 +1411,12 @@ int main(int argc, char **argv) case ctrl('l'): pw.stat |= stat_force; break; + case ctrl('g'): + snprintf(pw.cmdbuf, sizeof pw.cmdbuf, "-p %d,%d,%d,%d", + pw.hpos, pw.vsplit1, pw.vsplit2, pw.vs2pos); + pw.curcmd = pw.cmdbuf; + kbd_state = kbd_result; + break; case '0': if (cmdcount == UINT_MAX) { pw.hpos = 0; |