mirror of
https://github.com/tmate-io/tmate.git
synced 2024-12-23 15:19:06 +01:00
Start of improved buffer code. Only set-buffer/show-buffer commands so far.
This commit is contained in:
parent
af924e726a
commit
9798dcd4df
7
Makefile
7
Makefile
@ -1,4 +1,4 @@
|
||||
# $Id: Makefile,v 1.63 2008-06-19 20:45:20 nicm Exp $
|
||||
# $Id: Makefile,v 1.64 2008-06-20 08:36:20 nicm Exp $
|
||||
|
||||
.SUFFIXES: .c .o .y .h
|
||||
.PHONY: clean update-index.html upload-index.html
|
||||
@ -30,8 +30,9 @@ SRCS= tmux.c server.c server-msg.c server-fn.c buffer.c buffer-poll.c status.c \
|
||||
cmd-switch-client.c cmd-has-session.c cmd-scroll-mode.c cmd-copy-mode.c \
|
||||
cmd-paste-buffer.c cmd-new-session.c cmd-start-server.c \
|
||||
cmd-kill-server.c cmd-set-window-option.c cmd-show-options.c \
|
||||
cmd-show-window-options.c cmd-command-prompt.c \
|
||||
window-scroll.c window-more.c window-copy.c options.c \
|
||||
cmd-show-window-options.c cmd-command-prompt.c cmd-set-buffer.c \
|
||||
cmd-show-buffer.c \
|
||||
window-scroll.c window-more.c window-copy.c options.c paste.c \
|
||||
tty.c tty-keys.c tty-write.c screen-write.c screen-redraw.c
|
||||
|
||||
CC?= cc
|
||||
|
12
TODO
12
TODO
@ -75,3 +75,15 @@
|
||||
- support \033_string\033\\ for window title too
|
||||
- fix bell-action in show-options
|
||||
- list-keys should be sorted
|
||||
---
|
||||
buffer stack. buffer numbered 0 is top and ascending
|
||||
|
||||
where -b number == top if missing:
|
||||
paste-buffer -b number
|
||||
delete-buffer -b number
|
||||
set-buffer -b number string
|
||||
save-buffer -b number filename
|
||||
load-buffer -b number filename
|
||||
copy-buffer (from other session)
|
||||
show-buffers
|
||||
---
|
||||
|
11
array.h
11
array.h
@ -1,4 +1,4 @@
|
||||
/* $Id: array.h,v 1.4 2008-06-18 16:35:26 nicm Exp $ */
|
||||
/* $Id: array.h,v 1.5 2008-06-20 08:36:20 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2006 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -54,6 +54,15 @@
|
||||
(a)->list[(a)->num] = s; \
|
||||
(a)->num++; \
|
||||
} while (0)
|
||||
#define ARRAY_INSERT(a, i, s) do { \
|
||||
ENSURE_SIZE2((a)->list, (a)->space, (a)->num + 1, ARRAY_ITEMSIZE(a)); \
|
||||
if ((i) < (a)->num) { \
|
||||
memmove((a)->list + (i) + 1, (a)->list + (i), \
|
||||
ARRAY_ITEMSIZE(a) * ((a)->num - (i))); \
|
||||
} \
|
||||
(a)->list[i] = s; \
|
||||
(a)->num++; \
|
||||
} while (0)
|
||||
#define ARRAY_REMOVE(a, i) do { \
|
||||
if ((i) < (a)->num - 1) { \
|
||||
memmove((a)->list + (i), (a)->list + (i) + 1, \
|
||||
|
132
cmd-generic.c
132
cmd-generic.c
@ -1,4 +1,4 @@
|
||||
/* $Id: cmd-generic.c,v 1.10 2008-06-18 22:21:51 nicm Exp $ */
|
||||
/* $Id: cmd-generic.c,v 1.11 2008-06-20 08:36:20 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -262,3 +262,133 @@ cmd_srcdst_print(struct cmd *self, char *buf, size_t len)
|
||||
if (off < len && data->arg != NULL)
|
||||
off += xsnprintf(buf + off, len - off, " %s", data->arg);
|
||||
}
|
||||
|
||||
void
|
||||
cmd_buffer_init(struct cmd *self, unused int key)
|
||||
{
|
||||
struct cmd_buffer_data *data;
|
||||
|
||||
self->data = data = xmalloc(sizeof *data);
|
||||
data->flags = 0;
|
||||
data->target = NULL;
|
||||
data->buffer = -1;
|
||||
data->arg = NULL;
|
||||
}
|
||||
|
||||
int
|
||||
cmd_buffer_parse(struct cmd *self, int argc, char **argv, char **cause)
|
||||
{
|
||||
struct cmd_buffer_data *data;
|
||||
int opt, n;
|
||||
const char *errstr;
|
||||
|
||||
cmd_buffer_init(self, 0);
|
||||
data = self->data;
|
||||
|
||||
while ((opt = getopt(argc, argv, "b:dkt:")) != EOF) {
|
||||
switch (opt) {
|
||||
case 'b':
|
||||
if (data->buffer == -1) {
|
||||
n = strtonum(optarg, 0, INT_MAX, &errstr);
|
||||
if (errstr != NULL) {
|
||||
xasprintf(
|
||||
cause, "buffer index %s", errstr);
|
||||
goto error;
|
||||
}
|
||||
data->buffer = n;
|
||||
}
|
||||
break;
|
||||
case 'd':
|
||||
if (self->entry->flags & CMD_DFLAG) {
|
||||
data->flags |= CMD_DFLAG;
|
||||
break;
|
||||
}
|
||||
goto usage;
|
||||
case 'k':
|
||||
if (self->entry->flags & CMD_KFLAG) {
|
||||
data->flags |= CMD_KFLAG;
|
||||
break;
|
||||
}
|
||||
goto usage;
|
||||
case 't':
|
||||
if (data->target == NULL)
|
||||
data->target = xstrdup(optarg);
|
||||
break;
|
||||
default:
|
||||
goto usage;
|
||||
}
|
||||
}
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
if (self->entry->flags & CMD_ONEARG) {
|
||||
if (argc != 1)
|
||||
goto usage;
|
||||
data->arg = xstrdup(argv[0]);
|
||||
} else {
|
||||
if (argc != 0)
|
||||
goto usage;
|
||||
}
|
||||
return (0);
|
||||
|
||||
usage:
|
||||
xasprintf(cause, "usage: %s %s", self->entry->name, self->entry->usage);
|
||||
|
||||
error:
|
||||
self->entry->free(self);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
void
|
||||
cmd_buffer_send(struct cmd *self, struct buffer *b)
|
||||
{
|
||||
struct cmd_buffer_data *data = self->data;
|
||||
|
||||
buffer_write(b, data, sizeof *data);
|
||||
cmd_send_string(b, data->target);
|
||||
cmd_send_string(b, data->arg);
|
||||
}
|
||||
|
||||
void
|
||||
cmd_buffer_recv(struct cmd *self, struct buffer *b)
|
||||
{
|
||||
struct cmd_buffer_data *data;
|
||||
|
||||
self->data = data = xmalloc(sizeof *data);
|
||||
buffer_read(b, data, sizeof *data);
|
||||
data->target = cmd_recv_string(b);
|
||||
data->arg = cmd_recv_string(b);
|
||||
}
|
||||
|
||||
void
|
||||
cmd_buffer_free(struct cmd *self)
|
||||
{
|
||||
struct cmd_buffer_data *data = self->data;
|
||||
|
||||
if (data->target != NULL)
|
||||
xfree(data->target);
|
||||
if (data->arg != NULL)
|
||||
xfree(data->arg);
|
||||
xfree(data);
|
||||
}
|
||||
|
||||
void
|
||||
cmd_buffer_print(struct cmd *self, char *buf, size_t len)
|
||||
{
|
||||
struct cmd_buffer_data *data = self->data;
|
||||
size_t off = 0;
|
||||
|
||||
off += xsnprintf(buf, len, "%s", self->entry->name);
|
||||
if (data == NULL)
|
||||
return;
|
||||
if (off < len && data->flags & CMD_DFLAG)
|
||||
off += xsnprintf(buf + off, len - off, " -d");
|
||||
if (off < len && data->flags & CMD_KFLAG)
|
||||
off += xsnprintf(buf + off, len - off, " -k");
|
||||
if (off < len && data->buffer != -1)
|
||||
off += xsnprintf(buf + off, len - off, " -b %d", data->buffer);
|
||||
if (off < len && data->target != NULL)
|
||||
off += xsnprintf(buf + off, len - off, " -t %s", data->target);
|
||||
if (off < len && data->arg != NULL)
|
||||
off += xsnprintf(buf + off, len - off, " %s", data->arg);
|
||||
}
|
||||
|
63
cmd-set-buffer.c
Normal file
63
cmd-set-buffer.c
Normal file
@ -0,0 +1,63 @@
|
||||
/* $Id: cmd-set-buffer.c,v 1.1 2008-06-20 08:36:20 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <getopt.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "tmux.h"
|
||||
|
||||
/*
|
||||
* Add or set a session paste buffer.
|
||||
*/
|
||||
|
||||
void cmd_set_buffer_exec(struct cmd *, struct cmd_ctx *);
|
||||
|
||||
const struct cmd_entry cmd_set_buffer_entry = {
|
||||
"set-buffer", "setb",
|
||||
CMD_BUFFER_SESSION_USAGE " data",
|
||||
CMD_ONEARG,
|
||||
cmd_buffer_init,
|
||||
cmd_buffer_parse,
|
||||
cmd_set_buffer_exec,
|
||||
cmd_buffer_send,
|
||||
cmd_buffer_recv,
|
||||
cmd_buffer_free,
|
||||
cmd_buffer_print
|
||||
};
|
||||
|
||||
void
|
||||
cmd_set_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
|
||||
{
|
||||
struct cmd_buffer_data *data = self->data;
|
||||
struct session *s;
|
||||
|
||||
if ((s = cmd_find_session(ctx, data->target)) == NULL)
|
||||
return;
|
||||
|
||||
if (data->buffer == -1)
|
||||
paste_add(&s->buffers, data->arg);
|
||||
else {
|
||||
if (paste_replace(&s->buffers, data->buffer, data->arg) != 0)
|
||||
ctx->error(ctx, "no buffer %d", data->buffer);
|
||||
}
|
||||
|
||||
if (ctx->cmdclient != NULL)
|
||||
server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0);
|
||||
}
|
89
cmd-show-buffer.c
Normal file
89
cmd-show-buffer.c
Normal file
@ -0,0 +1,89 @@
|
||||
/* $Id: cmd-show-buffer.c,v 1.1 2008-06-20 08:36:20 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <getopt.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "tmux.h"
|
||||
|
||||
/*
|
||||
* Show a session paste buffer.
|
||||
*/
|
||||
|
||||
void cmd_show_buffer_exec(struct cmd *, struct cmd_ctx *);
|
||||
|
||||
const struct cmd_entry cmd_show_buffer_entry = {
|
||||
"show-buffer", "showb",
|
||||
CMD_BUFFER_SESSION_USAGE,
|
||||
0,
|
||||
cmd_buffer_init,
|
||||
cmd_buffer_parse,
|
||||
cmd_show_buffer_exec,
|
||||
cmd_buffer_send,
|
||||
cmd_buffer_recv,
|
||||
cmd_buffer_free,
|
||||
cmd_buffer_print
|
||||
};
|
||||
|
||||
void
|
||||
cmd_show_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
|
||||
{
|
||||
struct cmd_buffer_data *data = self->data;
|
||||
struct session *s;
|
||||
struct paste_buffer *pb;
|
||||
u_int size;
|
||||
char *buf, *ptr;
|
||||
size_t len;
|
||||
|
||||
if ((s = cmd_find_session(ctx, data->target)) == NULL)
|
||||
return;
|
||||
|
||||
if (data->buffer == -1) {
|
||||
if ((pb = paste_get_top(&s->buffers)) == NULL)
|
||||
ctx->error(ctx, "no buffers");
|
||||
} else {
|
||||
if ((pb = paste_get_index(&s->buffers, data->buffer)) == NULL)
|
||||
ctx->error(ctx, "no buffer %d", data->buffer);
|
||||
}
|
||||
|
||||
if (pb != NULL) {
|
||||
size = s->sx;
|
||||
|
||||
buf = xmalloc(size + 1);
|
||||
len = 0;
|
||||
|
||||
ptr = pb->data;
|
||||
do {
|
||||
buf[len++] = *ptr++;
|
||||
|
||||
if (len == size) {
|
||||
buf[len] = '\0';
|
||||
ctx->print(ctx, buf);
|
||||
|
||||
len = 0;
|
||||
}
|
||||
} while (*ptr != '\0');
|
||||
buf[len] = '\0';
|
||||
ctx->print(ctx, buf);
|
||||
}
|
||||
|
||||
if (ctx->cmdclient != NULL)
|
||||
server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0);
|
||||
}
|
4
cmd.c
4
cmd.c
@ -1,4 +1,4 @@
|
||||
/* $Id: cmd.c,v 1.50 2008-06-19 20:45:20 nicm Exp $ */
|
||||
/* $Id: cmd.c,v 1.51 2008-06-20 08:36:20 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -54,8 +54,10 @@ const struct cmd_entry *cmd_table[] = {
|
||||
&cmd_select_window_entry,
|
||||
&cmd_send_keys_entry,
|
||||
&cmd_send_prefix_entry,
|
||||
&cmd_set_buffer_entry,
|
||||
&cmd_set_option_entry,
|
||||
&cmd_set_window_option_entry,
|
||||
&cmd_show_buffer_entry,
|
||||
&cmd_show_options_entry,
|
||||
&cmd_show_window_options_entry,
|
||||
&cmd_start_server_entry,
|
||||
|
128
paste.c
Normal file
128
paste.c
Normal file
@ -0,0 +1,128 @@
|
||||
/* $Id: paste.c,v 1.1 2008-06-20 08:36:20 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "tmux.h"
|
||||
|
||||
void
|
||||
paste_init_stack(struct paste_stack *ps)
|
||||
{
|
||||
ARRAY_INIT(ps);
|
||||
}
|
||||
|
||||
void
|
||||
paste_free_stack(struct paste_stack *ps)
|
||||
{
|
||||
while (paste_free_top(ps) == 0)
|
||||
;
|
||||
}
|
||||
|
||||
struct paste_buffer *
|
||||
paste_walk_stack(struct paste_stack *ps, uint *idx)
|
||||
{
|
||||
struct paste_buffer *pb;
|
||||
|
||||
pb = paste_get_index(ps, *idx);
|
||||
(*idx)++;
|
||||
return (pb);
|
||||
}
|
||||
|
||||
struct paste_buffer *
|
||||
paste_get_top(struct paste_stack *ps)
|
||||
{
|
||||
if (ARRAY_LENGTH(ps) == 0)
|
||||
return (NULL);
|
||||
return (ARRAY_FIRST(ps));
|
||||
}
|
||||
|
||||
struct paste_buffer *
|
||||
paste_get_index(struct paste_stack *ps, u_int idx)
|
||||
{
|
||||
if (idx >= ARRAY_LENGTH(ps))
|
||||
return (NULL);
|
||||
return (ARRAY_ITEM(ps, idx));
|
||||
}
|
||||
|
||||
int
|
||||
paste_free_top(struct paste_stack *ps)
|
||||
{
|
||||
struct paste_buffer *pb;
|
||||
|
||||
if (ARRAY_LENGTH(ps) == 0)
|
||||
return (1);
|
||||
|
||||
pb = ARRAY_FIRST(ps);
|
||||
ARRAY_REMOVE(ps, 0);
|
||||
|
||||
xfree(pb->data);
|
||||
xfree(pb);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
paste_free_index(struct paste_stack *ps, u_int idx)
|
||||
{
|
||||
struct paste_buffer *pb;
|
||||
|
||||
if (idx >= ARRAY_LENGTH(ps))
|
||||
return (1);
|
||||
|
||||
pb = ARRAY_ITEM(ps, idx);
|
||||
ARRAY_REMOVE(ps, idx);
|
||||
|
||||
xfree(pb->data);
|
||||
xfree(pb);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
void
|
||||
paste_add(struct paste_stack *ps, const char *data)
|
||||
{
|
||||
struct paste_buffer *pb;
|
||||
|
||||
pb = xmalloc(sizeof *pb);
|
||||
ARRAY_INSERT(ps, 0, pb);
|
||||
|
||||
pb->data = xstrdup(data);
|
||||
if (clock_gettime(CLOCK_REALTIME, &pb->created) != 0)
|
||||
fatal("clock_gettime");
|
||||
}
|
||||
|
||||
int
|
||||
paste_replace(struct paste_stack *ps, u_int idx, const char *data)
|
||||
{
|
||||
struct paste_buffer *pb;
|
||||
|
||||
if (idx >= ARRAY_LENGTH(ps))
|
||||
return (1);
|
||||
|
||||
pb = ARRAY_ITEM(ps, idx);
|
||||
xfree(pb->data);
|
||||
|
||||
pb->data = xstrdup(data);
|
||||
if (clock_gettime(CLOCK_REALTIME, &pb->created) != 0)
|
||||
fatal("clock_gettime");
|
||||
|
||||
return (0);
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/* $Id: session.c,v 1.38 2008-06-18 22:21:51 nicm Exp $ */
|
||||
/* $Id: session.c,v 1.39 2008-06-20 08:36:20 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -120,6 +120,7 @@ session_create(const char *name, const char *cmd, u_int sx, u_int sy)
|
||||
s->curw = s->lastw = NULL;
|
||||
RB_INIT(&s->windows);
|
||||
TAILQ_INIT(&s->alerts);
|
||||
paste_init_stack(&s->buffers);
|
||||
options_init(&s->options, &global_options);
|
||||
|
||||
s->sx = sx;
|
||||
@ -165,6 +166,7 @@ session_destroy(struct session *s)
|
||||
|
||||
session_alert_cancel(s, NULL);
|
||||
options_free(&s->options);
|
||||
paste_free_stack(&s->buffers);
|
||||
|
||||
while (!RB_EMPTY(&s->windows))
|
||||
winlink_remove(&s->windows, RB_ROOT(&s->windows));
|
||||
|
41
tmux.h
41
tmux.h
@ -1,4 +1,4 @@
|
||||
/* $Id: tmux.h,v 1.156 2008-06-20 06:36:01 nicm Exp $ */
|
||||
/* $Id: tmux.h,v 1.157 2008-06-20 08:36:20 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -590,6 +590,13 @@ struct options {
|
||||
struct options *parent;
|
||||
};
|
||||
|
||||
/* Paste buffer. */
|
||||
struct paste_buffer {
|
||||
char *data;
|
||||
struct timespec created;
|
||||
};
|
||||
ARRAY_DECL(paste_stack, struct paste_buffer *);
|
||||
|
||||
/* Client session. */
|
||||
struct session_alert {
|
||||
struct winlink *wl;
|
||||
@ -611,6 +618,8 @@ struct session {
|
||||
|
||||
struct options options;
|
||||
|
||||
struct paste_stack buffers;
|
||||
|
||||
TAILQ_HEAD(, session_alert) alerts;
|
||||
|
||||
#define SESSION_UNATTACHED 0x1 /* not attached to any clients */
|
||||
@ -760,6 +769,13 @@ struct cmd_srcdst_data {
|
||||
char *arg;
|
||||
};
|
||||
|
||||
struct cmd_buffer_data {
|
||||
int flags;
|
||||
char *target;
|
||||
int buffer;
|
||||
char *arg;
|
||||
};
|
||||
|
||||
/* Key binding. */
|
||||
struct binding {
|
||||
int key;
|
||||
@ -851,6 +867,17 @@ void tty_vwrite_window(void *, int, va_list);
|
||||
void tty_write_session(void *, int, ...);
|
||||
void tty_vwrite_session(void *, int, va_list);
|
||||
|
||||
/* paste.c */
|
||||
void paste_init_stack(struct paste_stack *);
|
||||
void paste_free_stack(struct paste_stack *);
|
||||
struct paste_buffer *paste_walk_stack(struct paste_stack *, uint *);
|
||||
struct paste_buffer *paste_get_top(struct paste_stack *);
|
||||
struct paste_buffer *paste_get_index(struct paste_stack *, u_int);
|
||||
int paste_free_top(struct paste_stack *);
|
||||
int paste_free_index(struct paste_stack *, u_int);
|
||||
void paste_add(struct paste_stack *, const char *);
|
||||
int paste_replace(struct paste_stack *, u_int, const char *);
|
||||
|
||||
/* arg.c */
|
||||
struct client *arg_parse_client(const char *);
|
||||
struct session *arg_parse_session(const char *);
|
||||
@ -896,8 +923,10 @@ extern const struct cmd_entry cmd_scroll_mode_entry;
|
||||
extern const struct cmd_entry cmd_select_window_entry;
|
||||
extern const struct cmd_entry cmd_send_keys_entry;
|
||||
extern const struct cmd_entry cmd_send_prefix_entry;
|
||||
extern const struct cmd_entry cmd_set_buffer_entry;
|
||||
extern const struct cmd_entry cmd_set_option_entry;
|
||||
extern const struct cmd_entry cmd_set_window_option_entry;
|
||||
extern const struct cmd_entry cmd_show_buffer_entry;
|
||||
extern const struct cmd_entry cmd_show_options_entry;
|
||||
extern const struct cmd_entry cmd_show_window_options_entry;
|
||||
extern const struct cmd_entry cmd_start_server_entry;
|
||||
@ -930,6 +959,16 @@ void cmd_srcdst_send(struct cmd *, struct buffer *);
|
||||
void cmd_srcdst_recv(struct cmd *, struct buffer *);
|
||||
void cmd_srcdst_free(struct cmd *);
|
||||
void cmd_srcdst_print(struct cmd *, char *, size_t);
|
||||
#define CMD_BUFFER_WINDOW_USAGE "[-b index] [-t target-window]"
|
||||
#define CMD_BUFFER_SESSION_USAGE "[-b index] [-t target-session]"
|
||||
#define CMD_BUFFER_CLIENT_USAGE "[-b index] [-t target-client]"
|
||||
void cmd_buffer_init(struct cmd *, int);
|
||||
int cmd_buffer_parse(struct cmd *, int, char **, char **);
|
||||
void cmd_buffer_exec(struct cmd *, struct cmd_ctx *);
|
||||
void cmd_buffer_send(struct cmd *, struct buffer *);
|
||||
void cmd_buffer_recv(struct cmd *, struct buffer *);
|
||||
void cmd_buffer_free(struct cmd *);
|
||||
void cmd_buffer_print(struct cmd *, char *, size_t);
|
||||
|
||||
/* client.c */
|
||||
int client_init(const char *, struct client_ctx *, int);
|
||||
|
Loading…
Reference in New Issue
Block a user