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