aboutsummaryrefslogtreecommitdiffstats
path: root/pw.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2022-05-06 20:23:32 -0700
committerKaz Kylheku <kaz@kylheku.com>2022-05-06 20:23:32 -0700
commitb1484760fe0c82f8c787af7f1ebca49bcb522190 (patch)
tree1ff46f125de415a49135d391bc4d74b9d0e57d8c /pw.c
parent2956d8d747fba4edcdf8b68683a699e9e8b5d7d5 (diff)
downloadpw-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.c60
1 files changed, 56 insertions, 4 deletions
diff --git a/pw.c b/pw.c
index 55b5ebe..6c53dd1 100644
--- a/pw.c
+++ b/pw.c
@@ -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;