Sync OpenBSD patchset 192:

Next step towards customisable mode keys: build each default table of keys
into a named tree on start and use that for lookups. Also add command to string
translation tables and modify list-keys to show the mode key bindings (new
-t argument).
This commit is contained in:
Tiago Cunha 2009-07-28 23:11:18 +00:00
parent d9dcc5ed44
commit de7483a114
10 changed files with 321 additions and 58 deletions

View File

@ -1,4 +1,4 @@
/* $Id: cmd-list-keys.c,v 1.18 2009-07-28 22:12:16 tcunha Exp $ */ /* $Id: cmd-list-keys.c,v 1.19 2009-07-28 23:11:18 tcunha Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -28,25 +28,31 @@
int cmd_list_keys_exec(struct cmd *, struct cmd_ctx *); int cmd_list_keys_exec(struct cmd *, struct cmd_ctx *);
int cmd_list_keys_table(struct cmd *, struct cmd_ctx *);
const struct cmd_entry cmd_list_keys_entry = { const struct cmd_entry cmd_list_keys_entry = {
"list-keys", "lsk", "list-keys", "lsk",
"", "[-t key-table]",
0, 0, 0, 0,
NULL, cmd_target_init,
NULL, cmd_target_parse,
cmd_list_keys_exec, cmd_list_keys_exec,
NULL, cmd_target_free,
NULL cmd_target_print
}; };
int int
cmd_list_keys_exec(unused struct cmd *self, struct cmd_ctx *ctx) cmd_list_keys_exec(struct cmd *self, struct cmd_ctx *ctx)
{ {
struct cmd_target_data *data = self->data;
struct key_binding *bd; struct key_binding *bd;
const char *key; const char *key;
char tmp[BUFSIZ], keytmp[64]; char tmp[BUFSIZ], keytmp[64];
int width, keywidth; int width, keywidth;
if (data->target != NULL)
return (cmd_list_keys_table(self, ctx));
width = 0; width = 0;
SPLAY_FOREACH(bd, key_bindings, &key_bindings) { SPLAY_FOREACH(bd, key_bindings, &key_bindings) {
key = key_string_lookup_key(bd->key & ~KEYC_PREFIX); key = key_string_lookup_key(bd->key & ~KEYC_PREFIX);
@ -76,3 +82,48 @@ cmd_list_keys_exec(unused struct cmd *self, struct cmd_ctx *ctx)
return (0); return (0);
} }
int
cmd_list_keys_table(struct cmd *self, struct cmd_ctx *ctx)
{
struct cmd_target_data *data = self->data;
const struct mode_key_table *mtab;
struct mode_key_binding *mbind;
const char *key, *cmdstr, *mode;
int width, keywidth;
for (mtab = mode_key_tables; mtab->name != NULL; mtab++) {
if (strcasecmp(data->target, mtab->name) == 0)
break;
}
if (mtab->name == NULL) {
ctx->error(ctx, "unknown key table: %s", data->target);
return (-1);
}
width = 0;
SPLAY_FOREACH(mbind, mode_key_tree, mtab->tree) {
key = key_string_lookup_key(mbind->key);
if (key == NULL)
continue;
keywidth = strlen(key) + 1;
if (keywidth > width)
width = keywidth;
}
SPLAY_FOREACH(mbind, mode_key_tree, mtab->tree) {
key = key_string_lookup_key(mbind->key);
if (key == NULL)
continue;
mode = "";
if (mbind->mode != 0)
mode = "(command mode) ";
cmdstr = mode_key_tostring(mtab->cmdstr, mbind->cmd);
if (cmdstr != NULL)
ctx->print(ctx, "%*s: %s%s", width, key, mode, cmdstr);
}
return (0);
}

View File

@ -1,4 +1,4 @@
/* $Id: mode-key.c,v 1.20 2009-07-28 22:58:20 tcunha Exp $ */ /* $Id: mode-key.c,v 1.21 2009-07-28 23:11:18 tcunha Exp $ */
/* /*
* Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
@ -20,6 +20,71 @@
#include "tmux.h" #include "tmux.h"
/*
* Mode keys. These are the key bindings used when editing (status prompt), and
* in the modes. They are split into two sets of three tables, one set of three
* for vi and the other for emacs key bindings. The three tables are for
* editing, for menu-like modes (choice, more), and for copy modes (copy,
* scroll).
*
* The fixed tables of struct mode_key_entry below are the defaults: they are
* built into a tree of struct mode_key_binding by mode_key_init_trees, which
* can then be modified.
*
* vi command mode is handled by having a mode flag in the struct which allows
* two sets of bindings to be swapped between. A couple of editing commands
* (MODEKEYEDIT_SWITCHMODE and MODEKEYEDIT_SWITCHMODEAPPEND) are special-cased
* to do this.
*/
/* Edit keys command strings. */
struct mode_key_cmdstr mode_key_cmdstr_edit[] = {
{ MODEKEYEDIT_BACKSPACE, "backspace" },
{ MODEKEYEDIT_CANCEL, "cancel" },
{ MODEKEYEDIT_COMPLETE, "complete" },
{ MODEKEYEDIT_CURSORLEFT, "cursor-left" },
{ MODEKEYEDIT_CURSORRIGHT, "cursor-right" },
{ MODEKEYEDIT_DELETE, "delete" },
{ MODEKEYEDIT_DELETETOENDOFLINE, "delete-end-of-line" },
{ MODEKEYEDIT_ENDOFLINE, "end-of-line" },
{ MODEKEYEDIT_ENTER, "enter" },
{ MODEKEYEDIT_HISTORYDOWN, "history-down" },
{ MODEKEYEDIT_HISTORYUP, "history-up" },
{ MODEKEYEDIT_PASTE, "paste" },
{ MODEKEYEDIT_STARTOFLINE, "start-of-line" },
{ MODEKEYEDIT_SWITCHMODE, "switch-mode" },
{ MODEKEYEDIT_SWITCHMODEAPPEND, "switch-mode-append" },
};
/* Choice keys command strings. */
struct mode_key_cmdstr mode_key_cmdstr_choice[] = {
{ MODEKEYCHOICE_CANCEL, "cancel" },
{ MODEKEYCHOICE_CHOOSE, "choose" },
{ MODEKEYCHOICE_DOWN, "down" },
{ MODEKEYCHOICE_PAGEDOWN, "page-down" },
{ MODEKEYCHOICE_PAGEUP, "page-up" },
{ MODEKEYCHOICE_UP, "up" },
};
/* Copy keys command strings. */
struct mode_key_cmdstr mode_key_cmdstr_copy[] = {
{ MODEKEYCOPY_CANCEL, "cancel" },
{ MODEKEYCOPY_BACKTOINDENTATION, "back-to-indentation" },
{ MODEKEYCOPY_CLEARSELECTION, "clear-selection" },
{ MODEKEYCOPY_COPYSELECTION, "copy-selection" },
{ MODEKEYCOPY_DOWN, "cursor-down" },
{ MODEKEYCOPY_ENDOFLINE, "end-of-line" },
{ MODEKEYCOPY_LEFT, "cursor-left" },
{ MODEKEYCOPY_NEXTPAGE, "page-down" },
{ MODEKEYCOPY_NEXTWORD, "next-word" },
{ MODEKEYCOPY_PREVIOUSPAGE, "page-up" },
{ MODEKEYCOPY_PREVIOUSWORD, "previous-word" },
{ MODEKEYCOPY_RIGHT, "cursor-right" },
{ MODEKEYCOPY_STARTOFLINE, "start-of-line" },
{ MODEKEYCOPY_STARTSELECTION, "begin-selection" },
{ MODEKEYCOPY_UP, "cursor-up" },
};
/* vi editing keys. */ /* vi editing keys. */
const struct mode_key_entry mode_key_vi_edit[] = { const struct mode_key_entry mode_key_vi_edit[] = {
{ '\003' /* C-c */, 0, MODEKEYEDIT_CANCEL }, { '\003' /* C-c */, 0, MODEKEYEDIT_CANCEL },
@ -53,6 +118,7 @@ const struct mode_key_entry mode_key_vi_edit[] = {
{ 0, -1, 0 } { 0, -1, 0 }
}; };
struct mode_key_tree mode_key_tree_vi_edit;
/* vi choice selection keys. */ /* vi choice selection keys. */
const struct mode_key_entry mode_key_vi_choice[] = { const struct mode_key_entry mode_key_vi_choice[] = {
@ -68,6 +134,7 @@ const struct mode_key_entry mode_key_vi_choice[] = {
{ 0, -1, 0 } { 0, -1, 0 }
}; };
struct mode_key_tree mode_key_tree_vi_choice;
/* vi copy mode keys. */ /* vi copy mode keys. */
const struct mode_key_entry mode_key_vi_copy[] = { const struct mode_key_entry mode_key_vi_copy[] = {
@ -98,6 +165,7 @@ const struct mode_key_entry mode_key_vi_copy[] = {
{ 0, -1, 0 } { 0, -1, 0 }
}; };
struct mode_key_tree mode_key_tree_vi_copy;
/* emacs editing keys. */ /* emacs editing keys. */
const struct mode_key_entry mode_key_emacs_edit[] = { const struct mode_key_entry mode_key_emacs_edit[] = {
@ -123,6 +191,7 @@ const struct mode_key_entry mode_key_emacs_edit[] = {
{ 0, -1, 0 } { 0, -1, 0 }
}; };
struct mode_key_tree mode_key_tree_emacs_edit;
/* emacs choice selection keys. */ /* emacs choice selection keys. */
const struct mode_key_entry mode_key_emacs_choice[] = { const struct mode_key_entry mode_key_emacs_choice[] = {
@ -137,6 +206,7 @@ const struct mode_key_entry mode_key_emacs_choice[] = {
{ 0, -1, 0 } { 0, -1, 0 }
}; };
struct mode_key_tree mode_key_tree_emacs_choice;
/* emacs copy mode keys. */ /* emacs copy mode keys. */
const struct mode_key_entry mode_key_emacs_copy[] = { const struct mode_key_entry mode_key_emacs_copy[] = {
@ -168,34 +238,105 @@ const struct mode_key_entry mode_key_emacs_copy[] = {
{ 0, -1, 0 } { 0, -1, 0 }
}; };
struct mode_key_tree mode_key_tree_emacs_copy;
/* Table mapping key table names to default settings and trees. */
const struct mode_key_table mode_key_tables[] = {
{ "vi-edit", mode_key_cmdstr_edit,
&mode_key_tree_vi_edit, mode_key_vi_edit },
{ "vi-choice", mode_key_cmdstr_choice,
&mode_key_tree_vi_choice, mode_key_vi_choice },
{ "vi-copy", mode_key_cmdstr_copy,
&mode_key_tree_vi_copy, mode_key_vi_copy },
{ "emacs-edit", mode_key_cmdstr_edit,
&mode_key_tree_emacs_edit, mode_key_emacs_edit },
{ "emacs-choice", mode_key_cmdstr_choice,
&mode_key_tree_emacs_choice, mode_key_emacs_choice },
{ "emacs-copy", mode_key_cmdstr_copy,
&mode_key_tree_emacs_copy, mode_key_emacs_copy },
{ NULL, NULL, NULL, NULL }
};
SPLAY_GENERATE(mode_key_tree, mode_key_binding, entry, mode_key_cmp);
int
mode_key_cmp(struct mode_key_binding *mbind1, struct mode_key_binding *mbind2)
{
if (mbind1->mode != mbind2->mode)
return (mbind1->mode - mbind2->mode);
return (mbind1->key - mbind2->key);
}
const char *
mode_key_tostring(struct mode_key_cmdstr *cmdstr, enum mode_key_cmd cmd)
{
for (; cmdstr->name != NULL; cmdstr++) {
if (cmdstr->cmd == cmd)
return (cmdstr->name);
}
return (NULL);
}
void void
mode_key_init(struct mode_key_data *mdata, const struct mode_key_entry *table) mode_key_init_trees(void)
{ {
mdata->table = table; const struct mode_key_table *mtab;
const struct mode_key_entry *ment;
struct mode_key_binding *mbind;
for (mtab = mode_key_tables; mtab->name != NULL; mtab++) {
SPLAY_INIT(mtab->tree);
for (ment = mtab->table; ment->mode != -1; ment++) {
mbind = xmalloc(sizeof *mbind);
mbind->key = ment->key;
mbind->mode = ment->mode;
mbind->cmd = ment->cmd;
SPLAY_INSERT(mode_key_tree, mtab->tree, mbind);
}
}
}
void
mode_key_free_trees(void)
{
const struct mode_key_table *mtab;
struct mode_key_binding *mbind;
for (mtab = mode_key_tables; mtab->name != NULL; mtab++) {
while (!SPLAY_EMPTY(mtab->tree)) {
mbind = SPLAY_ROOT(mtab->tree);
SPLAY_REMOVE(mode_key_tree, mtab->tree, mbind);
}
}
}
void
mode_key_init(struct mode_key_data *mdata, struct mode_key_tree *mtree)
{
mdata->tree = mtree;
mdata->mode = 0; mdata->mode = 0;
} }
enum mode_key_cmd enum mode_key_cmd
mode_key_lookup(struct mode_key_data *mdata, int key) mode_key_lookup(struct mode_key_data *mdata, int key)
{ {
const struct mode_key_entry *ment; struct mode_key_binding *mbind, mtmp;
int mode;
mode = mdata->mode; mtmp.key = key;
for (ment = mdata->table; ment->mode != -1; ment++) { mtmp.mode = mdata->mode;
if (ment->mode == mode && key == ment->key) { if ((mbind = SPLAY_FIND(mode_key_tree, mdata->tree, &mtmp)) == NULL) {
switch (ment->cmd) { if (mdata->mode != 0)
return (MODEKEY_NONE);
return (MODEKEY_OTHER);
}
switch (mbind->cmd) {
case MODEKEYEDIT_SWITCHMODE: case MODEKEYEDIT_SWITCHMODE:
case MODEKEYEDIT_SWITCHMODEAPPEND: case MODEKEYEDIT_SWITCHMODEAPPEND:
mdata->mode = 1 - mdata->mode; mdata->mode = 1 - mdata->mode;
/* FALLTHROUGH */ /* FALLTHROUGH */
default: default:
return (ment->cmd); return (mbind->cmd);
} }
}
}
if (mode != 0)
return (MODEKEY_NONE);
return (MODEKEY_OTHER);
} }

View File

@ -1,4 +1,4 @@
/* $Id: server.c,v 1.163 2009-07-25 08:52:04 tcunha Exp $ */ /* $Id: server.c,v 1.164 2009-07-28 23:11:18 tcunha Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -161,6 +161,7 @@ server_start(char *path)
ARRAY_INIT(&windows); ARRAY_INIT(&windows);
ARRAY_INIT(&clients); ARRAY_INIT(&clients);
ARRAY_INIT(&sessions); ARRAY_INIT(&sessions);
mode_key_init_trees();
key_bindings_init(); key_bindings_init();
utf8_build(); utf8_build();
@ -384,6 +385,7 @@ server_main(int srv_fd)
} }
ARRAY_FREE(&clients); ARRAY_FREE(&clients);
mode_key_free_trees();
key_bindings_free(); key_bindings_free();
close(srv_fd); close(srv_fd);

View File

@ -1,4 +1,4 @@
/* $Id: status.c,v 1.105 2009-07-28 22:55:59 tcunha Exp $ */ /* $Id: status.c,v 1.106 2009-07-28 23:11:18 tcunha Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -609,9 +609,9 @@ status_prompt_set(struct client *c, const char *msg,
keys = options_get_number(&c->session->options, "status-keys"); keys = options_get_number(&c->session->options, "status-keys");
if (keys == MODEKEY_EMACS) if (keys == MODEKEY_EMACS)
mode_key_init(&c->prompt_mdata, mode_key_emacs_edit); mode_key_init(&c->prompt_mdata, &mode_key_tree_emacs_edit);
else else
mode_key_init(&c->prompt_mdata, mode_key_vi_edit); mode_key_init(&c->prompt_mdata, &mode_key_tree_vi_edit);
c->tty.flags |= (TTY_NOCURSOR|TTY_FREEZE); c->tty.flags |= (TTY_NOCURSOR|TTY_FREEZE);
c->flags |= CLIENT_STATUS; c->flags |= CLIENT_STATUS;

41
tmux.1
View File

@ -1,4 +1,4 @@
.\" $Id: tmux.1,v 1.133 2009-07-28 23:04:29 tcunha Exp $ .\" $Id: tmux.1,v 1.134 2009-07-28 23:11:18 tcunha Exp $
.\" .\"
.\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> .\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
.\" .\"
@ -331,10 +331,29 @@ The following keys are supported as appropriate for the mode:
.It Li "Cursor right" Ta "l" Ta "Right" .It Li "Cursor right" Ta "l" Ta "Right"
.It Li "Start selection" Ta "Space" Ta "C-Space" .It Li "Start selection" Ta "Space" Ta "C-Space"
.It Li "Cursor up" Ta "k" Ta "Up" .It Li "Cursor up" Ta "k" Ta "Up"
.It Li "Delete to end of line" Ta "D or C" Ta "C-k" .It Li "Delete to end of line" Ta "D" Ta "C-k"
.It Li "Paste buffer" Ta "p" Ta "C-y" .It Li "Paste buffer" Ta "p" Ta "C-y"
.El .El
.Pp .Pp
These key bindings are defined in a set of named tables:
.Em vi-edit
and
.Em emacs-edit
for keys used when line editing at the command prompt;
.Em vi-choice
and
.Em emacs-choice
for keys used when choosing from lists (such as produced by the
.Ic window-choose
command) or in output mode; and
.Em vi-copy
and
.Em emacs-copy
used in copy and scroll modes.
The tables may be viewed with the
.Ic list-keys
command.
.Pp
The paste buffer key pastes the first line from the top paste buffer on the The paste buffer key pastes the first line from the top paste buffer on the
stack. stack.
.Sh BUFFERS .Sh BUFFERS
@ -847,13 +866,31 @@ List all clients attached to the server.
List the syntax of all commands supported by List the syntax of all commands supported by
.Nm . .Nm .
.It Xo Ic list-keys .It Xo Ic list-keys
.Op Ar Fl t Ar key-table
.Xc .Xc
.D1 (alias: Ic lsk ) .D1 (alias: Ic lsk )
List all key bindings. List all key bindings.
Without
.Fl t
the primary key bindings - those executed when preceded by the prefix key -
are printed.
Keys bound without the prefix key (see Keys bound without the prefix key (see
.Ic bind-key .Ic bind-key
.Fl n ) .Fl n )
are enclosed in square brackets. are enclosed in square brackets.
.Pp
With
.Fl t ,
the key bindings in
.Ar key-table
are listed; this may be one of:
.Em vi-edit ,
.Em emacs-edit ,
.Em vi-choice ,
.Em emacs-choice ,
.Em vi-copy
or
.Em emacs-copy .
.It Xo Ic list-sessions .It Xo Ic list-sessions
.Xc .Xc
.D1 (alias: Ic ls ) .D1 (alias: Ic ls )

56
tmux.h
View File

@ -1,4 +1,4 @@
/* $Id: tmux.h,v 1.396 2009-07-28 23:04:29 tcunha Exp $ */ /* $Id: tmux.h,v 1.397 2009-07-28 23:11:18 tcunha Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -355,7 +355,7 @@ struct msg_unlock_data {
char pass[PASS_MAX]; char pass[PASS_MAX];
}; };
/* Editing keys. */ /* Mode key commands. */
enum mode_key_cmd { enum mode_key_cmd {
MODEKEY_NONE, MODEKEY_NONE,
MODEKEY_OTHER, MODEKEY_OTHER,
@ -403,6 +403,7 @@ enum mode_key_cmd {
MODEKEYCOPY_UP, MODEKEYCOPY_UP,
}; };
/* Entry in the default mode key tables. */
struct mode_key_entry { struct mode_key_entry {
int key; int key;
@ -413,16 +414,42 @@ struct mode_key_entry {
* keys to be bound in edit mode. * keys to be bound in edit mode.
*/ */
int mode; int mode;
enum mode_key_cmd cmd; enum mode_key_cmd cmd;
}; };
/* Data required while mode keys are in use. */
struct mode_key_data { struct mode_key_data {
const struct mode_key_entry *table; struct mode_key_tree *tree;
int mode; int mode;
}; };
#define MODEKEY_EMACS 0 #define MODEKEY_EMACS 0
#define MODEKEY_VI 1 #define MODEKEY_VI 1
/* Binding between a key and a command. */
struct mode_key_binding {
int key;
int mode;
enum mode_key_cmd cmd;
SPLAY_ENTRY(mode_key_binding) entry;
};
SPLAY_HEAD(mode_key_tree, mode_key_binding);
/* Command to string mapping. */
struct mode_key_cmdstr {
enum mode_key_cmd cmd;
const char *name;
};
/* Named mode key table description. */
struct mode_key_table {
const char *name;
struct mode_key_cmdstr *cmdstr;
struct mode_key_tree *tree;
const struct mode_key_entry *table; /* default entries */
};
/* Modes. */ /* Modes. */
#define MODE_CURSOR 0x1 #define MODE_CURSOR 0x1
#define MODE_INSERT 0x2 #define MODE_INSERT 0x2
@ -1060,14 +1087,19 @@ void sighandler(int);
int load_cfg(const char *, char **x); int load_cfg(const char *, char **x);
/* mode-key.c */ /* mode-key.c */
extern const struct mode_key_entry mode_key_vi_edit[]; extern const struct mode_key_table mode_key_tables[];
extern const struct mode_key_entry mode_key_vi_choice[]; extern struct mode_key_tree mode_key_tree_vi_edit;
extern const struct mode_key_entry mode_key_vi_copy[]; extern struct mode_key_tree mode_key_tree_vi_choice;
extern const struct mode_key_entry mode_key_emacs_edit[]; extern struct mode_key_tree mode_key_tree_vi_copy;
extern const struct mode_key_entry mode_key_emacs_choice[]; extern struct mode_key_tree mode_key_tree_emacs_edit;
extern const struct mode_key_entry mode_key_emacs_copy[]; extern struct mode_key_tree mode_key_tree_emacs_choice;
void mode_key_init( extern struct mode_key_tree mode_key_tree_emacs_copy;
struct mode_key_data *, const struct mode_key_entry *); int mode_key_cmp(struct mode_key_binding *, struct mode_key_binding *);
SPLAY_PROTOTYPE(mode_key_tree, mode_key_binding, entry, mode_key_cmp);
const char *mode_key_tostring(struct mode_key_cmdstr *r, enum mode_key_cmd);
void mode_key_init_trees(void);
void mode_key_free_trees(void);
void mode_key_init(struct mode_key_data *, struct mode_key_tree *);
enum mode_key_cmd mode_key_lookup(struct mode_key_data *, int); enum mode_key_cmd mode_key_lookup(struct mode_key_data *, int);
/* options.c */ /* options.c */

View File

@ -1,4 +1,4 @@
/* $Id: window-choose.c,v 1.19 2009-07-28 22:55:59 tcunha Exp $ */ /* $Id: window-choose.c,v 1.20 2009-07-28 23:11:18 tcunha Exp $ */
/* /*
* Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
@ -127,9 +127,9 @@ window_choose_init(struct window_pane *wp)
keys = options_get_number(&wp->window->options, "mode-keys"); keys = options_get_number(&wp->window->options, "mode-keys");
if (keys == MODEKEY_EMACS) if (keys == MODEKEY_EMACS)
mode_key_init(&data->mdata, mode_key_emacs_choice); mode_key_init(&data->mdata, &mode_key_tree_emacs_choice);
else else
mode_key_init(&data->mdata, mode_key_vi_choice); mode_key_init(&data->mdata, &mode_key_tree_vi_choice);
return (s); return (s);
} }

View File

@ -1,4 +1,4 @@
/* $Id: window-copy.c,v 1.70 2009-07-28 22:58:20 tcunha Exp $ */ /* $Id: window-copy.c,v 1.71 2009-07-28 23:11:18 tcunha Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -108,9 +108,9 @@ window_copy_init(struct window_pane *wp)
keys = options_get_number(&wp->window->options, "mode-keys"); keys = options_get_number(&wp->window->options, "mode-keys");
if (keys == MODEKEY_EMACS) if (keys == MODEKEY_EMACS)
mode_key_init(&data->mdata, mode_key_emacs_copy); mode_key_init(&data->mdata, &mode_key_tree_emacs_copy);
else else
mode_key_init(&data->mdata, mode_key_vi_copy); mode_key_init(&data->mdata, &mode_key_tree_vi_copy);
s->cx = data->cx; s->cx = data->cx;
s->cy = data->cy; s->cy = data->cy;

View File

@ -1,4 +1,4 @@
/* $Id: window-more.c,v 1.34 2009-07-28 22:55:59 tcunha Exp $ */ /* $Id: window-more.c,v 1.35 2009-07-28 23:11:18 tcunha Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -92,9 +92,9 @@ window_more_init(struct window_pane *wp)
keys = options_get_number(&wp->window->options, "mode-keys"); keys = options_get_number(&wp->window->options, "mode-keys");
if (keys == MODEKEY_EMACS) if (keys == MODEKEY_EMACS)
mode_key_init(&data->mdata, mode_key_emacs_choice); mode_key_init(&data->mdata, &mode_key_tree_emacs_choice);
else else
mode_key_init(&data->mdata, mode_key_vi_choice); mode_key_init(&data->mdata, &mode_key_tree_vi_choice);
return (s); return (s);
} }

View File

@ -1,4 +1,4 @@
/* $Id: window-scroll.c,v 1.36 2009-07-28 22:58:20 tcunha Exp $ */ /* $Id: window-scroll.c,v 1.37 2009-07-28 23:11:18 tcunha Exp $ */
/* /*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@ -75,9 +75,9 @@ window_scroll_init(struct window_pane *wp)
keys = options_get_number(&wp->window->options, "mode-keys"); keys = options_get_number(&wp->window->options, "mode-keys");
if (keys == MODEKEY_EMACS) if (keys == MODEKEY_EMACS)
mode_key_init(&data->mdata, mode_key_emacs_copy); mode_key_init(&data->mdata, &mode_key_tree_emacs_copy);
else else
mode_key_init(&data->mdata, mode_key_vi_copy); mode_key_init(&data->mdata, &mode_key_tree_vi_copy);
screen_write_start(&ctx, NULL, s); screen_write_start(&ctx, NULL, s);
for (i = 0; i < screen_size_y(s); i++) for (i = 0; i < screen_size_y(s); i++)