fcitx-mozc とoyainputでNicola F型
- 公開日: 2019/01/14(月) 14:59[JST]
これまでLinuxでの日本語入力はibus-anthyを使っていたが変換効率がアレなのでちと困っていた。でも親指シフトに対応しているのはAnthy系だけだし…
と思っていた所、oyainputというソフトを使えばmozcなどでも親指シフトが使えるとのことで試してみる。インストール方法はリンク先に記載の通り。fcitx-mozc一式も事前にインストール済み。
試してみたところ二点ほど問題が。
まず第一に、oyainputを起動すると設定したxmodmapの設定がキャンセルされてしまうこと。これはoyainput起動後に改めてxmodmapを実行すればよい。(Futurismoの記事を参考にさせていただいた)
第二に、これまでibus-anthyで入力できていた文字が入力できないこと。具体的には以下の通り。
zで全角ピリオドを打ちたいが句点になってしまう
pで全角カンマを打ちたいが読点になってしまう
親指シフト+2、6、7で/、[、]を打ちたいが*、{、}になってしまう
xmodmapでコロンにバックスペースを、バックスペースに別の文字を割り当てているが、日本語入力モードでコロンを押すとバックスペースに割り当てた文字が入力されてしまう
基本的にoyainputはキーコードを差し替えるソフトのようだ。そのため、ローマ字変換テーブルで定義されていない文字は入力できないし、xmodmapでキーとシンボルの対応をいじってしまうと想定外の文字が出力されてしまう。ちなみにxmodmap設定は以下の通り。
clear lock clear control keycode 9 = Zenkaku_Hankaku keycode 19 = 0 underscore keycode 22 = yen overline keycode 34 = colon asterisk keycode 37 = Eisu_toggle Caps_Lock keycode 48 = BackSpace keycode 49 = Escape keycode 51 = at grave keycode 66 = Control_L keycode 97 = backslash bar keycode 132 = bracketright braceright add lock = Caps_Lock add control = Control_L Control_R pointer = 1 7 3 4 5 6 9 8 2
この設定の意味は以下の通り
全角/半角とエスケープの入れ替え
左Ctrlと英数入れ替え
シフト+0でアンダースコアを入力
バックスペースで円記号、シフト+バックスペースでオーバーラインを入力
コロンでバックスペース入力
@でコロン、シフト+@でアスタリスク入力
]で@、シフト+]でバッククォート入力
シフト+バックスラッシュ(右シフトの左隣)で|入力
円記号(バックスペースの左隣)で]、シフト+円記号で}入力
このxmodmap設定と整合性をとれるよう、下記のようにソースを変更した。
common.h
#define MOJI_ATMARK 120 //#define MOJI_MAX 119 // last index #define MOJI_MAX 120 // last index
oyastate.c
// {KEY_Q, MOJI_PERIOD}, {KEY_Q, MOJI_KUTEN}, // {KEY_LEFTBRACE, MOJI_COMMA}, {KEY_LEFTBRACE, MOJI_KUTOUTEN}, {KEY_BACKSLASH, MOJI_ATMARK}, // [MOJI_BS] = {KEY_BACKSPACE,0,0}, /* MOJI_BS 90 */ [MOJI_BS] = {KEY_APOSTROPHE,0,0}, /* MOJI_BS 90 */ // [MOJI_SLASH] = {KEY_LEFTSHIFT,KEY_APOSTROPHE,0}, /* MOJI_SLASH 92 */ [MOJI_SLASH] = {KEY_Z,KEY_SLASH,0}, /* MOJI_SLASH 92 */ // [MOJI_PERIOD] = {KEY_DOT,0,0}, /* MOJI_PERIOD 111 */ [MOJI_PERIOD] = {KEY_Z,KEY_DOT,0}, /* MOJI_PERIOD 111 */ // [MOJI_COMMA] = {KEY_COMMA,0,0}, /* MOJI_COMMA 112 */ [MOJI_COMMA] = {KEY_Z,KEY_COMMA,0}, /* MOJI_COMMA 112 */ // [MOJI_LBRACKET] = {KEY_LEFTSHIFT, KEY_RIGHTBRACE,0}, /* MOJI_LBRACKET 96 */ [MOJI_LBRACKET] = {KEY_Z,KEY_LEFTSHIFT, KEY_8}, /* MOJI_LBRACKET 96 */ // [MOJI_RBRACKET] = {KEY_LEFTSHIFT,KEY_BACKSLASH,0}, /* MOJI_RBRACKET 97 */ [MOJI_RBRACKET] = {KEY_Z,KEY_LEFTSHIFT,KEY_9}, /* MOJI_RBRACKET 97 */
KEY_なんちゃらという定数は/usr/include/linux/input-event-codes.hで定義されている。USキーボードが基準なので例えばKEY_RIGHTBRACEはJISキーボードでは]ではなく[である。sudo showkey -kで押したキーのキーコード(数字)を得ることができるので、得られた数字とinput-event-codes.hの内容を突き合わせて、入力するキーに対応するKEY_なんちゃら定数を調べることができる。
最後に、fcitx-mozcのローマ字変換テーブルを編集した。
z,: 全角カンマ
z.: 全角ピリオド
z/: 全角スラッシュ
z(: [
z): ]