fcitx-mozc 候補ウィンドウの表示を変更

fcitx-mozc で日本語変換していますが、候補ウィンドウが色々と気に入りません。そこで、以下のように改造してみました。

fcitx-mozc-simple

候補番号、候補、補足を分離して表示します。
入力変換中のテキストの左端と候補の左端が揃うように候補ウィンドウが表示されます。無駄に追加されていた入力テキストとウィンドウの縦方向の間隔は削除しました。
候補番号に背景色を追加して境目をわかりやすくしました。また、確認する必要があまりない候補数は右下に移動してあります。

Fcitx はアドオン制を採用しており、Fcitx - mozc 間は Mozc アドオン(fcitx-mozc)が担当しています。候補ウィンドウは Classic アドオン(fcitx-classic-ui)が担当しています。
同じ機能を提供するアドオンを作成してインストールすると機能を置き換えることができます。今回は既存のアドオンを元に作成しました。

Mozc 専用です。他の変換エンジンの結果はうまく表示されません、たぶん。

ファイル

deb パッケージやパッチが含まれています。

変更点

  • 候補ウィンドウは縦型のみ実装済
  • サジェストウィンドウに「Tabで選択」メッセージを表示しない
  • 候補ウィンドウのデザインを変更
  • 入力中の文字と候補ウィンドウの候補の位置調整
  • X11 メニューのハイライト位置とカーソルの反応範囲を調整
  • X11 メニューのマーク位置を調整
  • gtkフロントエンド時などに表示されるトレイアイコンを小さめに変更(モード変更時にパネルの項目が動くのを防止)

gtkフロントエンド経由などで表示されているメニューへの影響はありません。

候補ウィンドウに表示される項目の色は、スキンのフォント設定で変更できます。

  • 候補番号、候補、候補数情報: 他の色
  • 候補番号の背景色: 候補インデックスの色
  • 選択項目の背景色: 入力メッセージの色
  • 候補の補足: ユーザーフレーズの色
  • 候補ウィンドウの垂直位置: 入力バーのスキン - 位置あるいはプレエディットのオフセット
  • マウスカーソルによるハイライト項目: 入力バーのスキン - カーソルの色

お勧めのスキン設定

  • 入力バーのスキン、左右マージン: 1、上下マージン: 2 (1 にすると変な影が上下に表示される)

使い方

  1. fcitx-mozc_VERSION-_.deb および fcitx-ui-mozc-simple_VERSION-_.deb パッケージをインストール
  2. skin ディレクトリの中身を ~/.config/fcitx/skin にコピー
  3. Fcitx を再起動
  4. Fcitx - 設定 - アドオン
  5. 拡張にチェックを入れる
  6. Mozc と Classic (クラッシック)、kimpanel のチェックを外す
  7. Mozc2 と MozcSimple のチェックを入れる
  8. 設定ウィンドウを閉じる
  9. Fcitx を再起動
  10. スキンを変更

設定の入力メソッドタブに Mozc2 が表示されていて、入力等で表示が正しければうまくインストールできています。
デフォルトの fcitx-mozc と fcitx-ui-classic に含まれているファイルが必要です。削除しないでください。

戻し方

  1. スキンを元に戻す
  2. Fcitx - 設定 - アドオン
  3. 拡張にチェックを入れる
  4. Mozc2 と MozcSimple のチェックを外す
  5. Mozc と Classic (クラッシック)、kimpanel のチェックを入れる
  6. 設定ウィンドウを閉じる
  7. ~/.config/fcitx/skin の不要なファイルを削除
  8. Fcitx を再起動

バグ

  • マウスカーソルを候補ウィンドウ上で動かしてもハイライトされない(選択は動作します)
    • 問題は UINewMessageToOldStyleMessage 中の msgAuxUp または msgPreedit 辺り?

ビルド方法

自分でパッケージを作成する方向けの方法を説明します。提供されていないバージョン向けのパッケージ作成などに参考にしてください。
パッチファイルはパッケージ作成用の debian/ ディレクトリ向け(foo_debian.patch)と本体変更(foo_data.patch)に分けてあります。

fcitx-mozc-simple パッケージは以下のように作成します。

# ソースの取得
mkdir build
cd build
apt-get source mozc

# 依存パッケージのインストール
sudo apt-get install build-essential
sudo apt-get build-dep mozc

# パッチ適用
cd mozc-2.17.2116.102+...
patch -p1 < fcitx-mozc-simple/ubuntu_16.04.2/mozc_debian.patch
patch -p1 < fcitx-mozc-simple/ubuntu_16.04.2/mozc_data.patch

# パッケージのビルド
dpkg-buildpackage -b -uc

# パッケージのインストール
#sudo dpkg -i fcitx-mozc-simple_...deb
# パッケージの削除
#sudo dpkg -r fcitx-mozc-simple

コンパイルするファイル数を減らすために色々削っています。mozc_debian.patch を当てたあとの rule ファイルで構築したパッケージのうち fcitx-mozc-simple 以外は使用しないでください。

fcitx-ui-mozc-simple パッケージは以下のように作成します。

# ソースの取得
mkdir build
cd build
apt-get source fcitx

# 依存パッケージのインストール
sudo apt-get install build-essential
sudo apt-get build-dep fcitx

# パッチ適用
cd fcitx-...
patch -p1 < fcitx-mozc-simple/ubuntu_16.04.2/fcitx_debian.patch
patch -p1 < fcitx-mozc-simple/ubuntu_16.04.2/fcitx_data.patch

# パッケージのビルド
dpkg-buildpackage -b -uc

# パッケージのインストール
#sudo dpkg -i fcitx-ui-mozc-simple_...deb
# パッケージの削除
#sudo dpkg -r fcitx-ui-mozc-simple

メモ

開発中は fcitx を端末から以下のように実行すると、実行中の fcitx インスタンスを置き換える形で起動します。-D オプションでデーモン化を避けてやると、アドオンモジュールの読み込み失敗などのエラーメッセージを確認しやすくて便利です。

fcitx -D -r