mirror of
https://github.com/tmux/tmux.git
synced 2025-01-05 23:38:48 +00:00
Support capture-pane -p to send to stdout.
This commit is contained in:
parent
55bf2ecc68
commit
78543cce30
@ -24,15 +24,16 @@
|
||||
#include "tmux.h"
|
||||
|
||||
/*
|
||||
* Write the entire contents of a pane to a buffer.
|
||||
* Write the entire contents of a pane to a buffer or stdout.
|
||||
*/
|
||||
|
||||
enum cmd_retval cmd_capture_pane_exec(struct cmd *, struct cmd_ctx *);
|
||||
|
||||
const struct cmd_entry cmd_capture_pane_entry = {
|
||||
"capture-pane", "capturep",
|
||||
"b:E:S:t:", 0, 0,
|
||||
"[-b buffer-index] [-E end-line] [-S start-line] "
|
||||
"b:c:E:pS:t:", 0, 0,
|
||||
"[-p] [-c target-client] [-b buffer-index] [-E end-line] "
|
||||
"[-S start-line] "
|
||||
CMD_TARGET_PANE_USAGE,
|
||||
0,
|
||||
NULL,
|
||||
@ -44,6 +45,7 @@ enum cmd_retval
|
||||
cmd_capture_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
|
||||
{
|
||||
struct args *args = self->args;
|
||||
struct client *c;
|
||||
struct window_pane *wp;
|
||||
char *buf, *line, *cause;
|
||||
struct screen *s;
|
||||
@ -52,6 +54,9 @@ cmd_capture_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
|
||||
u_int i, limit, top, bottom, tmp;
|
||||
size_t len, linelen;
|
||||
|
||||
if ((c = cmd_find_client(ctx, args_get(args, 'c'))) == NULL)
|
||||
return (CMD_RETURN_ERROR);
|
||||
|
||||
if (cmd_find_pane(ctx, args_get(args, 't'), NULL, &wp) == NULL)
|
||||
return (CMD_RETURN_ERROR);
|
||||
s = &wp->base;
|
||||
@ -100,25 +105,33 @@ cmd_capture_pane_exec(struct cmd *self, struct cmd_ctx *ctx)
|
||||
free(line);
|
||||
}
|
||||
|
||||
limit = options_get_number(&global_options, "buffer-limit");
|
||||
if (args_has(args, 'p')) {
|
||||
if (c == NULL) {
|
||||
ctx->error(ctx, "can't write to stdout");
|
||||
return (CMD_RETURN_ERROR);
|
||||
}
|
||||
evbuffer_add(c->stdout_data, buf, len);
|
||||
server_push_stdout(c);
|
||||
} else {
|
||||
limit = options_get_number(&global_options, "buffer-limit");
|
||||
if (!args_has(args, 'b')) {
|
||||
paste_add(&global_buffers, buf, len, limit);
|
||||
return (CMD_RETURN_NORMAL);
|
||||
}
|
||||
|
||||
if (!args_has(args, 'b')) {
|
||||
paste_add(&global_buffers, buf, len, limit);
|
||||
return (CMD_RETURN_NORMAL);
|
||||
}
|
||||
buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause);
|
||||
if (cause != NULL) {
|
||||
ctx->error(ctx, "buffer %s", cause);
|
||||
free(buf);
|
||||
free(cause);
|
||||
return (CMD_RETURN_ERROR);
|
||||
}
|
||||
|
||||
buffer = args_strtonum(args, 'b', 0, INT_MAX, &cause);
|
||||
if (cause != NULL) {
|
||||
ctx->error(ctx, "buffer %s", cause);
|
||||
free(buf);
|
||||
free(cause);
|
||||
return (CMD_RETURN_ERROR);
|
||||
}
|
||||
|
||||
if (paste_replace(&global_buffers, buffer, buf, len) != 0) {
|
||||
ctx->error(ctx, "no buffer %d", buffer);
|
||||
free(buf);
|
||||
return (CMD_RETURN_ERROR);
|
||||
if (paste_replace(&global_buffers, buffer, buf, len) != 0) {
|
||||
ctx->error(ctx, "no buffer %d", buffer);
|
||||
free(buf);
|
||||
return (CMD_RETURN_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
return (CMD_RETURN_NORMAL);
|
||||
|
12
tmux.1
12
tmux.1
@ -1036,14 +1036,22 @@ By default, it uses the format
|
||||
but a different format may be specified with
|
||||
.Fl F .
|
||||
.It Xo Ic capture-pane
|
||||
.Op Fl p
|
||||
.Op Fl b Ar buffer-index
|
||||
.Op Fl c Ar target-client
|
||||
.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.
|
||||
Capture the contents of a pane.
|
||||
If
|
||||
.Fl p
|
||||
is given, the output goes to
|
||||
.Ar target-client
|
||||
stdout, otherwise to the buffer specified with
|
||||
.Fl b
|
||||
or a new buffer if omitted.
|
||||
.Pp
|
||||
.Fl S
|
||||
and
|
||||
|
Loading…
Reference in New Issue
Block a user