ATOK X3のキーバインドを変更する (ubuntu jaunty amd64)

日本語入力をトグルではなくオンオフを別々のキーに割り当てる。Ctrl+o でオン、Ctrl+l でオフできるようにするための作業メモ。

/usr/lib, /usr/lib32, /usr/lib64の整理

インストーラが間違って /usr/lib (/usr/lib64/) に 32bit ライブラリをインストールしていることがある。作業が混乱しないように lib32 に移動させる

find -maxdepth 1 -type f -name "*.so*" -exec file '{}' \;  | grep 32-bit

依存関係の確認(iiim関係)

ldd /usr/bin/iiimd

などで辿っていく。

  • /usr/bin/iiimd
    • libiiimp.so.1
    • libiiimutils.so.0
  • /opt/atokx3/lib/client/atokx3auxd
    • libiiimp.so.1
    • libiiimcf.so.3
      • libiiimp.so.1
      • libkbltrans.so.0
    • libkbltrans.so.0

iiimdのビルド準備

iiimdのビルドのための修正点

LECustomData.cpp: In member function ‘char* LECustomData::make_utf8_charstr(IIIMP_card16*)’:
LECustomData.cpp:138: error: invalid conversion from ‘const char**’ to ‘char**’
LECustomData.cpp:138: error:   initializing argument 2 of ‘size_t iconv(void*, char**, size_t*, char**, size_t*)’

とエラーがでるため以下のように修正する

    //const char *in_buf = (char *)utf16;                                                                                                                                                        
    char *in_buf = (char *)utf16;                                                                                                                                                        

iiimdのビルド

  • trunk/lib/iiimp
  • trunk/iiimsf

の順でそれぞれ

make CPPFLAGS=-D_GNU_SOURCE

としてビルドする。Makefile内に -g (デバッグシンボルの付加)がついている場合ははずす。

iiimdの差し替え

まずは差し替えて動作確認をする

  • trunk/iiimsf/src/.libs/iiimd
  • trunk/iiimsf/src/.libs/libiiimutils.so.0.0.0
  • trunk/lib/iiimp/.libs/libiiimp.so.1.0.0

iiimdの改造

  • trunk/iiimsf/src/IIIMP_hotkey.cpp
  • conversion_modeではなく、indexに応じてbool値を決める
--- IIIMP_hotkey.cpp	(revision 3565)
+++ IIIMP_hotkey.cpp	(working copy)
@@ -48,10 +48,11 @@
 	    result = start_lang_selection_window(hics);
 	}
     } else if (hotkey_id == hics->get_hotkey_profile()->get_default_hotkey_trigger_notify_id()) {
-	if (hics->pshared->conversion_mode)
+	if (index == 0)
+	    flag = true;
+	else
 	    flag = false;
-	else 
-	    flag = true;
+
 	result = hics->get_ichandler()->toggle_conversion(hics->get_imlexec(), flag);
         hics->pshared->conversion_mode = flag;
         if ((hics->start_request()->dealing()) && result) {

ホットキーの設定

上記のindexは、/etc/iiim/client.xml などの "trigger keys" に設定したキーの順番を示している。

Ctrl+o,Ctrl+l

とすると、Ctrl+o が index==0, Ctrl+l が index==1 となり、Ctrl+o では常時日本語入力オン、Ctrl+l では入力オフの挙動となる。

メモ

  • (要確認)libtoolで libtool: link: unsupported hardcode properties がでる場合は、sudo apt-get install libtoolで入れ直す