=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-capture-pane.c,v retrieving revision 1.20 retrieving revision 1.21 diff -c -r1.20 -r1.21 *** src/usr.bin/tmux/cmd-capture-pane.c 2013/03/25 10:02:17 1.20 --- src/usr.bin/tmux/cmd-capture-pane.c 2013/03/25 10:04:04 1.21 *************** *** 1,4 **** ! /* $OpenBSD: cmd-capture-pane.c,v 1.20 2013/03/25 10:02:17 nicm Exp $ */ /* * Copyright (c) 2009 Jonathan Alvarado --- 1,4 ---- ! /* $OpenBSD: cmd-capture-pane.c,v 1.21 2013/03/25 10:04:04 nicm Exp $ */ /* * Copyright (c) 2009 Jonathan Alvarado *************** *** 31,38 **** const struct cmd_entry cmd_capture_pane_entry = { "capture-pane", "capturep", ! "ab:CeE:JpS:t:", 0, 0, ! "[-aCeJp] [-b buffer-index] [-E end-line] [-S start-line]" CMD_TARGET_PANE_USAGE, 0, NULL, --- 31,38 ---- const struct cmd_entry cmd_capture_pane_entry = { "capture-pane", "capturep", ! "ab:CeE:JpqS:t:", 0, 0, ! "[-aCeJpq] [-b buffer-index] [-E end-line] [-S start-line]" CMD_TARGET_PANE_USAGE, 0, NULL, *************** *** 62,68 **** s = NULL; gd = wp->saved_grid; sx = screen_size_x(&wp->base); ! if (gd == NULL) { cmdq_error(cmdq, "no alternate screen"); return (CMD_RETURN_ERROR); } --- 62,68 ---- s = NULL; gd = wp->saved_grid; sx = screen_size_x(&wp->base); ! if (gd == NULL && !args_has(args, 'q')) { cmdq_error(cmdq, "no alternate screen"); return (CMD_RETURN_ERROR); } *************** *** 75,128 **** buf = NULL; len = 0; ! 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) ! bottom = gd->hsize + gd->sy - 1; ! if (bottom < top) { ! tmp = bottom; ! bottom = top; ! top = tmp; ! } ! with_codes = args_has(args, 'e'); ! escape_c0 = args_has(args, 'C'); ! join_lines = args_has(args, 'J'); ! gc = NULL; ! for (i = top; i <= bottom; i++) { ! line = grid_string_cells(gd, 0, i, sx, &gc, with_codes, ! escape_c0); ! linelen = strlen(line); ! buf = xrealloc(buf, 1, len + linelen + 1); ! memcpy(buf + len, line, linelen); ! len += linelen; ! gl = grid_peek_line(gd, i); ! if (!join_lines || !(gl->flags & GRID_LINE_WRAPPED)) ! buf[len++] = '\n'; ! free(line); ! } if (args_has(args, 'p')) { c = cmdq->client; --- 75,131 ---- buf = NULL; len = 0; ! if (gd != NULL) { ! 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) ! bottom = gd->hsize + gd->sy - 1; ! if (bottom < top) { ! tmp = bottom; ! bottom = top; ! top = tmp; ! } ! with_codes = args_has(args, 'e'); ! escape_c0 = args_has(args, 'C'); ! join_lines = args_has(args, 'J'); ! gc = NULL; ! for (i = top; i <= bottom; i++) { ! line = grid_string_cells(gd, 0, i, sx, &gc, with_codes, ! escape_c0); ! linelen = strlen(line); ! buf = xrealloc(buf, 1, len + linelen + 1); ! memcpy(buf + len, line, linelen); ! len += linelen; ! gl = grid_peek_line(gd, i); ! if (!join_lines || !(gl->flags & GRID_LINE_WRAPPED)) ! buf[len++] = '\n'; ! free(line); ! } ! } else ! buf = xstrdup(""); if (args_has(args, 'p')) { c = cmdq->client;