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のビルド準備
- レポジトリから取得する
- 32bitの開発環境の準備
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/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で入れ直す