kawa-tの日記: 重い腰を上げた その2 1
前回の続き。キーバインド関連は、MS IMEベースで作ることにした。まず、インプットメソッドのON/OFFについてはAltGr+GにHangulをあてがうことで対応した。ibus-mozcでは使えないキーなので都合がいい。
ibus-mozcのキーバインドに関しては、制約が多いので面倒くさい。ひらがな/カタカナキーをひらがなキーとカタカナキーに分けて設定できるのだが、ひらがなキーとひらがな/カタカナキーは同じものと扱われ、Shiftを押した時にはどちらもカタカナキーになる。したがって、Shiftキーとのコンビネーションでは使えない。
最終的にはAltGr+A、AltGr+S、AltGr+D、AltGr+Fにひらがな、カタカナ、変換、無変換をそれぞれ割り当て、変換キーだけibus-mozc側でカスタマイズして半角英数字入力への切り替えに使えるようにした。ほぼ正常に動作するようになったが、105キーボードのzの隣のキーにあてがったCtrlキーの動作が正しくなく、同時押しでは動作するものの、単独だと元の文字が出力されてしまう。そのうち何とかしたい。
次にibus-mozcで月配列を使えるようにするための手順の記録。大まかな流れとしては、通常のDebianのパッケージのビルドに従う。US配列に対するマッピングを書き換えているが、インストール時にはX側の配列を日本語配列に決め打ちしてしまうので、7.によりX側の配列をUS配列に指定する必要がある。/usr/share/X11/xkb/symbols/jpに105キーボード対応のマッピングを用意すれば解決するはずなので、そのうち試してみたい。
1.作業用のディレクトリを作る。
2.作業用のディレクトリでDebianのリポジトリからソースを取得する。
apt-get source mozc
3.関連ファイルを取得する。
apt-get build-dep mozc
4.ソースコードに変更を加える。
5.ビルドする
dpkg-buildpackage -r -uc -b
6.dpkgでインストールする。
7./usr/share/ibus/component/mozc.xmlでレイアウトをusに設定する。
ソースコードの変更内容は以下の通り。mozc_engine.ccに対する変更はバグに対する対応である。Linux版以外ではエンジン名でキーボードレイアウトを判断することがあるようだが、Linuxではエンジン名は固定。そのため、エンジン名を取得することによってレイアウトを知ることは出来ず、Linuxにおいては全く意味がない。US配列に対するマッピングを利用したいのであれば、layout_is_jpはfalseでなくてはならない。
key_translator.ccに対する変更は月配列の表側の設定である。2番めの文字コードはShiftと同時押しの時の文字コードである。対応するかながないところに関してはほぼ意味がないが、対応するかながあればShiftキーとの同時押しでアルファベットや記号が入力される。月配列のシフト側の設定はkana.tsvで行う。3ストロークの濁音や半濁音は、1つの濁音・半濁音に対して、清音+濁点・半濁点と、シフト文字+表側の文字+濁点・半濁点の2つの定義が必要になる。
コンパイルとインストールが必要であったり、文字をUTF-8で指定したりするのでibus-anthyよりも面倒臭いが、ポイントがわかれば、それほど難しくはない。
--- mozc/mozc-1.5.1090.102/unix/ibus/key_translator.cc 2012-06-15
+++ mozc-tsuki/mozc-1.5.1090.102/unix/ibus/key_translator.cc 2014-02-02
@@ -257,7 +257,7 @@
// two different keys (the one next to Backslash and the one next
// to Right Shift).
{ '\\', "", "" },
-}, kana_map_us[] = {
+}, /* kana_map_us[] = {
{ '`' , "\xe3\x82\x8d", "\xe3\x82\x8d" }, // "ろ", "ろ"
{ '~' , "\xe3\x82\x8d", "\xe3\x82\x8d" }, // "ろ", "ろ"
{ '1' , "\xe3\x81\xac", "\xe3\x81\xac" }, // "ぬ", "ぬ"
@@ -352,6 +352,101 @@
{ '>' , "\xe3\x82\x8b", "\xe3\x80\x82" }, // "る", "。"
{ '/' , "\xe3\x82\x81", "\xe3\x83\xbb" }, // "め", "・"
{ '?' , "\xe3\x82\x81", "\xe3\x83\xbb" }, // "め", "・"
+} ,*/ kana_map_us[] = {
+ { '`' , "\xef\xbd\x80", "\xef\xbd\x9e" }, // "`", "~"
+ { '~' , "\xef\xbd\x80", "\xef\xbd\x9e" }, // "`", "~"
+ { '1' , "\xef\xbc\x91", "\xef\xbc\x81" }, // "1", "!"
+ { '!' , "\xef\xbc\x91", "\xef\xbc\x81" }, // "1", "!"
+ { '2' , "\xef\xbc\x92", "\xef\xbc\xa0" }, // "2", "@"
+ { '@' , "\xef\xbc\x92", "\xef\xbc\xa0" }, // "2", "@"
+ { '3' , "\xef\xbc\x93", "\xef\xbc\x83" }, // "3", "#"
+ { '#' , "\xef\xbc\x93", "\xef\xbc\x83" }, // "3", "#"
+ { '4' , "\xef\xbc\x94", "\xef\xbc\x84" }, // "4", "$"
+ { '$' , "\xef\xbc\x94", "\xef\xbc\x84" }, // "4", "$"
+ { '5' , "\xef\xbc\x95", "\xef\xbc\x85" }, // "5", "%"
+ { '%' , "\xef\xbc\x95", "\xef\xbc\x85" }, // "5", "%"
+ { '6' , "\xef\xbc\x96", "\xef\xbc\xbe" }, // "6", "^"
+ { '^' , "\xef\xbc\x96", "\xef\xbc\xbe" }, // "6", "^"
+ { '7' , "\xef\xbc\x97", "\xef\xbc\x86" }, // "7", "&"
+ { '&' , "\xef\xbc\x97", "\xef\xbc\x86" }, // "7", "&"
+ { '8' , "\xef\xbc\x98", "\xef\xbc\x8a" }, // "8", "*"
+ { '*' , "\xef\xbc\x98", "\xef\xbc\x8a" }, // "8", "*"
+ { '9' , "\xef\xbc\x99", "\xef\xbc\x88" }, // "9", "("
+ { '(' , "\xef\xbc\x99", "\xef\xbc\x88" }, // "9", "("
+ { '0' , "\xef\xbc\x90", "\xef\xbc\x89" }, // "0", ")"
+ { ')' , "\xef\xbc\x90", "\xef\xbc\x89" }, // "0", ")"
+ { '-' , "\xef\xbc\x8d", "\xef\xbc\xbf" }, // "-", "_"
+ { '_' , "\xef\xbc\x8d", "\xef\xbc\xbf" }, // "-", "_"
+ { '=' , "\xef\xbc\x9d", "\xef\xbc\x8b" }, // "=", "+"
+ { '+' , "\xef\xbc\x9d", "\xef\xbc\x8b" }, // "=", "+"
+ { 'q' , "\xe3\x81\x9d", "\xef\xbd\x91" }, // "そ", "q"
+ { 'Q' , "\xe3\x81\x9d", "\xef\xbc\xb1" }, // "そ", "Q"
+ { 'w' , "\xe3\x81\x93", "\xef\xbd\x97" }, // "こ", "w"
+ { 'W' , "\xe3\x81\x93", "\xef\xbc\xb7" }, // "こ", "W"
+ { 'e' , "\xe3\x81\x97", "\xef\xbd\x85" }, // "し", "e"
+ { 'E' , "\xe3\x81\x97", "\xef\xbc\xa5" }, // "し", "E"
+ { 'r' , "\xe3\x81\xa6", "\xef\xbd\x92" }, // "て", "r"
+ { 'R' , "\xe3\x81\xa6", "\xef\xbc\xb2" }, // "て", "R"
+ { 't' , "\xe3\x82\x87", "\xef\xbd\x94" }, // "ょ", "t"
+ { 'T' , "\xe3\x82\x87", "\xef\xbc\xb4" }, // "ょ", "T"
+ { 'y' , "\xe3\x81\xa4", "\xef\xbd\x99" }, // "つ", "y"
+ { 'Y' , "\xe3\x81\xa4", "\xef\xbc\xb9" }, // "つ", "Y"
+ { 'u' , "\xe3\x82\x93", "\xef\xbd\x95" }, // "ん", "u"
+ { 'U' , "\xe3\x82\x93", "\xef\xbc\xb5" }, // "ん", "U"
+ { 'i' , "\xe3\x81\x84", "\xef\xbd\x89" }, // "い", "i"
+ { 'I' , "\xe3\x81\x84", "\xef\xbc\xa9" }, // "い", "I"
+ { 'o' , "\xe3\x81\xae", "\xef\xbd\x8f" }, // "の", "o"
+ { 'O' , "\xe3\x81\xae", "\xef\xbc\xaf" }, // "の", "O"
+ { 'p' , "\xe3\x82\x8a", "\xef\xbd\x90" }, // "り", "p"
+ { 'P' , "\xe3\x82\x8a", "\xef\xbc\xb0" }, // "り", "P"
+ { '[' , "\xe3\x81\xa1", "\xef\xbd\x9b" }, // "ち", "{"
+ { '{' , "\xe3\x81\xa1", "\xef\xbd\x9b" }, // "ち", "{"
+ { ']' , "\xef\xbc\xbd", "\xef\xbd\x9d" }, // "]", "}"
+ { '}' , "\xef\xbc\xbd", "\xef\xbd\x9d" }, // "]", "}"
+ { '\\', "\xe3\x83\xbb", "\xef\xbd\x9c" }, // "・", "|"
+ { '|' , "\xe3\x83\xbb", "\xef\xbd\x9c" }, // "・", "|"
+ { 'a' , "\xe3\x81\xaf", "\xef\xbd\x81" }, // "は", "a"
+ { 'A' , "\xe3\x81\xaf", "\xef\xbc\xa1" }, // "は", "A"
+ { 's' , "\xe3\x81\x8b", "\xef\xbd\x93" }, // "か", "s"
+ { 'S' , "\xe3\x81\x8b", "\xef\xbc\xb3" }, // "か", "S"
+ { 'd' , "\x64", "\xef\xbd\x84" }, // "d", "d"
+ { 'D' , "\x64", "\xef\xbc\xa4" }, // "d", "D"
+ { 'f' , "\xe3\x81\xa8", "\xef\xbd\x86" }, // "と", "f"
+ { 'F' , "\xe3\x81\xa8", "\xef\xbc\xa6" }, // "と", "F"
+ { 'g' , "\xe3\x81\x9f", "\xef\xbd\x87" }, // "た", "g"
+ { 'G' , "\xe3\x81\x9f", "\xef\xbc\xa7" }, // "た", "G"
+ { 'h' , "\xe3\x81\x8f", "\xef\xbd\x88" }, // "く", "h"
+ { 'H' , "\xe3\x81\x8f", "\xef\xbc\xa8" }, // "く", "H"
+ { 'j' , "\xe3\x81\x86", "\xef\xbd\x8a" }, // "う", "j"
+ { 'J' , "\xe3\x81\x86", "\xef\xbc\xaa" }, // "う", "J"
+ { 'k' , "\x6b", "\xef\xbd\x8b" }, // "k", "k"
+ { 'K' , "\x6b", "\xef\xbc\xab" }, // "k", "K"
+ { 'l' , "\xe3\x82\x9b", "\xef\xbd\x8c" }, // "゛", "l"
+ { 'L' , "\xe3\x82\x9b", "\xef\xbc\xac" }, // "゛", "L"
+ { ';' , "\xe3\x81\x8d", "\xef\xbc\x9a" }, // "き", ":"
+ { ':' , "\xe3\x81\x8d", "\xef\xbc\x9a" }, // "き", ":"
+ { '\'', "\xe3\x82\x8c", "\xef\xbc\x82" }, // "れ", """
+ { '"' , "\xe3\x82\x8c", "\xef\xbc\x82" }, // "れ", """
+ { 'z' , "\xe3\x81\x99", "\xef\xbd\x9a" }, // "す", "z"
+ { 'Z' , "\xe3\x81\x99", "\xef\xbc\xba" }, // "す", "Z"
+ { 'x' , "\xe3\x81\x91", "\xef\xbd\x98" }, // "け", "x"
+ { 'X' , "\xe3\x81\x91", "\xef\xbc\xb8" }, // "け", "X"
+ { 'c' , "\xe3\x81\xab", "\xef\xbd\x83" }, // "に", "c"
+ { 'C' , "\xe3\x81\xab", "\xef\xbc\xa3" }, // "に", "C"
+ { 'v' , "\xe3\x81\xaa", "\xef\xbd\x96" }, // "な", "v"
+ { 'V' , "\xe3\x81\xaa", "\xef\xbc\xb6" }, // "な", "V"
+ { 'b' , "\xe3\x81\x95", "\xef\xbd\x82" }, // "さ", "b"
+ { 'B' , "\xe3\x81\x95", "\xef\xbc\xa2" }, // "さ", "B"
+ { 'n' , "\xe3\x81\xa3", "\xef\xbd\x8e" }, // "っ", "n"
+ { 'N' , "\xe3\x81\xa3", "\xef\xbc\xae" }, // "っ", "N"
+ { 'm' , "\xe3\x82\x8b", "\xef\xbd\x8d" }, // "る", "m"
+ { 'M' , "\xe3\x82\x8b", "\xef\xbc\xad" }, // "る", "M"
+ { ',' , "\xe3\x80\x81", "\xef\xbc\x9c" }, // "、", "<"
+ { '<' , "\xe3\x80\x81", "\xef\xbc\x9c" }, // "、", "<"
+ { '.' , "\xe3\x80\x82", "\xef\xbc\x9e" }, // "。", ">"
+ { '>' , "\xe3\x80\x82", "\xef\xbc\x9e" }, // "。", ">"
+ { '/' , "\xe3\x82\x9c", "\xef\xbc\x9f" }, // "゜", "?"
+ { '?' , "\xe3\x82\x9c", "\xef\xbc\x9f" }, // "゜", "?"
};
} // namespace
--- mozc/mozc-1.5.1090.102/unix/ibus/mozc_engine.cc 2012-06-15
+++ mozc-tsuki/mozc-1.5.1090.102/unix/ibus/mozc_engine.cc 2014-02-01
@@ -422,7 +422,8 @@
// TODO(yusukes): use |layout| in IBusEngineDesc if possible.
const bool layout_is_jp =
- !g_strcmp0(ibus_engine_get_name(engine), "mozc-jp");
+ // !g_strcmp0(ibus_engine_get_name(engine), "mozc-jp");
+ false;
commands::KeyEvent key;
if (!key_event_handler_->GetKeyEvent(
--- ibus-mozc/mozc-1.5.1090.102/data/preedit/kana.tsv 2012-06-15
+++ mozc/mozc-1.5.1090.102/data/preedit/kana.tsv 2014-02-01
@@ -24,3 +24,44 @@
ふ゜ ぷ
へ゜ ぺ
ほ゜ ぽ
+kそ ぁ
+kこ ひ
+kし ほ
+kて ふ
+kょ め
+kは ぃ
+kか を
+kd ら
+kと あ
+kた よ
+kす ぅ
+kけ へ
+kに せ
+kな ゅ
+kさ ゃ
+dつ ぬ
+dん え
+dい み
+dの や
+dり ぇ
+dち 「
+dく ま
+dう お
+dk も
+d゛ わ
+dき ゆ
+dれ 」
+dっ む
+dる ろ
+d、 ね
+d。 ー
+d゜ ぉ
+kに゛ ぜ
+kこ゛ び
+kて゛ ぶ
+kけ゛ べ
+kし゛ ぼ
+kこ゜ ぴ
+kて゜ ぷ
+kけ゜ ぺ
+kし゜ ぽ
修正 (スコア:1)
Shiftに関する解釈が誤っていたので修正した。/usr/share/ibus/component/mozc.xmlのlayoutをusに直し忘れていたら、「ち」が「2」と入力されたので間違いに気が付いた。JIS配列だと、そこには「@」があるわけだが、Shiftを押さないで入力された場合には「2」となるように設定していた。