diff options
author | Thomas Adam <thomas@xteddy.org> | 2014-06-20 12:59:43 +0100 |
---|---|---|
committer | Thomas Adam <thomas@xteddy.org> | 2014-06-20 12:59:43 +0100 |
commit | 814e40522cb611895e84fc2aaf58d5d0ca9ba348 (patch) | |
tree | 12e56d683fbcadf4d67f8a78acf8afcf1343ba0b /cmd-capture-pane.c | |
parent | 1544c688e6bdc61fec8a96588b2552551753e46b (diff) | |
parent | c8efffb4db5c521640dd5687d2a640ca04664aad (diff) | |
download | rtmux-814e40522cb611895e84fc2aaf58d5d0ca9ba348.tar.gz rtmux-814e40522cb611895e84fc2aaf58d5d0ca9ba348.tar.bz2 rtmux-814e40522cb611895e84fc2aaf58d5d0ca9ba348.zip |
Merge branch 'obsd-master'
Diffstat (limited to 'cmd-capture-pane.c')
-rw-r--r-- | cmd-capture-pane.c | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/cmd-capture-pane.c b/cmd-capture-pane.c index bbaf70cd..0efe1cd0 100644 --- a/cmd-capture-pane.c +++ b/cmd-capture-pane.c @@ -94,6 +94,7 @@ cmd_capture_pane_history(struct args *args, struct cmd_q *cmdq, int n, with_codes, escape_c0, join_lines; u_int i, sx, top, bottom, tmp; char *cause, *buf, *line; + const char *Sflag, *Eflag; size_t linelen; sx = screen_size_x(&wp->base); @@ -109,27 +110,37 @@ cmd_capture_pane_history(struct args *args, struct cmd_q *cmdq, } else gd = wp->base.grid; - n = args_strtonum(args, 'S', INT_MIN, SHRT_MAX, &cause); - if (cause != NULL) { - top = gd->hsize; - free(cause); - } else if (n < 0 && (u_int) -n > gd->hsize) + Sflag = args_get(args, 'S'); + if (Sflag != NULL && strcmp(Sflag, "-") == 0) top = 0; - else - top = gd->hsize + n; - if (top > gd->hsize + gd->sy - 1) - top = gd->hsize + gd->sy - 1; + else { + n = args_strtonum(args, 'S', INT_MIN, SHRT_MAX, &cause); + if (cause != NULL) { + top = gd->hsize; + free(cause); + } else if (n < 0 && (u_int) -n > gd->hsize) + top = 0; + else + top = gd->hsize + n; + if (top > gd->hsize + gd->sy - 1) + top = gd->hsize + gd->sy - 1; + } - n = args_strtonum(args, 'E', INT_MIN, SHRT_MAX, &cause); - if (cause != NULL) { - bottom = gd->hsize + gd->sy - 1; - free(cause); - } else if (n < 0 && (u_int) -n > gd->hsize) - bottom = 0; - else - bottom = gd->hsize + n; - if (bottom > gd->hsize + gd->sy - 1) + Eflag = args_get(args, 'E'); + if (Eflag != NULL && strcmp(Eflag, "-") == 0) bottom = gd->hsize + gd->sy - 1; + else { + n = args_strtonum(args, 'E', INT_MIN, SHRT_MAX, &cause); + if (cause != NULL) { + bottom = gd->hsize + gd->sy - 1; + free(cause); + } else if (n < 0 && (u_int) -n > gd->hsize) + bottom = 0; + else + bottom = gd->hsize + n; + if (bottom > gd->hsize + gd->sy - 1) + bottom = gd->hsize + gd->sy - 1; + } if (bottom < top) { tmp = bottom; |