[Squeak-ja: 3486] Re: UNIX版 VMでの多言語入力

Tsutomu Hiroshima tsutomu @ nucba.ac.jp
2007年 4月 30日 (月) 08:24:29 JST


廣島です.
別のメアドから大島さんにはお送りしましたが,
あらためて投稿させていただきます.

>> ギリシャ語(ISO Latin-7)の入力には XIM を使うのでしょうか? 
>> もしかして Latin-1 のような Compose を使うのでしょうか?
> 
>   ギリシャ語を入力するには、Control-Shiftを押すとキーボードの
> モードが切り替わるという話のようでした。切り替
> えると、xevで見たときワンストロークで("A"のキーを押すと)、
> 
> KeyPress event, serial 29, synthetic NO, window 0x1e00001,
>     root 0x64, subw 0x0, time 3200328687, (155,64), root:(194,585),
>     state 0x2010, keycode 38 (keysym 0x7e1, Greek_alpha), same_screen YES,
>     XLookupString gives 0 bytes: 
>     XmbLookupString gives 0 bytes: 
>     XFilterEvent returns: False
> 
> というコードがSqueak VMに届くようです。
> 

xev の結果から推察すると
Greek_alpha は通常のキャラクタでなく,
KeySym 扱いのようですね.
そうだとすると translateCode を通されます.

man XmbLookupString 抜粋:status_return の値

     XLookupKeySym    A KeySym has been returned instead of a
                         string and is returned in keysym_return.
                         The content of the buffer_return argument
                         is not modified, and the function returns
                         zero.

sqUnixX11.c:static int x2sqKeyInput(XKeyEvent *xevt)の該当箇所

     case XLookupKeySym:
#	 if defined(DEBUG_CONV)
	fprintf(stderr, "x2sqKey XLookupKeySym\n");
#	 endif
	{
	  int charCode= translateCode(symbolic);
#	   if defined(DEBUG_CONV)
	  printf("SYM %d -> %d\n", symbolic, charCode);
#	   endif
	  if (charCode < 0)
	    return -1;	/* unknown key */
	  if ((charCode == 127) && mapDelBs)
	    charCode= 8;
	  return lastKey= charCode;
	}


sqUnixX11.c:static int x2sqKeyPlain(XKeyEvent *xevt)の該当箇所

  if (nConv == 0 && (charCode= translateCode(symbolic)) < 0)
    return -1;	/* unknown key */

translateCode では少数のコントロールキー以外は,
未知のキーとして -1 を返すことになってます.

KeySym の定義を /usr/include/X11/keysymdef.h で調べると,
0xf???  はコントロールキー,
0x100?? はアクセントキー,
0x0???  は文字のキーのようです.

これをふまえて,
translateCode をしかるべく変更する必要があります.
ただこのファイルをみる限り,
KeySym と UNICODE との対応は単純ではなさそうです.
(perl や awk で 対応表を抽出する?)
=================
廣島 勉
Tsutomu Hiroshima



Squeak-ja メーリングリストの案内