mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Allow a start and end line to be specified for capture-pane which may be
negative to capture part of the history. Prompted by request from Victor J Orlikowski.
This commit is contained in:
		@@ -31,8 +31,8 @@ int	cmd_capture_pane_exec(struct cmd *, struct cmd_ctx *);
 | 
			
		||||
 | 
			
		||||
const struct cmd_entry cmd_capture_pane_entry = {
 | 
			
		||||
	"capture-pane", "capturep",
 | 
			
		||||
	"b:t:", 0, 0,
 | 
			
		||||
	"[-b buffer-index] [-t target-pane]",
 | 
			
		||||
	"b:E:S:t:", 0, 0,
 | 
			
		||||
	"[-b buffer-index] [-E end-line] [-S start-line] [-t target-pane]",
 | 
			
		||||
	0,
 | 
			
		||||
	NULL,
 | 
			
		||||
	NULL,
 | 
			
		||||
@@ -46,19 +46,47 @@ cmd_capture_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
	struct window_pane	*wp;
 | 
			
		||||
	char 			*buf, *line, *cause;
 | 
			
		||||
	struct screen		*s;
 | 
			
		||||
	int			 buffer;
 | 
			
		||||
	u_int			 i, limit;
 | 
			
		||||
	struct grid		*gd;
 | 
			
		||||
	int			 buffer, n;
 | 
			
		||||
	u_int			 i, limit, top, bottom, tmp;
 | 
			
		||||
	size_t         		 len, linelen;
 | 
			
		||||
 | 
			
		||||
	if (cmd_find_pane(ctx, args_get(args, 't'), NULL, &wp) == NULL)
 | 
			
		||||
		return (-1);
 | 
			
		||||
	s = &wp->base;
 | 
			
		||||
	gd = s->grid;
 | 
			
		||||
 | 
			
		||||
	buf = NULL;
 | 
			
		||||
	len = 0;
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < screen_size_y(s); i++) {
 | 
			
		||||
	       line = grid_view_string_cells(s->grid, 0, i, screen_size_x(s));
 | 
			
		||||
	n = args_strtonum(args, 'S', SHRT_MIN, SHRT_MAX, &cause);
 | 
			
		||||
	if (cause != NULL)
 | 
			
		||||
		top = gd->hsize;
 | 
			
		||||
	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', SHRT_MIN, SHRT_MAX, &cause);
 | 
			
		||||
	if (cause != NULL)
 | 
			
		||||
		bottom = gd->hsize + gd->sy - 1;
 | 
			
		||||
	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;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for (i = top; i <= bottom; i++) {
 | 
			
		||||
	       line = grid_string_cells(s->grid, 0, i, screen_size_x(s));
 | 
			
		||||
	       linelen = strlen(line);
 | 
			
		||||
 | 
			
		||||
	       buf = xrealloc(buf, 1, len + linelen + 1);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										9
									
								
								tmux.1
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								tmux.1
									
									
									
									
									
								
							@@ -953,11 +953,20 @@ If
 | 
			
		||||
is given, the new window does not become the current window.
 | 
			
		||||
.It Xo Ic capture-pane
 | 
			
		||||
.Op Fl b Ar buffer-index
 | 
			
		||||
.Op Fl E Ar end-line
 | 
			
		||||
.Op Fl S Ar start-line
 | 
			
		||||
.Op Fl t Ar target-pane
 | 
			
		||||
.Xc
 | 
			
		||||
.D1 (alias: Ic capturep )
 | 
			
		||||
Capture the contents of a pane to the specified buffer, or a new buffer if none
 | 
			
		||||
is specified.
 | 
			
		||||
.Pp
 | 
			
		||||
.Fl S
 | 
			
		||||
and
 | 
			
		||||
.Fl E
 | 
			
		||||
specify the starting and ending line numbers, zero is the first line of the
 | 
			
		||||
visible pane and negative numbers are lines in the history.
 | 
			
		||||
The default is to capture only the visible contents of the pane.
 | 
			
		||||
.It Xo
 | 
			
		||||
.Ic choose-client
 | 
			
		||||
.Op Fl t Ar target-window
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user