aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES13
-rw-r--r--Makefile4
-rw-r--r--TODO10
-rw-r--r--cmd-delete-buffer.c63
-rw-r--r--cmd-list-buffers.c80
-rw-r--r--cmd-paste-buffer.c47
-rw-r--r--cmd-send-keys.c4
-rw-r--r--cmd-send-prefix.c5
-rw-r--r--cmd.c4
-rw-r--r--key-bindings.c5
-rw-r--r--paste.c6
-rw-r--r--server.c4
-rw-r--r--tmux.c5
-rw-r--r--tmux.h12
-rw-r--r--window-copy.c22
-rw-r--r--window-more.c6
-rw-r--r--window-scroll.c6
-rw-r--r--window.c6
18 files changed, 239 insertions, 63 deletions
diff --git a/CHANGES b/CHANGES
index 61caa3a4..ffd80f26 100644
--- a/CHANGES
+++ b/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 $
diff --git a/Makefile b/Makefile
index efa0ca0d..6dc03add 100644
--- a/Makefile
+++ b/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
diff --git a/TODO b/TODO
index 8138cf62..8609bae1 100644
--- a/TODO
+++ b/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
---
diff --git a/cmd-delete-buffer.c b/cmd-delete-buffer.c
new file mode 100644
index 00000000..286f9817
--- /dev/null
+++ b/cmd-delete-buffer.c
@@ -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);
+}
diff --git a/cmd-list-buffers.c b/cmd-list-buffers.c
new file mode 100644
index 00000000..0e5bb1b7
--- /dev/null
+++ b/cmd-list-buffers.c
@@ -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);
+}
diff --git a/cmd-paste-buffer.c b/cmd-paste-buffer.c
index 1ac4a11e..3485a6c8 100644
--- a/cmd-paste-buffer.c
+++ b/cmd-paste-buffer.c
@@ -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;
-
- if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL)
+ struct session *s;
+ struct paste_buffer *pb;
+
+ 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)
diff --git a/cmd-send-keys.c b/cmd-send-keys.c
index ea4d0e4e..3f6c2688 100644
--- a/cmd-send-keys.c
+++ b/cmd-send-keys.c
@@ -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);
diff --git a/cmd-send-prefix.c b/cmd-send-prefix.c
index 955dbc12..5751a44b 100644
--- a/cmd-send-prefix.c
+++ b/cmd-send-prefix.c
@@ -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);
diff --git a/cmd.c b/cmd.c
index 4755edaf..7bae8033 100644
--- a/cmd.c
+++ b/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,
diff --git a/key-bindings.c b/key-bindings.c
index f1f8d6fd..35b4ee3c 100644
--- a/key-bindings.c
+++ b/key-bindings.c
@@ -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;
diff --git a/paste.c b/paste.c
index 1dedd6be..0b50fe95 100644
--- a/paste.c
+++ b/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);
diff --git a/server.c b/server.c
index d7e218f8..2ac9e270 100644
--- a/server.c
+++ b/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);
}
}
diff --git a/tmux.c b/tmux.c
index e71afa8f..68c92675 100644
--- a/tmux.c
+++ b/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') {
diff --git a/tmux.h b/tmux.h
index 83587c5e..d61d1e60 100644
--- a/tmux.h
+++ b/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;
diff --git a/window-copy.c b/window-copy.c
index 2115f10f..39f3bb6e 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -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
diff --git a/window-more.c b/window-more.c
index d277883b..aac0341f 100644
--- a/window-more.c
+++ b/window-more.c
@@ -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;
diff --git a/window-scroll.c b/window-scroll.c
index 9602bb87..9590ef21 100644
--- a/window-scroll.c
+++ b/window-scroll.c
@@ -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;
diff --git a/window.c b/window.c
index 1fb63708..2e5d7134 100644
--- a/window.c
+++ b/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);
}