mirror of
https://github.com/tmate-io/tmate.git
synced 2025-01-22 13:58:44 +01:00
Swap in new paste buffer code and add a couple more commands.
This commit is contained in:
parent
9798dcd4df
commit
4e4f71febb
13
CHANGES
13
CHANGES
@ -1,5 +1,16 @@
|
||||
20 June 2008
|
||||
|
||||
* Initial buffer improvements. Each session has a stack of buffers and each
|
||||
buffer command takes a -b option to manipulate items on the stack. If -b
|
||||
is omitted, the top entry is used. The following commands are currently
|
||||
available:
|
||||
|
||||
set-buffer [-b index] [-t target-session] string
|
||||
paste-buffer [-d] [-b index] [-t target-window]
|
||||
delete-buffer [-b index] [-t target-session]
|
||||
show-buffers [-t target-session]
|
||||
|
||||
-d to paste-buffer deletes the buffer after pasting it.
|
||||
* New option, display-time, sets the time status line messages stay on screen
|
||||
(unless a key is pressed). Set in milliseconds, default is 750 (0.75 seconds).
|
||||
The timer is only checked every 100 ms or so.
|
||||
@ -517,4 +528,4 @@
|
||||
(including mutt, emacs). No status bar yet and no key remapping or other
|
||||
customisation.
|
||||
|
||||
$Id: CHANGES,v 1.130 2008-06-19 23:24:40 nicm Exp $
|
||||
$Id: CHANGES,v 1.131 2008-06-20 17:31:48 nicm Exp $
|
||||
|
4
Makefile
4
Makefile
@ -1,4 +1,4 @@
|
||||
# $Id: Makefile,v 1.64 2008-06-20 08:36:20 nicm Exp $
|
||||
# $Id: Makefile,v 1.65 2008-06-20 17:31:48 nicm Exp $
|
||||
|
||||
.SUFFIXES: .c .o .y .h
|
||||
.PHONY: clean update-index.html upload-index.html
|
||||
@ -31,7 +31,7 @@ SRCS= tmux.c server.c server-msg.c server-fn.c buffer.c buffer-poll.c status.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 cmd-set-buffer.c \
|
||||
cmd-show-buffer.c \
|
||||
cmd-show-buffer.c cmd-list-buffers.c cmd-delete-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
|
||||
|
||||
|
10
TODO
10
TODO
@ -77,13 +77,15 @@
|
||||
- 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)
|
||||
---
|
||||
set-buffer -b number string
|
||||
show-buffer -n number
|
||||
paste-buffer -b number
|
||||
delete-buffer -b number
|
||||
show-buffers
|
||||
---
|
||||
|
63
cmd-delete-buffer.c
Normal file
63
cmd-delete-buffer.c
Normal file
@ -0,0 +1,63 @@
|
||||
/* $Id: cmd-delete-buffer.c,v 1.1 2008-06-20 17:31:48 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"
|
||||
|
||||
/*
|
||||
* Delete a paste buffer.
|
||||
*/
|
||||
|
||||
void cmd_delete_buffer_exec(struct cmd *, struct cmd_ctx *);
|
||||
|
||||
const struct cmd_entry cmd_delete_buffer_entry = {
|
||||
"delete-buffer", "deleteb",
|
||||
CMD_BUFFER_SESSION_USAGE,
|
||||
0,
|
||||
cmd_buffer_init,
|
||||
cmd_buffer_parse,
|
||||
cmd_delete_buffer_exec,
|
||||
cmd_buffer_send,
|
||||
cmd_buffer_recv,
|
||||
cmd_buffer_free,
|
||||
cmd_buffer_print
|
||||
};
|
||||
|
||||
void
|
||||
cmd_delete_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_free_top(&s->buffers);
|
||||
else {
|
||||
if (paste_free_index(&s->buffers, data->buffer) != 0)
|
||||
ctx->error(ctx, "no buffer %d", data->buffer);
|
||||
}
|
||||
|
||||
if (ctx->cmdclient != NULL)
|
||||
server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0);
|
||||
}
|
80
cmd-list-buffers.c
Normal file
80
cmd-list-buffers.c
Normal file
@ -0,0 +1,80 @@
|
||||
/* $Id: cmd-list-buffers.c,v 1.1 2008-06-20 17:31:48 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 "tmux.h"
|
||||
|
||||
/*
|
||||
* List paste buffers.
|
||||
*/
|
||||
|
||||
void cmd_list_buffers_exec(struct cmd *, struct cmd_ctx *);
|
||||
|
||||
const struct cmd_entry cmd_list_buffers_entry = {
|
||||
"list-buffers", "lsb",
|
||||
CMD_TARGET_SESSION_USAGE,
|
||||
0,
|
||||
cmd_target_init,
|
||||
cmd_target_parse,
|
||||
cmd_list_buffers_exec,
|
||||
cmd_target_send,
|
||||
cmd_target_recv,
|
||||
cmd_target_free,
|
||||
cmd_target_print
|
||||
};
|
||||
|
||||
void
|
||||
cmd_list_buffers_exec(struct cmd *self, struct cmd_ctx *ctx)
|
||||
{
|
||||
struct cmd_target_data *data = self->data;
|
||||
struct session *s;
|
||||
struct paste_buffer *pb;
|
||||
u_int idx;
|
||||
char tmp[16], *tim;
|
||||
size_t in, out;
|
||||
|
||||
if ((s = cmd_find_session(ctx, data->target)) == NULL)
|
||||
return;
|
||||
|
||||
idx = 0;
|
||||
while ((pb = paste_walk_stack(&s->buffers, &idx)) != NULL) {
|
||||
in = out = 0;
|
||||
while (out < (sizeof tmp) - 1 && pb->data[in] != '\0') {
|
||||
if (pb->data[in] > 31 && pb->data[in] != 127)
|
||||
tmp[out++] = pb->data[in];
|
||||
in++;
|
||||
}
|
||||
tmp[out] = '\0';
|
||||
if (out == (sizeof tmp) - 1) {
|
||||
tmp[out - 1] = '.';
|
||||
tmp[out - 2] = '.';
|
||||
}
|
||||
|
||||
tim = ctime(&pb->ts.tv_sec);
|
||||
*strchr(tim, '\n') = '\0';
|
||||
|
||||
ctx->print(ctx, "%d: %zu bytes "
|
||||
"(created %s): \"%s\"", idx, strlen(pb->data), tim, tmp);
|
||||
}
|
||||
|
||||
if (ctx->cmdclient != NULL)
|
||||
server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0);
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/* $Id: cmd-paste-buffer.c,v 1.8 2008-06-05 21:25:00 nicm Exp $ */
|
||||
/* $Id: cmd-paste-buffer.c,v 1.9 2008-06-20 17:31:48 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -29,30 +29,45 @@
|
||||
void cmd_paste_buffer_exec(struct cmd *, struct cmd_ctx *);
|
||||
|
||||
const struct cmd_entry cmd_paste_buffer_entry = {
|
||||
"paste-buffer", "paste",
|
||||
CMD_TARGET_WINDOW_USAGE,
|
||||
0,
|
||||
cmd_target_init,
|
||||
cmd_target_parse,
|
||||
"paste-buffer", "pasteb",
|
||||
CMD_BUFFER_WINDOW_USAGE,
|
||||
CMD_DFLAG,
|
||||
cmd_buffer_init,
|
||||
cmd_buffer_parse,
|
||||
cmd_paste_buffer_exec,
|
||||
cmd_target_send,
|
||||
cmd_target_recv,
|
||||
cmd_target_free,
|
||||
cmd_target_print
|
||||
cmd_buffer_send,
|
||||
cmd_buffer_recv,
|
||||
cmd_buffer_free,
|
||||
cmd_buffer_print
|
||||
};
|
||||
|
||||
void
|
||||
cmd_paste_buffer_exec(struct cmd *self, struct cmd_ctx *ctx)
|
||||
{
|
||||
struct cmd_target_data *data = self->data;
|
||||
struct cmd_buffer_data *data = self->data;
|
||||
struct winlink *wl;
|
||||
struct session *s;
|
||||
struct paste_buffer *pb;
|
||||
|
||||
if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL)
|
||||
if ((wl = cmd_find_window(ctx, data->target, &s)) == NULL)
|
||||
return;
|
||||
|
||||
if (paste_buffer != NULL && *paste_buffer != '\0') {
|
||||
buffer_write(
|
||||
wl->window->out, paste_buffer, strlen(paste_buffer));
|
||||
if (data->buffer == -1)
|
||||
pb = paste_get_top(&s->buffers);
|
||||
else {
|
||||
if ((pb = paste_get_top(&s->buffers)) == NULL)
|
||||
ctx->error(ctx, "no buffer %d", data->buffer);
|
||||
}
|
||||
|
||||
if (pb != NULL)
|
||||
buffer_write(wl->window->out, pb->data, strlen(pb->data));
|
||||
|
||||
/* Delete the buffer if -d. */
|
||||
if (ctx->flags & CMD_DFLAG) {
|
||||
if (data->buffer == -1)
|
||||
paste_free_top(&s->buffers);
|
||||
else
|
||||
paste_free_index(&s->buffers, data->buffer);
|
||||
}
|
||||
|
||||
if (ctx->cmdclient != NULL)
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: cmd-send-keys.c,v 1.12 2008-06-10 20:28:42 nicm Exp $ */
|
||||
/* $Id: cmd-send-keys.c,v 1.13 2008-06-20 17:31:48 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -121,7 +121,7 @@ cmd_send_keys_exec(struct cmd *self, struct cmd_ctx *ctx)
|
||||
return;
|
||||
|
||||
for (i = 0; i < data->nkeys; i++)
|
||||
window_key(wl->window, data->keys[i]);
|
||||
window_key(wl->window, ctx->curclient, data->keys[i]);
|
||||
|
||||
if (ctx->cmdclient != NULL)
|
||||
server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: cmd-send-prefix.c,v 1.16 2008-06-19 22:04:02 nicm Exp $ */
|
||||
/* $Id: cmd-send-prefix.c,v 1.17 2008-06-20 17:31:48 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -49,7 +49,8 @@ cmd_send_prefix_exec(struct cmd *self, struct cmd_ctx *ctx)
|
||||
if ((wl = cmd_find_window(ctx, data->target, &s)) == NULL)
|
||||
return;
|
||||
|
||||
window_key(wl->window, options_get_key(&s->options, "prefix"));
|
||||
window_key(
|
||||
wl->window, ctx->curclient, options_get_key(&s->options, "prefix"));
|
||||
|
||||
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.51 2008-06-20 08:36:20 nicm Exp $ */
|
||||
/* $Id: cmd.c,v 1.52 2008-06-20 17:31:48 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -31,6 +31,7 @@ const struct cmd_entry *cmd_table[] = {
|
||||
&cmd_bind_key_entry,
|
||||
&cmd_command_prompt_entry,
|
||||
&cmd_copy_mode_entry,
|
||||
&cmd_delete_buffer_entry,
|
||||
&cmd_detach_client_entry,
|
||||
&cmd_has_session_entry,
|
||||
&cmd_kill_server_entry,
|
||||
@ -38,6 +39,7 @@ const struct cmd_entry *cmd_table[] = {
|
||||
&cmd_kill_window_entry,
|
||||
&cmd_last_window_entry,
|
||||
&cmd_link_window_entry,
|
||||
&cmd_list_buffers_entry,
|
||||
&cmd_list_clients_entry,
|
||||
&cmd_list_keys_entry,
|
||||
&cmd_list_sessions_entry,
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: key-bindings.c,v 1.33 2008-06-19 21:28:41 nicm Exp $ */
|
||||
/* $Id: key-bindings.c,v 1.34 2008-06-20 17:31:48 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -108,8 +108,9 @@ key_bindings_init(void)
|
||||
{ '=', &cmd_scroll_mode_entry },
|
||||
{ '[', &cmd_copy_mode_entry },
|
||||
{ ']', &cmd_paste_buffer_entry },
|
||||
{ '#', &cmd_list_buffers_entry },
|
||||
{ '-', &cmd_delete_buffer_entry },
|
||||
{ ':', &cmd_command_prompt_entry },
|
||||
{ ';', &cmd_command_prompt_entry },
|
||||
{ META, &cmd_send_prefix_entry },
|
||||
};
|
||||
u_int i;
|
||||
|
6
paste.c
6
paste.c
@ -1,4 +1,4 @@
|
||||
/* $Id: paste.c,v 1.1 2008-06-20 08:36:20 nicm Exp $ */
|
||||
/* $Id: paste.c,v 1.2 2008-06-20 17:31:48 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -105,7 +105,7 @@ paste_add(struct paste_stack *ps, const char *data)
|
||||
ARRAY_INSERT(ps, 0, pb);
|
||||
|
||||
pb->data = xstrdup(data);
|
||||
if (clock_gettime(CLOCK_REALTIME, &pb->created) != 0)
|
||||
if (clock_gettime(CLOCK_REALTIME, &pb->ts) != 0)
|
||||
fatal("clock_gettime");
|
||||
}
|
||||
|
||||
@ -121,7 +121,7 @@ paste_replace(struct paste_stack *ps, u_int idx, const char *data)
|
||||
xfree(pb->data);
|
||||
|
||||
pb->data = xstrdup(data);
|
||||
if (clock_gettime(CLOCK_REALTIME, &pb->created) != 0)
|
||||
if (clock_gettime(CLOCK_REALTIME, &pb->ts) != 0)
|
||||
fatal("clock_gettime");
|
||||
|
||||
return (0);
|
||||
|
4
server.c
4
server.c
@ -1,4 +1,4 @@
|
||||
/* $Id: server.c,v 1.73 2008-06-20 06:36:01 nicm Exp $ */
|
||||
/* $Id: server.c,v 1.74 2008-06-20 17:31:48 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -542,7 +542,7 @@ server_handle_client(struct client *c)
|
||||
} else if (key == prefix)
|
||||
c->flags |= CLIENT_PREFIX;
|
||||
else
|
||||
window_key(w, key);
|
||||
window_key(w, c, key);
|
||||
}
|
||||
}
|
||||
|
||||
|
5
tmux.c
5
tmux.c
@ -1,4 +1,4 @@
|
||||
/* $Id: tmux.c,v 1.64 2008-06-19 23:20:45 nicm Exp $ */
|
||||
/* $Id: tmux.c,v 1.65 2008-06-20 17:31:48 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -48,7 +48,6 @@ volatile sig_atomic_t sigterm;
|
||||
|
||||
char *cfg_file;
|
||||
struct options global_options;
|
||||
char *paste_buffer;
|
||||
|
||||
int debug_level;
|
||||
int be_quiet;
|
||||
@ -222,8 +221,6 @@ main(int argc, char **argv)
|
||||
options_set_number(&global_options, "status-interval", 15);
|
||||
options_set_number(&global_options, "set-titles", 1);
|
||||
|
||||
paste_buffer = NULL;
|
||||
|
||||
if (cfg_file == NULL) {
|
||||
home = getenv("HOME");
|
||||
if (home == NULL || *home == '\0') {
|
||||
|
12
tmux.h
12
tmux.h
@ -1,4 +1,4 @@
|
||||
/* $Id: tmux.h,v 1.157 2008-06-20 08:36:20 nicm Exp $ */
|
||||
/* $Id: tmux.h,v 1.158 2008-06-20 17:31:48 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -519,11 +519,12 @@ struct input_ctx {
|
||||
* Window mode. Windows can be in several modes and this is used to call the
|
||||
* right function to handle input and output.
|
||||
*/
|
||||
struct client;
|
||||
struct window_mode {
|
||||
struct screen *(*init)(struct window *);
|
||||
void (*free)(struct window *);
|
||||
void (*resize)(struct window *, u_int, u_int);
|
||||
void (*key)(struct window *, int);
|
||||
void (*key)(struct window *, struct client *, int);
|
||||
};
|
||||
|
||||
/* Window structure. */
|
||||
@ -593,7 +594,7 @@ struct options {
|
||||
/* Paste buffer. */
|
||||
struct paste_buffer {
|
||||
char *data;
|
||||
struct timespec created;
|
||||
struct timespec ts;
|
||||
};
|
||||
ARRAY_DECL(paste_stack, struct paste_buffer *);
|
||||
|
||||
@ -819,7 +820,6 @@ extern volatile sig_atomic_t sigwinch;
|
||||
extern volatile sig_atomic_t sigterm;
|
||||
extern struct options global_options;
|
||||
extern char *cfg_file;
|
||||
extern char *paste_buffer;
|
||||
extern int debug_level;
|
||||
extern int be_quiet;
|
||||
void logfile(const char *);
|
||||
@ -900,6 +900,7 @@ extern const struct cmd_entry cmd_attach_session_entry;
|
||||
extern const struct cmd_entry cmd_bind_key_entry;
|
||||
extern const struct cmd_entry cmd_command_prompt_entry;
|
||||
extern const struct cmd_entry cmd_copy_mode_entry;
|
||||
extern const struct cmd_entry cmd_delete_buffer_entry;
|
||||
extern const struct cmd_entry cmd_detach_client_entry;
|
||||
extern const struct cmd_entry cmd_has_session_entry;
|
||||
extern const struct cmd_entry cmd_kill_server_entry;
|
||||
@ -907,6 +908,7 @@ extern const struct cmd_entry cmd_kill_session_entry;
|
||||
extern const struct cmd_entry cmd_kill_window_entry;
|
||||
extern const struct cmd_entry cmd_last_window_entry;
|
||||
extern const struct cmd_entry cmd_link_window_entry;
|
||||
extern const struct cmd_entry cmd_list_buffers_entry;
|
||||
extern const struct cmd_entry cmd_list_clients_entry;
|
||||
extern const struct cmd_entry cmd_list_keys_entry;
|
||||
extern const struct cmd_entry cmd_list_sessions_entry;
|
||||
@ -1158,7 +1160,7 @@ int window_resize(struct window *, u_int, u_int);
|
||||
int window_set_mode(struct window *, const struct window_mode *);
|
||||
void window_reset_mode(struct window *);
|
||||
void window_parse(struct window *);
|
||||
void window_key(struct window *, int);
|
||||
void window_key(struct window *, struct client *, int);
|
||||
|
||||
/* window-copy.c */
|
||||
extern const struct window_mode window_copy_mode;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: window-copy.c,v 1.19 2008-06-19 19:40:35 nicm Exp $ */
|
||||
/* $Id: window-copy.c,v 1.20 2008-06-20 17:31:48 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -25,7 +25,7 @@
|
||||
struct screen *window_copy_init(struct window *);
|
||||
void window_copy_free(struct window *);
|
||||
void window_copy_resize(struct window *, u_int, u_int);
|
||||
void window_copy_key(struct window *, int);
|
||||
void window_copy_key(struct window *, struct client *, int);
|
||||
|
||||
void window_copy_redraw_lines(struct window *, u_int, u_int);
|
||||
void window_copy_redraw_screen(struct window *);
|
||||
@ -41,7 +41,7 @@ void window_copy_write_columns(
|
||||
void window_copy_update_cursor(struct window *);
|
||||
void window_copy_start_selection(struct window *);
|
||||
int window_copy_update_selection(struct window *);
|
||||
void window_copy_copy_selection(struct window *);
|
||||
void window_copy_copy_selection(struct window *, struct client *);
|
||||
void window_copy_copy_line(
|
||||
struct window *, char **, size_t *, size_t *, u_int, u_int, u_int);
|
||||
u_int window_copy_find_length(struct window *, u_int);
|
||||
@ -126,7 +126,7 @@ window_copy_resize(struct window *w, u_int sx, u_int sy)
|
||||
}
|
||||
|
||||
void
|
||||
window_copy_key(struct window *w, int key)
|
||||
window_copy_key(struct window *w, struct client *c, int key)
|
||||
{
|
||||
struct window_copy_mode_data *data = w->modedata;
|
||||
struct screen *s = &data->screen;
|
||||
@ -181,8 +181,10 @@ window_copy_key(struct window *w, int key)
|
||||
break;
|
||||
case '\027': /* C-w */
|
||||
case '\r': /* enter */
|
||||
window_copy_copy_selection(w);
|
||||
window_reset_mode(w);
|
||||
if (c != NULL && c->session != NULL) {
|
||||
window_copy_copy_selection(w, c);
|
||||
window_reset_mode(w);
|
||||
}
|
||||
break;
|
||||
case '0':
|
||||
case '\001': /* C-a */
|
||||
@ -354,7 +356,7 @@ window_copy_update_selection(struct window *w)
|
||||
}
|
||||
|
||||
void
|
||||
window_copy_copy_selection(struct window *w)
|
||||
window_copy_copy_selection(struct window *w, struct client *c)
|
||||
{
|
||||
struct window_copy_mode_data *data = w->modedata;
|
||||
struct screen *s = &data->screen;
|
||||
@ -412,9 +414,9 @@ window_copy_copy_selection(struct window *w)
|
||||
if (off != 0)
|
||||
buf[off - 1] = '\0';
|
||||
|
||||
if (paste_buffer != NULL)
|
||||
xfree(paste_buffer);
|
||||
paste_buffer = buf;
|
||||
/* Add the buffer to the stack. */
|
||||
paste_add(&c->session->buffers, buf);
|
||||
xfree(buf);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: window-more.c,v 1.12 2008-06-18 22:21:51 nicm Exp $ */
|
||||
/* $Id: window-more.c,v 1.13 2008-06-20 17:31:48 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -25,7 +25,7 @@
|
||||
struct screen *window_more_init(struct window *);
|
||||
void window_more_free(struct window *);
|
||||
void window_more_resize(struct window *, u_int, u_int);
|
||||
void window_more_key(struct window *, int);
|
||||
void window_more_key(struct window *, struct client *, int);
|
||||
|
||||
void window_more_redraw_screen(struct window *);
|
||||
void window_more_write_line(
|
||||
@ -123,7 +123,7 @@ window_more_resize(struct window *w, u_int sx, u_int sy)
|
||||
}
|
||||
|
||||
void
|
||||
window_more_key(struct window *w, int key)
|
||||
window_more_key(struct window *w, unused struct client *c, int key)
|
||||
{
|
||||
struct window_more_mode_data *data = w->modedata;
|
||||
struct screen *s = &data->screen;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $Id: window-scroll.c,v 1.18 2008-06-03 21:42:37 nicm Exp $ */
|
||||
/* $Id: window-scroll.c,v 1.19 2008-06-20 17:31:48 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -25,7 +25,7 @@
|
||||
struct screen *window_scroll_init(struct window *);
|
||||
void window_scroll_free(struct window *);
|
||||
void window_scroll_resize(struct window *, u_int, u_int);
|
||||
void window_scroll_key(struct window *, int);
|
||||
void window_scroll_key(struct window *, struct client *, int);
|
||||
|
||||
void window_scroll_redraw_screen(struct window *);
|
||||
void window_scroll_write_line(
|
||||
@ -97,7 +97,7 @@ window_scroll_resize(struct window *w, u_int sx, u_int sy)
|
||||
}
|
||||
|
||||
void
|
||||
window_scroll_key(struct window *w, int key)
|
||||
window_scroll_key(struct window *w, unused struct client *c, int key)
|
||||
{
|
||||
struct window_scroll_mode_data *data = w->modedata;
|
||||
struct screen *s = &data->screen;
|
||||
|
6
window.c
6
window.c
@ -1,4 +1,4 @@
|
||||
/* $Id: window.c,v 1.44 2008-06-18 22:21:51 nicm Exp $ */
|
||||
/* $Id: window.c,v 1.45 2008-06-20 17:31:48 nicm Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@ -323,10 +323,10 @@ window_parse(struct window *w)
|
||||
}
|
||||
|
||||
void
|
||||
window_key(struct window *w, int key)
|
||||
window_key(struct window *w, struct client *c, int key)
|
||||
{
|
||||
if (w->mode != NULL)
|
||||
w->mode->key(w, key);
|
||||
w->mode->key(w, c, key);
|
||||
else
|
||||
input_key(w, key);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user