=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/key-bindings.c,v retrieving revision 1.37 retrieving revision 1.38 diff -c -r1.37 -r1.38 *** src/usr.bin/tmux/key-bindings.c 2013/03/22 15:54:29 1.37 --- src/usr.bin/tmux/key-bindings.c 2013/03/24 09:54:10 1.38 *************** *** 1,4 **** ! /* $OpenBSD: key-bindings.c,v 1.37 2013/03/22 15:54:29 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: key-bindings.c,v 1.38 2013/03/24 09:54:10 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 182,192 **** RB_INIT(&key_bindings); for (i = 0; i < nitems(table); i++) { ! cmdlist = xmalloc(sizeof *cmdlist); ! TAILQ_INIT(&cmdlist->list); cmdlist->references = 1; ! cmd = xmalloc(sizeof *cmd); cmd->entry = table[i].entry; if (cmd->entry->key_binding != NULL) cmd->entry->key_binding(cmd, table[i].key); --- 182,192 ---- RB_INIT(&key_bindings); for (i = 0; i < nitems(table); i++) { ! cmdlist = xcalloc(1, sizeof *cmdlist); cmdlist->references = 1; + TAILQ_INIT(&cmdlist->list); ! cmd = xcalloc(1, sizeof *cmd); cmd->entry = table[i].entry; if (cmd->entry->key_binding != NULL) cmd->entry->key_binding(cmd, table[i].key); *************** *** 199,286 **** } } - void printflike2 - key_bindings_error(struct cmd_ctx *ctx, const char *fmt, ...) - { - va_list ap; - char *msg; - - if (ctx->curclient->session == NULL) - return; - - va_start(ap, fmt); - xvasprintf(&msg, fmt, ap); - va_end(ap); - - *msg = toupper((u_char) *msg); - status_message_set(ctx->curclient, "%s", msg); - free(msg); - } - - void printflike2 - key_bindings_print(struct cmd_ctx *ctx, const char *fmt, ...) - { - struct winlink *wl; - va_list ap; - - if (ctx->curclient->session == NULL) - return; - - wl = ctx->curclient->session->curw; - if (wl->window->active->mode != &window_copy_mode) { - window_pane_reset_mode(wl->window->active); - window_pane_set_mode(wl->window->active, &window_copy_mode); - window_copy_init_for_output(wl->window->active); - } - - va_start(ap, fmt); - window_copy_vadd(wl->window->active, fmt, ap); - va_end(ap); - } - - void printflike2 - key_bindings_info(struct cmd_ctx *ctx, const char *fmt, ...) - { - va_list ap; - char *msg; - - if (ctx->curclient->session == NULL) - return; - - if (options_get_number(&global_options, "quiet")) - return; - - va_start(ap, fmt); - xvasprintf(&msg, fmt, ap); - va_end(ap); - - *msg = toupper((u_char) *msg); - status_message_set(ctx->curclient, "%s", msg); - free(msg); - } - void key_bindings_dispatch(struct key_binding *bd, struct client *c) { - struct cmd_ctx *ctx; struct cmd *cmd; int readonly; - ctx = cmd_get_ctx(NULL, c); - ctx->error = key_bindings_error; - ctx->print = key_bindings_print; - ctx->info = key_bindings_info; - readonly = 1; TAILQ_FOREACH(cmd, &bd->cmdlist->list, qentry) { if (!(cmd->entry->flags & CMD_READONLY)) readonly = 0; } ! if (!readonly && c->flags & CLIENT_READONLY) { ! key_bindings_info(ctx, "client is read-only"); return; } ! cmd_list_exec(bd->cmdlist, ctx); ! cmd_free_ctx(ctx); } --- 199,219 ---- } } void key_bindings_dispatch(struct key_binding *bd, struct client *c) { struct cmd *cmd; int readonly; readonly = 1; TAILQ_FOREACH(cmd, &bd->cmdlist->list, qentry) { if (!(cmd->entry->flags & CMD_READONLY)) readonly = 0; } ! if (!readonly && (c->flags & CLIENT_READONLY)) { ! cmdq_info(c->cmdq, "client is read-only"); return; } ! cmdq_run(c->cmdq, bd->cmdlist); }