diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/keyboard.c | 64 |
1 files changed, 57 insertions, 7 deletions
diff --git a/src/keyboard.c b/src/keyboard.c index c0f46fbad13..0daf9a01cc1 100644 --- a/src/keyboard.c +++ b/src/keyboard.c | |||
| @@ -32,6 +32,7 @@ Boston, MA 02111-1307, USA. */ | |||
| 32 | #include "window.h" | 32 | #include "window.h" |
| 33 | #include "commands.h" | 33 | #include "commands.h" |
| 34 | #include "buffer.h" | 34 | #include "buffer.h" |
| 35 | #include "charset.h" | ||
| 35 | #include "disptab.h" | 36 | #include "disptab.h" |
| 36 | #include "dispextern.h" | 37 | #include "dispextern.h" |
| 37 | #include "keyboard.h" | 38 | #include "keyboard.h" |
| @@ -1070,7 +1071,7 @@ Lisp_Object | |||
| 1070 | command_loop_1 () | 1071 | command_loop_1 () |
| 1071 | { | 1072 | { |
| 1072 | Lisp_Object cmd, tem; | 1073 | Lisp_Object cmd, tem; |
| 1073 | int lose; | 1074 | int lose, lose2; |
| 1074 | int nonundocount; | 1075 | int nonundocount; |
| 1075 | Lisp_Object keybuf[30]; | 1076 | Lisp_Object keybuf[30]; |
| 1076 | int i; | 1077 | int i; |
| @@ -1267,14 +1268,17 @@ command_loop_1 () | |||
| 1267 | { | 1268 | { |
| 1268 | struct Lisp_Char_Table *dp | 1269 | struct Lisp_Char_Table *dp |
| 1269 | = window_display_table (XWINDOW (selected_window)); | 1270 | = window_display_table (XWINDOW (selected_window)); |
| 1270 | lose = FETCH_CHAR (PT); | 1271 | lose = FETCH_BYTE (PT); |
| 1271 | SET_PT (PT + 1); | 1272 | SET_PT (forward_point (1)); |
| 1272 | if ((dp | 1273 | if ((dp |
| 1273 | ? (VECTORP (DISP_CHAR_VECTOR (dp, lose)) | 1274 | ? (VECTORP (DISP_CHAR_VECTOR (dp, lose)) |
| 1274 | ? XVECTOR (DISP_CHAR_VECTOR (dp, lose))->size == 1 | 1275 | ? XVECTOR (DISP_CHAR_VECTOR (dp, lose))->size == 1 |
| 1275 | : (NILP (DISP_CHAR_VECTOR (dp, lose)) | 1276 | : (NILP (DISP_CHAR_VECTOR (dp, lose)) |
| 1276 | && (lose >= 0x20 && lose < 0x7f))) | 1277 | && (lose >= 0x20 && lose < 0x7f))) |
| 1277 | : (lose >= 0x20 && lose < 0x7f)) | 1278 | : (lose >= 0x20 && lose < 0x7f)) |
| 1279 | /* To extract the case of continuation on | ||
| 1280 | wide-column characters. */ | ||
| 1281 | && (WIDTH_BY_CHAR_HEAD (FETCH_BYTE (PT)) == 1) | ||
| 1278 | && (XFASTINT (XWINDOW (selected_window)->last_modified) | 1282 | && (XFASTINT (XWINDOW (selected_window)->last_modified) |
| 1279 | >= MODIFF) | 1283 | >= MODIFF) |
| 1280 | && (XFASTINT (XWINDOW (selected_window)->last_overlay_modified) | 1284 | && (XFASTINT (XWINDOW (selected_window)->last_overlay_modified) |
| @@ -1293,8 +1297,8 @@ command_loop_1 () | |||
| 1293 | { | 1297 | { |
| 1294 | struct Lisp_Char_Table *dp | 1298 | struct Lisp_Char_Table *dp |
| 1295 | = window_display_table (XWINDOW (selected_window)); | 1299 | = window_display_table (XWINDOW (selected_window)); |
| 1296 | SET_PT (PT - 1); | 1300 | SET_PT (forward_point (-1)); |
| 1297 | lose = FETCH_CHAR (PT); | 1301 | lose = FETCH_BYTE (PT); |
| 1298 | if ((dp | 1302 | if ((dp |
| 1299 | ? (VECTORP (DISP_CHAR_VECTOR (dp, lose)) | 1303 | ? (VECTORP (DISP_CHAR_VECTOR (dp, lose)) |
| 1300 | ? XVECTOR (DISP_CHAR_VECTOR (dp, lose))->size == 1 | 1304 | ? XVECTOR (DISP_CHAR_VECTOR (dp, lose))->size == 1 |
| @@ -1351,7 +1355,7 @@ command_loop_1 () | |||
| 1351 | nonundocount = 0; | 1355 | nonundocount = 0; |
| 1352 | 1356 | ||
| 1353 | if (!lose | 1357 | if (!lose |
| 1354 | && (PT == ZV || FETCH_CHAR (PT) == '\n')) | 1358 | && (PT == ZV || FETCH_BYTE (PT) == '\n')) |
| 1355 | { | 1359 | { |
| 1356 | struct Lisp_Char_Table *dp | 1360 | struct Lisp_Char_Table *dp |
| 1357 | = window_display_table (XWINDOW (selected_window)); | 1361 | = window_display_table (XWINDOW (selected_window)); |
| @@ -3500,6 +3504,41 @@ char *lispy_function_keys[] = | |||
| 3500 | 3504 | ||
| 3501 | #define FUNCTION_KEY_OFFSET 0xff00 | 3505 | #define FUNCTION_KEY_OFFSET 0xff00 |
| 3502 | 3506 | ||
| 3507 | #ifdef XK_kana_A | ||
| 3508 | static char *lispy_kana_keys[] = | ||
| 3509 | { | ||
| 3510 | /* X Keysym value */ | ||
| 3511 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x400 .. 0x40f */ | ||
| 3512 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x410 .. 0x41f */ | ||
| 3513 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x420 .. 0x42f */ | ||
| 3514 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x430 .. 0x43f */ | ||
| 3515 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x440 .. 0x44f */ | ||
| 3516 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x450 .. 0x45f */ | ||
| 3517 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x460 .. 0x46f */ | ||
| 3518 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,"overline",0, | ||
| 3519 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x480 .. 0x48f */ | ||
| 3520 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x490 .. 0x49f */ | ||
| 3521 | 0, "kana-fullstop", "kana-openingbracket", "kana-closingbracket", | ||
| 3522 | "kana-comma", "kana-conjunctive", "kana-WO", "kana-a", | ||
| 3523 | "kana-i", "kana-u", "kana-e", "kana-o", | ||
| 3524 | "kana-ya", "kana-yu", "kana-yo", "kana-tsu", | ||
| 3525 | "prolongedsound", "kana-A", "kana-I", "kana-U", | ||
| 3526 | "kana-E", "kana-O", "kana-KA", "kana-KI", | ||
| 3527 | "kana-KU", "kana-KE", "kana-KO", "kana-SA", | ||
| 3528 | "kana-SHI", "kana-SU", "kana-SE", "kana-SO", | ||
| 3529 | "kana-TA", "kana-CHI", "kana-TSU", "kana-TE", | ||
| 3530 | "kana-TO", "kana-NA", "kana-NI", "kana-NU", | ||
| 3531 | "kana-NE", "kana-NO", "kana-HA", "kana-HI", | ||
| 3532 | "kana-FU", "kana-HE", "kana-HO", "kana-MA", | ||
| 3533 | "kana-MI", "kana-MU", "kana-ME", "kana-MO", | ||
| 3534 | "kana-YA", "kana-YU", "kana-YO", "kana-RA", | ||
| 3535 | "kana-RI", "kana-RU", "kana-RE", "kana-RO", | ||
| 3536 | "kana-WA", "kana-N", "voicedsound", "semivoicedsound", | ||
| 3537 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x4e0 .. 0x4ef */ | ||
| 3538 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x4f0 .. 0x4ff */ | ||
| 3539 | }; | ||
| 3540 | #endif /* XK_kana_A */ | ||
| 3541 | |||
| 3503 | /* You'll notice that this table is arranged to be conveniently | 3542 | /* You'll notice that this table is arranged to be conveniently |
| 3504 | indexed by X Windows keysym values. */ | 3543 | indexed by X Windows keysym values. */ |
| 3505 | static char *lispy_function_keys[] = | 3544 | static char *lispy_function_keys[] = |
| @@ -3519,7 +3558,8 @@ static char *lispy_function_keys[] = | |||
| 3519 | 0, 0, 0, 0, 0, 0, 0, | 3558 | 0, 0, 0, 0, 0, 0, 0, |
| 3520 | "escape", | 3559 | "escape", |
| 3521 | 0, 0, 0, 0, | 3560 | 0, 0, 0, 0, |
| 3522 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xff20...2f */ | 3561 | 0, "kanji", "muhenkan", |
| 3562 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xff20...2f */ | ||
| 3523 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xff30...3f */ | 3563 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xff30...3f */ |
| 3524 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xff40...4f */ | 3564 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0xff40...4f */ |
| 3525 | 3565 | ||
| @@ -3710,6 +3750,16 @@ make_lispy_event (event) | |||
| 3710 | (unsigned)-1); | 3750 | (unsigned)-1); |
| 3711 | } | 3751 | } |
| 3712 | 3752 | ||
| 3753 | #ifdef XK_kana_A | ||
| 3754 | if (event->code >= 0x400 && event->code < 0x500) | ||
| 3755 | return modify_event_symbol (event->code - 0x400, | ||
| 3756 | event->modifiers & ~shift_modifier, | ||
| 3757 | Qfunction_key, Qnil, | ||
| 3758 | lispy_kana_keys, &func_key_syms, | ||
| 3759 | (sizeof (lispy_kana_keys) | ||
| 3760 | / sizeof (lispy_kana_keys[0]))); | ||
| 3761 | #endif /* XK_kana_A */ | ||
| 3762 | |||
| 3713 | return modify_event_symbol (event->code - FUNCTION_KEY_OFFSET, | 3763 | return modify_event_symbol (event->code - FUNCTION_KEY_OFFSET, |
| 3714 | event->modifiers, | 3764 | event->modifiers, |
| 3715 | Qfunction_key, Qnil, | 3765 | Qfunction_key, Qnil, |