summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2010-05-23 19:42:19 +0000
committerNicholas Marriott <nicm@openbsd.org>2010-05-23 19:42:19 +0000
commit4f5c5b37b866967be189901bc140ca6b8c25c5e3 (patch)
treeea5b685be2f69f30fc18872caefc0024e2574c7a
parent0ed727a0128dd84ae727a337208a31df8f3cff02 (diff)
Pass in the session, rather than the client, to window modes' key()
function. We were only ever using the client to find the session anyway. This allows send-key to work properly for manipulating copy mode from outside tmux. From Micah Cowan.
-rw-r--r--cmd-send-keys.c5
-rw-r--r--cmd-send-prefix.c2
-rw-r--r--server-client.c8
-rw-r--r--tmux.h10
-rw-r--r--window-choose.c8
-rw-r--r--window-clock.c4
-rw-r--r--window-copy.c22
-rw-r--r--window.c8
8 files changed, 33 insertions, 34 deletions
diff --git a/cmd-send-keys.c b/cmd-send-keys.c
index 204d497d..3c680524 100644
--- a/cmd-send-keys.c
+++ b/cmd-send-keys.c
@@ -105,16 +105,17 @@ cmd_send_keys_exec(struct cmd *self, struct cmd_ctx *ctx)
{
struct cmd_send_keys_data *data = self->data;
struct window_pane *wp;
+ struct session *s;
u_int i;
if (data == NULL)
return (-1);
- if (cmd_find_pane(ctx, data->target, NULL, &wp) == NULL)
+ if (cmd_find_pane(ctx, data->target, &s, &wp) == NULL)
return (-1);
for (i = 0; i < data->nkeys; i++)
- window_pane_key(wp, ctx->curclient, data->keys[i]);
+ window_pane_key(wp, s, data->keys[i]);
return (0);
}
diff --git a/cmd-send-prefix.c b/cmd-send-prefix.c
index ccc98151..c7f7e9fa 100644
--- a/cmd-send-prefix.c
+++ b/cmd-send-prefix.c
@@ -49,7 +49,7 @@ cmd_send_prefix_exec(struct cmd *self, struct cmd_ctx *ctx)
return (-1);
keylist = options_get_data(&s->options, "prefix");
- window_pane_key(wp, ctx->curclient, ARRAY_FIRST(keylist));
+ window_pane_key(wp, s, ARRAY_FIRST(keylist));
return (0);
}
diff --git a/server-client.c b/server-client.c
index 03d5c84b..9d550386 100644
--- a/server-client.c
+++ b/server-client.c
@@ -300,7 +300,7 @@ server_client_handle_key(int key, struct mouse_event *mouse, void *data)
server_redraw_window_borders(w);
wp = w->active;
}
- window_pane_mouse(wp, c, mouse);
+ window_pane_mouse(wp, c->session, mouse);
return;
}
@@ -322,7 +322,7 @@ server_client_handle_key(int key, struct mouse_event *mouse, void *data)
/* Try as a non-prefix key binding. */
if ((bd = key_bindings_lookup(key)) == NULL) {
if (!(c->flags & CLIENT_READONLY))
- window_pane_key(wp, c, key);
+ window_pane_key(wp, c->session, key);
} else
key_bindings_dispatch(bd, c);
}
@@ -338,7 +338,7 @@ server_client_handle_key(int key, struct mouse_event *mouse, void *data)
if (isprefix)
c->flags |= CLIENT_PREFIX;
else if (!(c->flags & CLIENT_READONLY))
- window_pane_key(wp, c, key);
+ window_pane_key(wp, c->session, key);
}
return;
}
@@ -349,7 +349,7 @@ server_client_handle_key(int key, struct mouse_event *mouse, void *data)
if (isprefix)
c->flags |= CLIENT_PREFIX;
else if (!(c->flags & CLIENT_READONLY))
- window_pane_key(wp, c, key);
+ window_pane_key(wp, c->session, key);
return;
}
diff --git a/tmux.h b/tmux.h
index d07a6517..ce9c2677 100644
--- a/tmux.h
+++ b/tmux.h
@@ -760,16 +760,16 @@ 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 session;
struct window;
struct mouse_event;
struct window_mode {
struct screen *(*init)(struct window_pane *);
void (*free)(struct window_pane *);
void (*resize)(struct window_pane *, u_int, u_int);
- void (*key)(struct window_pane *, struct client *, int);
+ void (*key)(struct window_pane *, struct session *, int);
void (*mouse)(struct window_pane *,
- struct client *, struct mouse_event *);
+ struct session *, struct mouse_event *);
void (*timer)(struct window_pane *);
};
@@ -1828,9 +1828,9 @@ void window_pane_alternate_off(
int window_pane_set_mode(
struct window_pane *, const struct window_mode *);
void window_pane_reset_mode(struct window_pane *);
-void window_pane_key(struct window_pane *, struct client *, int);
+void window_pane_key(struct window_pane *, struct session *, int);
void window_pane_mouse(struct window_pane *,
- struct client *, struct mouse_event *);
+ struct session *, struct mouse_event *);
int window_pane_visible(struct window_pane *);
char *window_pane_search(
struct window_pane *, const char *, u_int *);
diff --git a/window-choose.c b/window-choose.c
index 87f08f33..a50d7e30 100644
--- a/window-choose.c
+++ b/window-choose.c
@@ -25,9 +25,9 @@
struct screen *window_choose_init(struct window_pane *);
void window_choose_free(struct window_pane *);
void window_choose_resize(struct window_pane *, u_int, u_int);
-void window_choose_key(struct window_pane *, struct client *, int);
+void window_choose_key(struct window_pane *, struct session *, int);
void window_choose_mouse(
- struct window_pane *, struct client *, struct mouse_event *);
+ struct window_pane *, struct session *, struct mouse_event *);
void window_choose_redraw_screen(struct window_pane *);
void window_choose_write_line(
@@ -171,7 +171,7 @@ window_choose_resize(struct window_pane *wp, u_int sx, u_int sy)
/* ARGSUSED */
void
-window_choose_key(struct window_pane *wp, unused struct client *c, int key)
+window_choose_key(struct window_pane *wp, unused struct session *sess, int key)
{
struct window_choose_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
@@ -304,7 +304,7 @@ window_choose_key(struct window_pane *wp, unused struct client *c, int key)
/* ARGSUSED */
void
window_choose_mouse(
- struct window_pane *wp, unused struct client *c, struct mouse_event *m)
+ struct window_pane *wp, unused struct session *sess, struct mouse_event *m)
{
struct window_choose_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
diff --git a/window-clock.c b/window-clock.c
index bc9cf81d..64980df0 100644
--- a/window-clock.c
+++ b/window-clock.c
@@ -26,7 +26,7 @@
struct screen *window_clock_init(struct window_pane *);
void window_clock_free(struct window_pane *);
void window_clock_resize(struct window_pane *, u_int, u_int);
-void window_clock_key(struct window_pane *, struct client *, int);
+void window_clock_key(struct window_pane *, struct session *, int);
void window_clock_timer(struct window_pane *);
void window_clock_draw_screen(struct window_pane *);
@@ -85,7 +85,7 @@ window_clock_resize(struct window_pane *wp, u_int sx, u_int sy)
/* ARGSUSED */
void
window_clock_key(
- struct window_pane *wp, unused struct client *c, unused int key)
+ struct window_pane *wp, unused struct session *sess, unused int key)
{
window_pane_reset_mode(wp);
}
diff --git a/window-copy.c b/window-copy.c
index 5e04f34e..3b42c456 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -26,11 +26,11 @@
struct screen *window_copy_init(struct window_pane *);
void window_copy_free(struct window_pane *);
void window_copy_resize(struct window_pane *, u_int, u_int);
-void window_copy_key(struct window_pane *, struct client *, int);
+void window_copy_key(struct window_pane *, struct session *, int);
int window_copy_key_input(struct window_pane *, int);
int window_copy_key_numeric_prefix(struct window_pane *, int);
void window_copy_mouse(
- struct window_pane *, struct client *, struct mouse_event *);
+ struct window_pane *, struct session *, struct mouse_event *);
void window_copy_redraw_lines(struct window_pane *, u_int, u_int);
void window_copy_redraw_screen(struct window_pane *);
@@ -52,7 +52,7 @@ void window_copy_goto_line(struct window_pane *, const char *);
void window_copy_update_cursor(struct window_pane *, u_int, u_int);
void window_copy_start_selection(struct window_pane *);
int window_copy_update_selection(struct window_pane *);
-void window_copy_copy_selection(struct window_pane *, struct client *);
+void window_copy_copy_selection(struct window_pane *, struct session *);
void window_copy_clear_selection(struct window_pane *);
void window_copy_copy_line(
struct window_pane *, char **, size_t *, u_int, u_int, u_int);
@@ -340,8 +340,6 @@ window_copy_resize(struct window_pane *wp, u_int sx, u_int sy)
data->cy = sy - 1;
if (data->cx > sx)
data->cx = sx;
- if (data->oy > screen_hsize(data->backing))
- data->oy = screen_hsize(data->backing);
window_copy_clear_selection(wp);
@@ -353,7 +351,7 @@ window_copy_resize(struct window_pane *wp, u_int sx, u_int sy)
}
void
-window_copy_key(struct window_pane *wp, struct client *c, int key)
+window_copy_key(struct window_pane *wp, struct session *sess, int key)
{
const char *word_separators;
struct window_copy_mode_data *data = wp->modedata;
@@ -503,8 +501,8 @@ window_copy_key(struct window_pane *wp, struct client *c, int key)
window_copy_redraw_screen(wp);
break;
case MODEKEYCOPY_COPYSELECTION:
- if (c != NULL && c->session != NULL) {
- window_copy_copy_selection(wp, c);
+ if (sess != NULL) {
+ window_copy_copy_selection(wp, sess);
window_pane_reset_mode(wp);
return;
}
@@ -758,7 +756,7 @@ window_copy_key_numeric_prefix(struct window_pane *wp, int key)
/* ARGSUSED */
void
window_copy_mouse(
- struct window_pane *wp, unused struct client *c, struct mouse_event *m)
+ struct window_pane *wp, unused struct session *sess, struct mouse_event *m)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
@@ -1169,7 +1167,7 @@ window_copy_update_selection(struct window_pane *wp)
}
void
-window_copy_copy_selection(struct window_pane *wp, struct client *c)
+window_copy_copy_selection(struct window_pane *wp, struct session *sess)
{
struct window_copy_mode_data *data = wp->modedata;
struct screen *s = &data->screen;
@@ -1264,8 +1262,8 @@ window_copy_copy_selection(struct window_pane *wp, struct client *c)
off--; /* remove final \n */
/* Add the buffer to the stack. */
- limit = options_get_number(&c->session->options, "buffer-limit");
- paste_add(&c->session->buffers, buf, off, limit);
+ limit = options_get_number(&sess->options, "buffer-limit");
+ paste_add(&sess->buffers, buf, off, limit);
}
void
diff --git a/window.c b/window.c
index 0811a4cb..36ad4adb 100644
--- a/window.c
+++ b/window.c
@@ -721,7 +721,7 @@ window_pane_reset_mode(struct window_pane *wp)
}
void
-window_pane_key(struct window_pane *wp, struct client *c, int key)
+window_pane_key(struct window_pane *wp, struct session *sess, int key)
{
struct window_pane *wp2;
@@ -730,7 +730,7 @@ window_pane_key(struct window_pane *wp, struct client *c, int key)
if (wp->mode != NULL) {
if (wp->mode->key != NULL)
- wp->mode->key(wp, c, key);
+ wp->mode->key(wp, sess, key);
return;
}
@@ -749,7 +749,7 @@ window_pane_key(struct window_pane *wp, struct client *c, int key)
void
window_pane_mouse(
- struct window_pane *wp, struct client *c, struct mouse_event *m)
+ struct window_pane *wp, struct session *sess, struct mouse_event *m)
{
if (!window_pane_visible(wp))
return;
@@ -763,7 +763,7 @@ window_pane_mouse(
if (wp->mode != NULL) {
if (wp->mode->mouse != NULL)
- wp->mode->mouse(wp, c, m);
+ wp->mode->mouse(wp, sess, m);
} else if (wp->fd != -1)
input_mouse(wp, m);
}