From: Araki K. <j00...@ip...> - 2001-12-14 13:50:00
|
荒木です:-) 以下の修正をcommitしました。 * mlconfig is replaced by the new one designed by Kubota Tomohiro san(thanks) * mlconfig works asynchronous. * documentation for big5_buggy option is added. * memory leaks when pre_conv_xct_to_ucs option is changed more than twice. fixed. 久保田さんのご指摘にそう形で、mlconfig を非同期で実行するようにしました。 これで、mlterm 本体の再描画がされずに見苦しい表示なる問題は解決していると 思います。 ついでに、各 pty ウィンドウごとの mlconfg を、同時に起動できるようになっ ていると思いますので、そちらもご確認下さい。 それから、 Subject: [Mlterm-dev-ja] -lxpg4 is needed when libkik.so is created. From: hs...@mt... (Hironori Sakamoto) Message-ID: <200...@mt...> Date: Wed, 12 Dec 2001 21:54:42 +0900 (JST) この、libkik.so.* を作る時に -lxpg4 が必要という話ですが、Qt や gtk など を見てみたところ、それら、内部でsetlocale()しているライブラリが、明示的に -lxpg4 している様子はなかったので、他に原因があるような気がしまして、まだ 修正はしておりません。ただ、 > それから、src/Makefile での -lkik -lmkf ですが、 > make の時は、TOPDIR/kiklib/src/, TOPDIR/mkf/lib/ を最優先 > すべきですので、以下の様に最初に持って来るべきかと。 > --- src/Makefile.in.orig Tue Dec 11 01:38:30 2001 > +++ src/Makefile.in Wed Dec 12 20:26:44 2001 > @@ -33,8 +33,9 @@ > -DLIBDIR=\"$(LIBDIR)\" -DLIBEXECDIR=\"$(LIBEXECDIR)\" -DSYSCONFDIR=\"$(SYSCONFDIR)\" \ > -I/usr/X11R6/include -I/usr/local/include > LIBS=$(CFLAGS_LOCAL) \ > + $(LKIK) $(LMKF) \ > @X_EXTRA_LIBS@ @XPG4_LIBS@ @DL_LIBS@ @IMLIB_LIBS@ @AA_LIBS@ @FRIBIDI_LIBS@ \ > - $(LKIK) $(LMKF) -lX11 \ > + -lX11 \ > -L/usr/X11R6/lib -L/usr/local/lib > > PROG = mlterm ↑このパッチをみていて気づいたのですが、@XPG4_LIBS@ より前に、$(LKIK) を もってこないと、setlocale のシンボル解決がうまく行かない可能性がありそう な(ranlibしてない.aアーカイブ以外でもありえるのかしら)気がしましたので、 XPG4_LIBS を後ろにもってくる修正は加えさせていただきました_o_ これで解決しませんでしょうか? 最後に、Xutf8LookupString()をどうするか、という話ですが、とりあえず、 XmbLookupString => XLookupString => Xutf8LookupString() という順番で検索するパッチを添付しておきます。 わたしの環境では、setxkbmap を使う方法はもとより、kinput2 からすら、 Xutf8LookupStringでは、さっぱり入力を受け取れませんので、テストして いただけると幸いです。 # ./configure --enable-wide-chars して作った xterm-164 -u8 でも、kinput2 # 入力できていません。何かミスってるんでしょうけれど、よくわからない.... では -- kiken j00...@ip... Index: ml_window.c =================================================================== RCS file: /home/ken/cvsroot/mlterm/src/ml_window.c,v retrieving revision 1.201 diff -u -r1.201 ml_window.c --- ml_window.c 2001/12/13 15:35:44 1.201 +++ ml_window.c 2001/12/14 13:41:58 @@ -2625,11 +2625,16 @@ return len ; } - *parser = NULL ; - if( ( len = XLookupString( event , seq , seq_len , keysym , NULL)) > 0) { + *parser = NULL ; + return len ; + } + + if( ( len = ml_xic_get_utf8_str( win , seq , seq_len , parser , keysym , event)) > 0) + { + return len ; } return 0 ; Index: ml_xic.c =================================================================== RCS file: /home/ken/cvsroot/mlterm/src/ml_xic.c,v retrieving revision 1.13 diff -u -r1.13 ml_xic.c --- ml_xic.c 2001/12/13 06:28:21 1.13 +++ ml_xic.c 2001/12/14 13:36:56 @@ -9,11 +9,17 @@ #include <kiklib/kik_str.h> /* kik_str_alloca_dup */ #include <kiklib/kik_mem.h> /* malloc */ #include <kiklib/kik_locale.h> /* kik_get_locale */ +#include <mkf/mkf_utf8_parser.h> #include "ml_window_intern.h" #include "ml_xim.h" /* refering mutually */ +/* --- static variables --- */ + +static mkf_parser_t * utf8_parser ; + + /* --- static functions --- */ static void @@ -511,6 +517,43 @@ } return len ; +} + +size_t +ml_xic_get_utf8_str( + ml_window_t * win , + u_char * seq , + size_t seq_len , + mkf_parser_t ** parser , + KeySym * keysym , + XKeyEvent * event + ) +{ +#ifdef X_HAVE_UTF8_STRING + Status stat ; + size_t len ; + + if( win->xic == NULL || win->use_xim == 0) + { + return 0 ; + } + + if( ( len = Xutf8LookupString( win->xic->ic , event , seq , seq_len , keysym , &stat)) == 0) + { + return 0 ; + } + + if( ! utf8_parser) + { + utf8_parser = mkf_utf8_parser_new() ; + } + + *parser = utf8_parser ; + + return len ; +#else + return 0 ; +#endif } int Index: ml_xic.h =================================================================== RCS file: /home/ken/cvsroot/mlterm/src/ml_xic.h,v retrieving revision 1.5 diff -u -r1.5 ml_xic.h --- ml_xic.h 2001/12/13 06:28:21 1.5 +++ ml_xic.h 2001/12/14 13:43:01 @@ -42,7 +42,10 @@ int ml_xic_set_spot( ml_window_t * win) ; -size_t ml_xic_get_str( ml_window_t * win , u_char * seq , size_t seq_len , +size_t ml_xic_get_str( ml_window_t * win , u_char * seq , size_t seq_len , + mkf_parser_t ** parser , KeySym * keysym , XKeyEvent * event) ; + +size_t ml_xic_get_utf8_str( ml_window_t * win , u_char * seq , size_t seq_len , mkf_parser_t ** parser , KeySym * keysym , XKeyEvent * event) ; int ml_xic_set_focus( ml_window_t * win) ; |