=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/key-bindings.c,v retrieving revision 1.60 retrieving revision 1.61 diff -c -r1.60 -r1.61 *** src/usr.bin/tmux/key-bindings.c 2016/10/12 13:03:27 1.60 --- src/usr.bin/tmux/key-bindings.c 2016/10/16 17:55:14 1.61 *************** *** 1,4 **** ! /* $OpenBSD: key-bindings.c,v 1.60 2016/10/12 13:03:27 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: key-bindings.c,v 1.61 2016/10/16 17:55:14 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 377,396 **** struct cmd_list *cmdlist; char *cause; int error; - struct cmd_q *cmdq; - cmdq = cmdq_new(NULL); for (i = 0; i < nitems(defaults); i++) { error = cmd_string_parse(defaults[i], &cmdlist, "", i, &cause); if (error != 0) fatalx("bad default key"); ! cmdq_run(cmdq, cmdlist, NULL); cmd_list_free(cmdlist); } - cmdq_free(cmdq); } void key_bindings_dispatch(struct key_binding *bd, struct client *c, struct mouse_event *m) --- 377,400 ---- struct cmd_list *cmdlist; char *cause; int error; for (i = 0; i < nitems(defaults); i++) { error = cmd_string_parse(defaults[i], &cmdlist, "", i, &cause); if (error != 0) fatalx("bad default key"); ! cmdq_append(NULL, cmdq_get_command(cmdlist, NULL, NULL, 0)); cmd_list_free(cmdlist); } } + static enum cmd_retval + key_bindings_read_only(struct cmd_q *cmdq, __unused void *data) + { + cmdq_error(cmdq, "client is read-only"); + return (CMD_RETURN_ERROR); + } + void key_bindings_dispatch(struct key_binding *bd, struct client *c, struct mouse_event *m) *************** *** 403,412 **** if (!(cmd->entry->flags & CMD_READONLY)) readonly = 0; } ! if (!readonly && (c->flags & CLIENT_READONLY)) { ! cmdq_error(c->cmdq, "client is read-only"); ! return; ! } ! ! cmdq_run(c->cmdq, bd->cmdlist, m); } --- 407,414 ---- if (!(cmd->entry->flags & CMD_READONLY)) readonly = 0; } ! if (!readonly && (c->flags & CLIENT_READONLY)) ! cmdq_append(c, cmdq_get_callback(key_bindings_read_only, NULL)); ! else ! cmdq_append(c, cmdq_get_command(bd->cmdlist, NULL, m, 0)); }