twitterよりちょっと長いの

せっかくだから書き残すよ。

Arch Linuxにemacs-mozcをインストールした話

Arch Linuxでfcitx-mozcとemacs-mozcのインストールを図る。
インストールのときにconflictするので、PKGBUILDを編集することでconflictを解消してインストールした。編集の仕方については自信がないし、そもそももっとスマートな方法があるかもしれない。
f:id:AIN0204:20160812234255p:plain

emacs-mozcを導入したい

emacsで日本語を入力をしようと思うとmozc-emacsを導入する必要がある。mozc.elはpackage.el経由で入れることはできるが、"Communication error with the helper process"とエラーが出て動かない。おそらく、mozc本体やmozc_emacs_helperが無いのが問題だろう。

そのため、私は昔からemacs-mozcはOSごとのパッケージマネージャ経由で導入していた。今回もパッケージマネージャ経由で導入する。

Ubuntuなどではemacs用のmozcパッケージが用意されており、"apt-get install emacs-mozc"てな具合で導入できる。無論、Archでも同様にパッケージマネージャでemacs-mozcを導入できる。wikiに書いてあるようにAURのmozcをインストールする際にPKGBUILDを編集し、ファイル冒頭のemacs-mozcの項目のコメントアウトを外すことでインストールできる。(非公式ユーザーリポジトリを追加する方法もある)

fcitx-mozcとmozcがconflictする

本来、楽々インストールできるのだが、IMにfcitx-mozcを使っている場合は問題が起きる。fcitx-mozcとmozcがconflictするのだ。どうやら、色々問題があるらしい。

mozcを使えるIMは他にもuimなどがあるので、これを機にそちらに乗り換えるのもアリだ。そちらはmozcのパッケージとconflictしない。*1

ただ、今回は依存関係をなんとか解決してfcitx-mozcとemacs-mozcの共存を図る。

conflictの解消を図る

fcitx-mozcとemacs-mozcのそれぞれのパッケージ情報を調べてみると以下のことがわかる

  • emacs-mozcのdependsの項にmozcがある
  • fcitx-mozcのconflictsの項にmozcがある

以上から依存関係は図に示すと以下のような形だ。
f:id:AIN0204:20160812230750j:plain

yaourtでmozcをインストールするので、インストール前にPKGBUILDを編集することができる。ここで依存関係など諸々を書き換えてconflictしないようにする。変更する項目は以下の通りだ。

## If you will be using mozc.el on Emacs, uncomment below.
_emacs_mozc="yes"
## If you will not be using ibus (only use uim), comment out below.
#_ibus_mozc="yes"
  • fcitx-mozcのconfrictsの項目に引っかからないようにmozcのパッケージ名を別の名前に変更する
pkgbase=mozc
pkgname=my-mozc # mozc -> my-mozc
true && pkgname=('my-mozc') # mozc -> my-mozc
package_my-mozc() { # mozc -> my-mozc
  ...
}
  • インストール済みのfcitx-mozcでmozc-serverは動いているのでmozc自体はインストールしない
package_my-mozc() {
  pkgdesc="dummy: A Japanese Input Method for Chromium OS, Windows, Mac and Linux (the Open Source Edition of Google Japanese Input)"
  arch=('i686' 'x86_64')
  groups=('mozc-im')
 #
  # del
  #
  optdepends=('tegaki-models-zinnia-japanese: hand-writing recognition support')
  #
  # del
  #
}
  • emacs-mozcのdependsの項目からmozcを消す。
package_emacs-mozc() {
  pkgdesc="Mozc for Emacs"
  arch=('i686' 'x86_64')
  groups=('mozc-im')
  depends=('emacs') # del "mozc=${pkgver}" 
  replaces=('emacs-mozc-bin')
  conflicts=('emacs-mozc-bin')

編集後、インストールを進める。なんとかemacs-mozcも動き、めでたしめでたし。

反省とか

mozcの中身をごっそり消しちゃったり、依存環境も消しちゃったり。なんだかすごく力技で乗り切った気がする。PKGBUILDの書き方としてあんまりよくない書き方をしているかもしれないし、もっとスマートな解決方法があるかもしれない。そのへん指摘してもらえるとありがたい。

*1:一度、uim-mozcに乗り換えたのだが、変換候補が次の候補ページに移るまで表示されない問題にぶち当たり、fcitxに戻した。