有馬総一郎のブログ

(彼氏の事情)

個人的なibus-skk設定メモ

今更ながらskkにgoogle-ime-skkを導入したときに、色々気付きがあったのでメモ。碌に検証もせず行き当たりばったりでやってるので、参考にはならない。

gem install google-ime-skk

これだけでインストール完了するのはありがたい。google-ime-skkで起動。しかし、初め何故かうまく動かなかった…

arimasou16@Lemur:~$ google-ime-skk
server is on 55100:0.0.0.0:0.0.0.0
cache keep time 3600sec
#<Thread:0x0000558dc013f300@/home/arimasou16/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/google-ime-skk-1.4.0/lib/socialskk.rb:40 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
    1: from /home/arimasou16/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/google-ime-skk-1.4.0/lib/socialskk.rb:41:in `block (2 levels) in mainloop

しかも、SKKサーバーとしてlocalhost:55100として追加すると入力時に固まって数十秒後に動きだしたりししたので1、一度アンインストールgem uninstall google-ime-skkする。

すると、RustでGoogle IME skkserv を作った - TSUGULOGというRust製google-ime-serverがあることを知るので、こちらに乗り替え。

sudo apt install cargo
git clone https://github.com/yoshitsugu/google-ime-skkserv-rs.git
cd google-ime-skkserv-rs
cargo install

で、~/.cargo/bin/gskkservで起動できる。google-skk-serverである程度変換できるならば、辞書をUTF-8で保存できるfcitx-skkに拘る必要ないと思い、uimに変えようかと…

しかし、 ~/.pam_environment

XMODIFIERS DEFAULT=@im=uim
GTK_IM_MODULE DEFAULT=uim
QT_IM_MODULE DEFAULT=uim

として、im-configuimにコマンド、もしくはGUIで変更しても、うまく行かない…もうメンドウになり、だったらibusに。

で、以前はskkにしたらキーボードも日本語キーボード配列になってしまったのだけど、ならない…あれ、勘違いだったのかな…

ならよし、でもそれと別に、"ひむろきょうすけ"と打ったときに"氷室"、"ふかだきょうこ"だと"深田"と姓しか変換されない。

Rust製でないRuby製再度チャレンジ、今度は上手く行く(Why?)。結局、"ひむろきょうすけ"と打ったときに"氷室"となるのを一度Xで削除したら、"氷室京介"と出るように…もはや、姓だけ変換されたのはRust製だからなのか、辞書設定のせいなのか分からない。

ともあれ、自動起動するアプリケーションの設定しておく。

名前 コマンド
google-ime-skk /home/arimasou16/.rbenv/versions/2.5.0/bin/google-ime-skk

これでめでたしめでたしと行きたいが、vimで日本語モードのskkしかないので、コマンドモードにしても英数入力状態にならない…ではと、入力ソースに 英語(US)を追加する。そして、

fuenor/im_control.vimで制御しようとする。

let IM_CtrlMode = 1
"「日本語入力固定モード」切替キー
inoremap <silent> <C-j> <C-r>=IMState('FixMode')<CR>
function! IMCtrl(cmd)
  let cmd = a:cmd
  if cmd == 'On'
    let res = system('ibus engine "xkb:us::eng"')
  elseif cmd == 'Off'
    let res = system('ibus engine "xkb:jp::jpn"')
  endif
  return ''
endfunction

とすると、キーボード配列が日本語となる上にCtrl+jまでが上書きされる(そりゃ、そうだ)。入力ソースから 英語(US)を削除する。Ctrl+jは上書きしないようにして、

function! IMCtrl(cmd)
  let cmd = a:cmd
  if cmd == 'On'
    let res = system('ibus engine "xkb:us::eng"')
  elseif cmd == 'Off'
    let res = system('ibus engine "skk"')
  endif
  return ''
endfunction

とだけする。すると、コマンドモードの時、英数入力モードになってキーボード配列もそのまま。eskk.vimを使わなくなっちゃうけど、これでいいや。


  1. 一度ログアウトすると直る?

Comments