aboutsummaryrefslogtreecommitdiff
path: root/cmd-capture-pane.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2014-06-20 12:59:43 +0100
committerThomas Adam <thomas@xteddy.org>2014-06-20 12:59:43 +0100
commit814e40522cb611895e84fc2aaf58d5d0ca9ba348 (patch)
tree12e56d683fbcadf4d67f8a78acf8afcf1343ba0b /cmd-capture-pane.c
parent1544c688e6bdc61fec8a96588b2552551753e46b (diff)
parentc8efffb4db5c521640dd5687d2a640ca04664aad (diff)
downloadrtmux-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.c47
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;