初めまして。坂井と申します。
Gentoo Linux 上でコンパイルした mlterm-2.9.0 で、 Mod+BackSpace を押し
たときに M-DEL が出力されるように設定しようと思い、~/.mlterm/key に
Mod+BackSpace="\xff"
と書いておいたのですが、この設定が反映されません。これ以外の設定、例え
ば、
Mod+Tab="\x89"
Mod+Return="\x8d"
などは問題なく反映されています。
他にもいくつか設定して試してみたところ、 Mod+Delete なども反映されませ
ん。僕が確認した限りでは、以下の 6 つの場合に設定が反映されませんでし
た。
Mod+BackSpace="\xff"
Shift+BackSpace="\xff"
Control+BackSpace="\xff"
Mod+Delete="\xff"
Shift+Delete="\xff"
Control+Delete="\xff"
具体的には、 Mod+BackSpace 、 Shift+BackSpace 、 Control+BackSpace の
3 つは、BackSpace だけを押したときに出力される文字列を出力し、
Mod+Delete 、Shift+Delete 、 Control+Delete の 3 つは、 Delete だけを
押したときに出力されるはずの文字列を出力しました。
実際に出力された文字列は、 /etc/mlterm/termcap が、以下のような内容な
ので、 BackSpace の場合は ^? で、 Delete のときは ^[[3~ でした。
mlterm:\
kD=\E[3~:kb=^?
xterm|rxvt:\
kD=^?:kb=^H:ut
*:\
kD=^?:kb=^H
key ファイルの設定と termcap の設定が衝突しているのではないかと思い、
少しコードを変更してコンパイルしてみたところ、僕の環境では上手く動きま
した。その場凌ぎといった感じのするものですが、以下がそのパッチです。
Index: x_screen.c
===================================================================
RCS file: /cvsroot/mlterm/mlterm/xwindow/x_screen.c,v
retrieving revision 1.122
diff -u -r1.122 x_screen.c
--- x_screen.c 6 Dec 2004 04:19:19 -0000 1.122
+++ x_screen.c 30 Dec 2004 09:50:33 -0000
@@ -2064,7 +2064,7 @@
}
}
- if( ( ksym == XK_Delete && size == 1) || ksym == XK_KP_Delete)
+ if( ( ksym == XK_Delete && size == 1 && !event->state) || ( ksym == XK_KP_Delete && !event->state))
{
buf = x_termcap_get_str_field( screen->termcap , ML_DELETE) ;
}
@@ -2073,7 +2073,7 @@
* In some environment, if backspace(1) -> 0-9 or space(2) pressed continuously,
* ksym in (2) as well as (1) is XK_BackSpace.
*/
- else if( ksym == XK_BackSpace && size == 1 && seq[0] == 0x8)
+ else if( ksym == XK_BackSpace && size == 1 && seq[0] == 0x8 && !event->state)
{
buf = x_termcap_get_str_field( screen->termcap , ML_BACKSPACE) ;
}
--
Yusuke Sakai <abi...@hk...>
|