Add support for multi-hotkeys in editor (like a ctrl-x,t).

Signed-off-by: Ilia Maslakov <il.smind@gmail.com>
This commit is contained in:
Ilia Maslakov 2009-10-23 17:58:01 +00:00 committed by Andrew Borodin
parent e5feeea8d9
commit 82b7c4fdee
7 changed files with 36 additions and 15 deletions

View File

@ -127,6 +127,7 @@ struct WEdit {
/* user map stuff */
GIConv converter;
const global_keymap_t *user_map;
const global_keymap_t *user_x_map;
/* line break */
LineBreaks lb;

View File

@ -726,6 +726,9 @@ edit_set_keymap (WEdit *edit)
edit->user_map = default_editor_keymap;
if (editor_keymap && editor_keymap->len > 0)
edit->user_map = (global_keymap_t *) editor_keymap->data;
edit->user_x_map = default_editor_x_keymap;
if (editor_x_keymap && editor_x_keymap->len > 0)
edit->user_x_map = (global_keymap_t *) editor_x_keymap->data;
}

View File

@ -63,11 +63,10 @@ edit_translate_key (WEdit *edit, long x_key, int *cmd, int *ch)
int command = CK_Insert_Char;
int char_for_insertion = -1;
int i = 0;
int extmod = 0;
int c;
/* an ordinary insertable character */
if (x_key < 256 && !extmod) {
if (x_key < 256) {
#ifdef HAVE_CHARSET
if ( edit->charpoint >= 4 ) {
edit->charpoint = 0;
@ -145,12 +144,22 @@ edit_translate_key (WEdit *edit, long x_key, int *cmd, int *ch)
}
/* Commands specific to the key emulation */
for (i = 0; edit->user_map[i].key != 0; i++)
if (x_key == edit->user_map[i].key) {
command = edit->user_map[i].command;
break;
if (edit->extmod) {
edit->extmod = 0;
for (i = 0; edit->user_x_map[i].key; i++) {
if (x_key == edit->user_x_map[i].key) {
command = edit->user_x_map[i].command;
break;
}
}
} else {
for (i = 0; edit->user_map[i].key != 0; i++) {
if (x_key == edit->user_map[i].key) {
command = edit->user_map[i].command;
break;
}
}
}
fin:
*cmd = command;
*ch = char_for_insertion;

View File

@ -594,6 +594,10 @@ const global_keymap_t default_editor_keymap[] = {
{ 0, 0, "" }
};
const global_keymap_t default_editor_x_keymap[] = {
{ 0, 0, "" }
};
#endif
/* screen.c */

View File

@ -308,6 +308,7 @@ mc_main_error_quark (void)
#ifdef USE_INTERNAL_EDIT
GArray *editor_keymap = NULL;
GArray *editor_x_keymap = NULL;
#endif
GArray *viewer_keymap = NULL;
GArray *viewer_hex_keymap = NULL;

View File

@ -77,6 +77,7 @@ extern int is_right; /* If the selected menu was the right */
#ifdef USE_INTERNAL_EDIT
extern GArray *editor_keymap;
extern GArray *editor_x_keymap;
#endif
extern GArray *viewer_keymap;
extern GArray *viewer_hex_keymap;

View File

@ -966,29 +966,31 @@ load_keymap_defs (void)
if (mc_global_keymap != NULL)
{
#ifdef USE_INTERNAL_EDIT
editor_keymap = g_array_new(TRUE, FALSE, sizeof (global_keymap_t));
editor_keymap = g_array_new (TRUE, FALSE, sizeof (global_keymap_t));
load_keymap_from_section ("editor", editor_keymap, mc_global_keymap);
editor_x_keymap = g_array_new (TRUE, FALSE, sizeof (global_keymap_t));
load_keymap_from_section ("editor:xmap", editor_x_keymap, mc_global_keymap);
#endif
viewer_keymap = g_array_new(TRUE, FALSE, sizeof (global_keymap_t));
viewer_keymap = g_array_new (TRUE, FALSE, sizeof (global_keymap_t));
load_keymap_from_section ("viewer", viewer_keymap, mc_global_keymap);
viewer_hex_keymap = g_array_new(TRUE, FALSE, sizeof (global_keymap_t));
viewer_hex_keymap = g_array_new (TRUE, FALSE, sizeof (global_keymap_t));
load_keymap_from_section ("viewer:hex", viewer_hex_keymap, mc_global_keymap);
main_keymap = g_array_new(TRUE, FALSE, sizeof (global_keymap_t));
main_keymap = g_array_new (TRUE, FALSE, sizeof (global_keymap_t));
load_keymap_from_section ("main", main_keymap, mc_global_keymap);
main_x_keymap = g_array_new(TRUE, FALSE, sizeof (global_keymap_t));
main_x_keymap = g_array_new (TRUE, FALSE, sizeof (global_keymap_t));
load_keymap_from_section ("main:xmap", main_x_keymap, mc_global_keymap);
panel_keymap = g_array_new(TRUE, FALSE, sizeof (global_keymap_t));
panel_keymap = g_array_new (TRUE, FALSE, sizeof (global_keymap_t));
load_keymap_from_section ("panel", panel_keymap, mc_global_keymap);
input_keymap = g_array_new(TRUE, FALSE, sizeof (global_keymap_t));
input_keymap = g_array_new (TRUE, FALSE, sizeof (global_keymap_t));
load_keymap_from_section ("input", input_keymap, mc_global_keymap);
mc_config_deinit(mc_global_keymap);
mc_config_deinit (mc_global_keymap);
}
}