diff -Naur mc-4.7.0-pre4/src/keybind.c mc-4.7.0-pre4-patched/src/keybind.c
old
|
new
|
|
45 | 45 | |
46 | 46 | #include "keybind.h" |
47 | 47 | |
48 | | static const name_keymap_t command_names[] = { |
| 48 | static name_keymap_t command_names[] = { |
49 | 49 | #ifdef USE_INTERNAL_EDIT |
50 | 50 | { "EditNoCommand", CK_Ignore_Key }, |
51 | 51 | { "EditIgnoreKey", CK_Ignore_Key }, |
… |
… |
|
401 | 401 | { NULL, 0 } |
402 | 402 | }; |
403 | 403 | |
| 404 | static const int num_command_names = sizeof(command_names)/sizeof(command_names[0]) - 1; |
| 405 | |
404 | 406 | /*** global variables ****************************************************************************/ |
405 | 407 | |
406 | 408 | /* viewer/actions_cmd.c */ |
… |
… |
|
770 | 772 | }; |
771 | 773 | |
772 | 774 | |
| 775 | |
| 776 | static int name_keymap_comparator(const void *p1, const void *p2) |
| 777 | { |
| 778 | const name_keymap_t *m1 = (const name_keymap_t*)p1; |
| 779 | const name_keymap_t *m2 = (const name_keymap_t*)p2; |
| 780 | |
| 781 | return str_casecmp(m1->name, m2->name); |
| 782 | } |
| 783 | |
| 784 | static void sort_command_names() |
| 785 | { |
| 786 | static int has_been_sorted = 0; |
| 787 | |
| 788 | if(!has_been_sorted) { |
| 789 | qsort(command_names, num_command_names, sizeof(command_names[0]), &name_keymap_comparator); |
| 790 | has_been_sorted = 1; |
| 791 | } |
| 792 | } |
| 793 | |
773 | 794 | int |
774 | 795 | lookup_action (const char *keyname) |
775 | 796 | { |
776 | | int i; |
| 797 | const name_keymap_t key = {keyname, /*insignificant*/0}; |
| 798 | name_keymap_t *res; |
777 | 799 | |
778 | | for (i = 0; command_names [i].name; i++) |
779 | | if (!str_casecmp (command_names [i].name, keyname)) |
780 | | return command_names [i].val; |
| 800 | sort_command_names(); |
| 801 | res = bsearch(&key, command_names, num_command_names, sizeof(command_names[0]), name_keymap_comparator); |
781 | 802 | |
782 | | return 0; |
| 803 | return (res != NULL) ? res->val : 0; |
783 | 804 | } |
784 | 805 | |
785 | 806 | static void |
diff -Naur mc-4.7.0-pre4/src/tty/key.c mc-4.7.0-pre4-patched/src/tty/key.c
old
|
new
|
|
93 | 93 | * We use this to allow users to define alternate definitions for |
94 | 94 | * certain keys that may be missing from the terminal database |
95 | 95 | */ |
96 | | key_code_name_t key_name_conv_tab[] = { |
| 96 | const key_code_name_t key_name_conv_tab[] = { |
97 | 97 | /* KEY_F(0) is not here, since we are mapping it to f10, so there is no reason |
98 | 98 | to define f0 as well. Also, it makes Learn keys a bunch of problems :( */ |
99 | 99 | { KEY_F (1), "f1", N_("Function key 1"), "F1" }, |
… |
… |
|
1229 | 1229 | return MSG_HANDLED; |
1230 | 1230 | } |
1231 | 1231 | |
| 1232 | |
| 1233 | static const int key_name_conv_tab__size = sizeof(key_name_conv_tab) / sizeof(key_name_conv_tab[0]) - 1; |
| 1234 | |
| 1235 | static key_code_name_t key_name_conv_tab__sorted[ sizeof(key_name_conv_tab) / sizeof(key_name_conv_tab[0]) - 1 ]; |
| 1236 | |
| 1237 | static int key_code_name_comparator(const void *p1, const void *p2) |
| 1238 | { |
| 1239 | const key_code_name_t *n1 = (const key_code_name_t*)p1; |
| 1240 | const key_code_name_t *n2 = (const key_code_name_t*)p2; |
| 1241 | |
| 1242 | return str_casecmp(n1->name, n2->name); |
| 1243 | } |
| 1244 | |
| 1245 | static void sort_key_name_conv_tab() |
| 1246 | { |
| 1247 | static int has_been_sorted = 0; |
| 1248 | |
| 1249 | if(!has_been_sorted) { |
| 1250 | int i; |
| 1251 | for (i = 0; key_name_conv_tab[i].code; i++) |
| 1252 | key_name_conv_tab__sorted[i] = key_name_conv_tab[i]; |
| 1253 | |
| 1254 | qsort(key_name_conv_tab__sorted, key_name_conv_tab__size, |
| 1255 | sizeof(key_name_conv_tab__sorted[0]), &key_code_name_comparator); |
| 1256 | |
| 1257 | has_been_sorted = 1; |
| 1258 | } |
| 1259 | } |
| 1260 | |
1232 | 1261 | static int |
1233 | 1262 | lookup_keyname (const char *keyname, int *lc_index) |
1234 | 1263 | { |
1235 | 1264 | if (keyname[0] != '\0') { |
1236 | | int i; |
| 1265 | // int i; |
1237 | 1266 | |
1238 | 1267 | if (keyname[1] == '\0') { |
1239 | 1268 | *lc_index = -1; |
1240 | 1269 | return (int) keyname[0]; |
1241 | 1270 | } |
| 1271 | else { |
| 1272 | const key_code_name_t key = { |
| 1273 | .name = keyname |
| 1274 | }; |
| 1275 | key_code_name_t *res; |
| 1276 | |
| 1277 | sort_key_name_conv_tab(); |
| 1278 | res = bsearch(&key, |
| 1279 | key_name_conv_tab__sorted, |
| 1280 | key_name_conv_tab__size, sizeof(key_name_conv_tab__sorted[0]), |
| 1281 | key_code_name_comparator); |
| 1282 | |
| 1283 | if(res != NULL) { |
| 1284 | *lc_index = (res - key_name_conv_tab__sorted); |
| 1285 | return res->code; |
| 1286 | } |
| 1287 | } |
1242 | 1288 | |
1243 | | for (i = 0; key_name_conv_tab[i].code; i++) |
| 1289 | /* for (i = 0; key_name_conv_tab[i].code; i++) |
1244 | 1290 | if (str_casecmp (key_name_conv_tab[i].name, keyname) == 0) { |
1245 | 1291 | *lc_index = i; |
1246 | 1292 | return key_name_conv_tab[i].code; |
1247 | | } |
| 1293 | }*/ |
1248 | 1294 | } |
1249 | 1295 | |
1250 | 1296 | *lc_index = -1; |
diff -Naur mc-4.7.0-pre4/src/tty/key.h mc-4.7.0-pre4-patched/src/tty/key.h
old
|
new
|
|
23 | 23 | move_fn backfn, move_fn forfn, move_fn topfn, move_fn bottomfn); |
24 | 24 | int lookup_key (const char *keyname, char **label); |
25 | 25 | |
26 | | typedef const struct { |
| 26 | typedef struct { |
27 | 27 | int code; |
28 | 28 | const char *name; |
29 | 29 | const char *longname; |
30 | 30 | const char *shortcut; |
31 | 31 | } key_code_name_t; |
32 | 32 | |
33 | | extern key_code_name_t key_name_conv_tab[]; |
| 33 | extern const key_code_name_t key_name_conv_tab[]; |
34 | 34 | |
35 | 35 | /* mouse support */ |
36 | 36 | struct Gpm_Event; |