summaryrefslogtreecommitdiff
path: root/usr.bin/tmux/server-client.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2010-02-06 22:55:32 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2010-02-06 22:55:32 +0000
commit892e10e5c056cf061b989c70bb4b030d0bfa8377 (patch)
tree21b583a7d02d6b87e586702ed583d0e615b565b9 /usr.bin/tmux/server-client.c
parent4859720892d211ccf40bae2f88188ca870a71b7f (diff)
Support attaching a client read-only with a new -r flag to the attach-session
command.
Diffstat (limited to 'usr.bin/tmux/server-client.c')
-rw-r--r--usr.bin/tmux/server-client.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/usr.bin/tmux/server-client.c b/usr.bin/tmux/server-client.c
index 331e4137211..45533c72ec1 100644
--- a/usr.bin/tmux/server-client.c
+++ b/usr.bin/tmux/server-client.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: server-client.c,v 1.29 2010/02/06 18:47:41 nicm Exp $ */
+/* $OpenBSD: server-client.c,v 1.30 2010/02/06 22:55:31 nicm Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -271,6 +271,8 @@ server_client_handle_key(int key, struct mouse_event *mouse, void *data)
/* Special case: number keys jump to pane in identify mode. */
if (c->flags & CLIENT_IDENTIFY && key >= '0' && key <= '9') {
+ if (c->flags & CLIENT_READONLY)
+ return;
wp = window_pane_at_index(w, key - '0');
if (wp != NULL && window_pane_visible(wp))
window_set_active_pane(w, wp);
@@ -279,15 +281,20 @@ server_client_handle_key(int key, struct mouse_event *mouse, void *data)
}
/* Handle status line. */
- status_message_clear(c);
- server_clear_identify(c);
+ if (!(c->flags & CLIENT_READONLY)) {
+ status_message_clear(c);
+ server_clear_identify(c);
+ }
if (c->prompt_string != NULL) {
- status_prompt_key(c, key);
+ if (!(c->flags & CLIENT_READONLY))
+ status_prompt_key(c, key);
return;
}
/* Check for mouse keys. */
if (key == KEYC_MOUSE) {
+ if (c->flags & CLIENT_READONLY)
+ return;
if (options_get_number(oo, "mouse-select-pane")) {
window_set_active_at(w, mouse->x, mouse->y);
server_redraw_window_borders(w);
@@ -313,9 +320,10 @@ server_client_handle_key(int key, struct mouse_event *mouse, void *data)
c->flags |= CLIENT_PREFIX;
else {
/* Try as a non-prefix key binding. */
- if ((bd = key_bindings_lookup(key)) == NULL)
- window_pane_key(wp, c, key);
- else
+ if ((bd = key_bindings_lookup(key)) == NULL) {
+ if (!(c->flags & CLIENT_READONLY))
+ window_pane_key(wp, c, key);
+ } else
key_bindings_dispatch(bd, c);
}
return;
@@ -329,7 +337,7 @@ server_client_handle_key(int key, struct mouse_event *mouse, void *data)
c->flags &= ~CLIENT_REPEAT;
if (isprefix)
c->flags |= CLIENT_PREFIX;
- else
+ else if (!(c->flags & CLIENT_READONLY))
window_pane_key(wp, c, key);
}
return;
@@ -340,7 +348,7 @@ server_client_handle_key(int key, struct mouse_event *mouse, void *data)
c->flags &= ~CLIENT_REPEAT;
if (isprefix)
c->flags |= CLIENT_PREFIX;
- else
+ else if (!(c->flags & CLIENT_READONLY))
window_pane_key(wp, c, key);
return;
}
@@ -660,7 +668,6 @@ server_client_msg_command(struct client *c, struct msg_command_data *data)
{
struct cmd_ctx ctx;
struct cmd_list *cmdlist = NULL;
- struct cmd *cmd;
int argc;
char **argv, *cause;