aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKarl Heuer1997-02-20 06:50:30 +0000
committerKarl Heuer1997-02-20 06:50:30 +0000
commit37cd9f309e978b17de5dd314d880446c675181f9 (patch)
treeac7c10abaeb8e0a3b140f2c81df41298c99ce99c /src
parent469ff68001addb673e16e6f18a120152b9a1d15f (diff)
downloademacs-37cd9f309e978b17de5dd314d880446c675181f9.tar.gz
emacs-37cd9f309e978b17de5dd314d880446c675181f9.zip
(command_loop_1): Pay attention to a multibyte
character while handling forward-char and backward-char. [!HAVE_NTGUI && XK_kana_A] (lispy_kana_keys): New variable. [!HAVE_NTGUI] (lispy_function_keys): New variable. (make_lispy_event) [XK_kana_A]: Handle kana keys.
Diffstat (limited to 'src')
-rw-r--r--src/keyboard.c64
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
1070command_loop_1 () 1071command_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
3508static 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. */
3505static char *lispy_function_keys[] = 3544static 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,