ibus.el

ibus.el

これは何?

Emacsで、日本語や中国語などの文字列をIBusを経由して入力するためのマイナーモード(ibus-mode)です。
IBusのクライアントとして動作します。

GNU Emacs 22, 23, 24用です。XEmacsでは無理だと思います。

質問・ツッコミはこちらのTwitterアカウントへお願いします→@iRi_E
バグ報告はLaunchpadでお願いします(英語)→https://bugs.launchpad.net/ibus.el

このWikiやはてなダイアリーにコメントを書かれても見落とす可能性が大きいので、申し訳ありませんが上記のどちらかにして下さい。

特徴

IBusの提供する機能はほとんど使えます。一般的なEmacs用のInput Methodとは異なり、Emacsの起動時にマイナーモードをONにして使うことを想定しています。
  • できること
    • バッファ毎に入力モードの切り替えができます。
    • C-SPCとかC-/をIBusに渡さないように設定できます。
    • かな入力方式、親指シフト入力方式に対応した(つもり)。
    • IBusのon/off状態によってカーソルの色を変えられます。
    • インクリメンタル検索(isearch-mode)で使用できます。
  • できないこと
    • 端末エミュレータ上では使えません。
    • モディファイアキー(shiftやcontrol)単独の押下は検出できません。

最新情報

ibus.el Version 0.3. をリリースしました。 (2012.02.29)

Version 0.3.1からの変更点
  • オプション `ibus-agent-search-paths' を追加(ibus.el をロードした後に ibus-el-agnet を別のディレクトリに移動すると自動的に見つけられなくなる、という問題を修正するため)
  • 特定の環境で、Xlib のエラーメッセージ(BadWindow)が時々表示される問題を修正(LP #932517)
  • ibus-daemon を自動起動する場合のコマンドラインオプションを、 XIMサーバーを一緒に起動するように変更 ("-d" → "-dx")

ダウンロードとインストール


手動でインストールする場合

まず、以下のファイルをダウンロードします。

ibus-el-0.3.2.tar.gz(ftpダウンロードはここからどうぞ。)

ダウンロードしたファイルを展開し、ibus.elをEmacsのロードパスの通ったディレクトリに保存してバイトコンパイルします。ibus-el-agentも適当なディレクトリに保存します(ibus.elと同じディレクトリか、/usr/lib/ibus-el, /usr/share/ibus-elなどに入れると、ibus.elのロード時に勝手に見付けてくれます)。

md5sumやGnuPGの署名を検証したい方はLaunchpad内のダウンロードページをご利用ください。

debパッケージを利用する場合

debパッケージはLaunchpadのPPAに置いてあります。
Ubuntuの場合、以下のコマンドを実行してください。
sudo add-apt-repository ppa:irie/elisp
sudo apt-get update
sudo apt-get install ibus-el
なお、Precise, Oneiric, Natty, Maverick, Lucidのパッケージに違いはありません。

使い方

目次



基本の設定


ibus.el をEmacsのロードパスの通ったディレクトリに保存し、バイトコンパイルします。DebianやUbuntuの場合はdebパッケージを利用するといいでしょう。

.emacsファイルに以下の内容を追加します。
(require 'ibus)
(add-hook 'after-init-hook 'ibus-mode-on)

ibus-modeを有効にするには、XIMを無効化してキーイベントを横取りされないようにする必要があります。ターミナルから以下のようにEmacsを起動します。
XMODIFIERS=@im=none emacs

Emacs利用時に常にXIMを無効にしたい場合は、上記の方法よりもXリソースを設定する方がよいでしょう。ホームディレクトリの.Xresourcesファイルに
Emacs*useXIM: false
という行を追加し、ターミナルからコマンド
xrdb ~/.Xresources
を実行するか、一旦ログアウトしてXサーバを再起動した後、Emacsを起動します。

いろいろな設定


.emacsファイルのibus.elを読み込んだ後の部分に、その他の設定を書きます。
(require 'ibus)
(add-hook 'after-init-hook 'ibus-mode-on)

ここに設定を書く

.emacsファイルの設定例です。
(require 'ibus)
(add-hook 'after-init-hook 'ibus-mode-on)

;; C-SPC は Set Mark に使う
(ibus-define-common-key ?\C-\s nil)
;; C-/ は Undo に使う
(ibus-define-common-key ?\C-/ nil)
;; IBusの状態によってカーソル色を変化させる
(setq ibus-cursor-color '("red" "blue" "limegreen"))
;; C-j で半角英数モードをトグルする
(ibus-define-common-key ?\C-j t)

なお、ほとんどの設定はGUI(custom-mode)で行うこともできす。キーボードから M-x customize-group RET ibus RET と入力するか、GUI で Emacs Group > Editing Group > Ibus Group と辿って開始して下さい。

入力モードの切り換え方法

デフォルトではバッファ毎にインプットメソッドの状態を保持します。すべてのバッファで入力状態を共有したい場合は、次のように設定してください。
(setq ibus-mode-local nil)

キーバインドの設定

  • C-SPC は Set Mark に使う
(ibus-define-common-key ?\C-\  nil)
  • C-/ は Undo に使う
(ibus-define-common-key ?\C-/ nil)

上の2つは1行にまとめることができます。
(ibus-define-common-key [?\C-\  ?\C-/]  nil)

逆に、IBusに渡すキーイベントを追加するには、第2引数を非nilにします。
  • C-henkan をIBusで使用する
(ibus-define-common-key 'C-henkan t)

プリエディット時にだけIBusに送るキーイベントを変更するには関数ibus-define-preedit-keyを使います。
  • プリエディット時のみ C-henkan をIBusで使用する
(ibus-define-preedit-key 'C-henkan t)

補足:EmacsはキーボードにMetaキーがない場合、AltキーをMetaキーと見なしますが、ibus-modeの設定では実際のキー名で指定します。例えば、Alt + 漢字 は、Emacsのキーイベントとしては M-zenkaku-hankaku になりますが、IBusの設定と同じくAltを使って A-kanji と指定します。

かな入力方式・親指シフト入力を使うための設定

  • かな入力方式で「ー」(長音記号)を入力できるようにする(jp-106キーボードのみ)
デフォルト状態では、バックスラッシュキー(\)と円記号キー(¥)を区別できないため、かな入力方式で「ー」を入力するにはシフトキーを押さなければなりません。シフトキーを押さずに入力できるようにするには、次のように記述します。
(setq ibus-use-kana-onbiki-key t)
この設定により、入力フォーカスがEmacsにあるときにだけ一時的にxmodmapで代替のKeySymを割り当てています。デフォルトでは代替のKeySymとして"F24"を使います。

"F24"のような代替のKeysymを使わずに、IBusがオンの時に円記号キー(¥)を縦棒(|)に置き換えるようにする場合は、さらに次の行を追加します。
(setq ibus-kana-onbiki-x-keysym "bar"
      ibus-kana-onbiki-key-symbol nil)

  • 親指シフト方式を使う場合の同時打鍵判定時間(単位は秒)
同時打鍵判定はEmacs側で独自に行います。0.1〜0.2秒程度に設定します。
(setq ibus-simultaneous-pressing-time 0.1)
判定方法の都合上、IBusがオンの時に、単独打鍵に対してこの時間だけ文字の出るタイミングが遅れますので、あまり大きな値を設定しない方が良いです。特に、ローマ字入力やかな入力しか使わない場合は、nil(デフォルト値)にしておいてください。

カーソルの色・形状・表示位置の設定

  • 変換候補表示中のカーソルの位置および形状を変える
(setq ibus-cursor-color "red")
これで、IBusがオンの時にカーソル色が赤になります。オフ時のカーソル色も指定したい場合はコンスセルで指定します。例えば
(setq ibus-cursor-color '("red" . "blue"))
とすると、オンで赤、オフで青になります。更に、IBusが無効化された状態(バッファがread onlyの時や、viシミュレータ(viper-modeなど)におけるvi状態の時など)でカーソル色を変えたい場合は、リストで指定します。
無効化時にカーソル色を文字のforeground colorと同色にする場合:
(setq ibus-cursor-color '("red" "blue"))
無効化時にカーソル色を緑(limegreen)にする場合:
(setq ibus-cursor-color '("red" "blue" "limegreen"))

  • 変換候補表示中のカーソルの位置および形状を変える
デフォルトの状態では、変換候補表示中のカーソルの形状は縦棒になります。変換候補表示にカーソルを通常の形状でプリエディット領域の末尾に表示したい場合、次のように設定します。
(setq ibus-cursor-type-for-candidate 0)
(setq ibus-put-cursor-on-candidate nil)

  • インクリメンタル検索中のカーソル形状を変更する
インクリメンタル検索(isearch-mode)から抜けてテキストの編集を再開しようとした時に、実はまだisearch-modeから抜けていなくて余計な検索をしてしまう、ということがあります。検索中にカーソル形状が変わるようにすれば、このような失敗を防げます。例えば
(setq ibus-isearch-cursor-type 'hollow)
とすると、検索中は塗りつぶされていない箱型のカーソルになります。(このオプションはインプットメソッドとは直接関係はありません。)

アンドゥの挙動を変える設定

  • アンドゥの時に、文字列を確定した位置ごとに戻るようにする
デフォルトでは、アンドゥは20カラムごとに行われるようになっています。文節単位で確定するような使い方をする場合、確定した位置まで戻るようにする方が便利でしょう。
(setq ibus-undo-by-committed-string t)
ただし、ibus-skkの直接入力などの、1文字ずつコミットしていくタイプのインプットメソッドでは1文字ずつアンドゥするようになってしまいます。

候補ウインドウの位置を調整する設定

標準の状態では、変換候補ウインドウ内の候補の文字列がカーソル位置よりもかなり右方向に離れて表示されて少し見づらいですね。オプション `ibus-candidate-window-h-offset' と `ibus-prediction-window-h-offset' で、候補ウインドウの表示位置を水平方向にピクセル単位で調節することができます。

;; 候補ウインドウを左へ57ピクセルずらして表示
(setq ibus-candidate-window-h-offset -57)

;; 予測ウインドウを左へ50ピクセルずらして表示
(setq ibus-prediction-window-h-offset -50)

その他の設定


以下の設定はGUIではできません。.emacsファイルに記述するか、M-xをタイプしてミニバッファで入力してください。

  • ibus-modeのキーマップを一時的に無効にする
ibus-modeと相性の悪いメジャーモードやマイナーモードがある場合は、次のようにしてibus-modeのキーマップを無効化すると良いかもしれません。
M-x ibus-disable-keymap
元に戻す場合は、
M-x ibus-enable-keymap
特定のメジャーモードでibus-modeのキーマップを無効にする場合には.emacsファイルに次のように記述します(例:hoge-mode)。
(add-to-list 'ibus-incompatible-major-modes 'hoge-mode)

インプットメソッド別の設定


使用するインプットメソッドによっては、追加の設定が必要な場合があります。

ibus-anthy


かな入力と親指シフト入力に関しては、上述の通りです。

  • 半角英数モードをトグルするために C-j を使う
(ibus-define-common-key ?\C-j t)

ibus-skk


  • C-jでひらがなモードに戻せるようにする
(ibus-define-common-key ?\C-j t)

ibus-mozc


かな入力に関しては、上述の通りです。

  • 予測候補ウィンドウの表示位置の変更
デフォルトでは、予測候補ウィンドウをプリエディット領域の先頭位置に表示します。この挙動は他のアプリケーションで ibus-mozc を使う場合と異なっていますが、ウィンドウが移動しないので速度的には有利です。ただし、画面下方ではこのウィンドウによってプリエディット領域が覆い隠されてしまうことがあります。他のアプリケーションと同様にカーソル位置で予測候補ウィンドウを表示するには以下のようにします。
(setq ibus-prediction-window-position t)

更新履歴


2012.02.29 version 0.3.2
  • オプション `ibus-agent-search-paths' を追加(ibus.el をロードした後に ibus-el-agnet を別のディレクトリに移動すると自動的に見つけられなくなる、という問題を修正するため)
  • 特定の環境で、Xlib のエラーメッセージ(BadWindow)が時々表示される問題を修正(LP #932517)
  • ibus-daemon を自動起動する場合のコマンドラインオプションを、 XIMサーバーを一緒に起動するように変更 ("-d" → "-dx")

2012.02.14 version 0.3.1
  • surrounding text をサポートしない古いバージョンの IBus (< 1.4.0) でエラーが発生する不具合を修正 (LP #930015)
  • 新しく生成されたバッファが IBus daemon から IMContext ID を受け取る前に削除された場合に、ibus-mode が異常終了する不具合を修正 (LP #930820)
  • 同期通信において、タイムアウト前に "Couldn't receive data from agent." という不適当なエラーメッセージが表示されるのを修正
  • IBus にハンドルされないキーイベントに対して前置引数が効かない不具合を修正
  • 複数ストロークのキーシーケンスに対するエコー領域の表示を修正
  • IBus にハンドルされないキーイベントに対して Emacs のコマンドをの fallback として事項する時、キーイベントのキューに入れずに直接実行するように変更(C-x 等の前置キーイベントを除く)
  • README.Debian ファイルを削除 (Debian #648596)

2011.12.24 version 0.3.0
  • surrounding text に対応
  • オプション `ibus-candidate-window-h-offset' を追加
  • オプション `ibus-prediction-window-h-offset' を追加
  • コマンド `ibus-enable-specified-engine' を追加
  • IBus のバージョン 1.3.8 以降で、ibus-prediction-window-position=0 の設定がミニバッファ内でも有効になるように変更
  • 太さ 0 のアンダーラインを表示するように変更
  • `table-insert'で作成した表が、プリエディットが異常終了した場合に壊れる可能性がある問題を修正
  • m17n 等のいくつかのエンジンでプリエディットが異常終了してしまう事がある問題を修正
  • Ubuntu の Unity desktop 上で、get_input_focus() がしばしば誤ってルートウィンドウを返すために入力フォーカスが検出できない問題を修正
  • auto-fill-mode が動作しない不具合を修正 (LP #784452)
  • StumpWM で入力フォーカスの状態が正常に取得できない不具合を修正 (LP #856358)

2010.11.03 version 0.2.1
  • vim-modeのサポートを追加
  • `ibus-agent-file-name' の検索パスにlibexecディレクトリを追加
  • 半角英数モードにおいてキーイベントに対する元々の動作をシミュレートするために、fallbackのコマンドを実行するように変更(IBus issue #1058)
  • オプション `ibus-kana-onbiki-x-keysym' および `ibus-kana-onbiki-key-symbol' を無効にできるように、カスタマイズ型を修正
  • カーソル色をリセットするときに、テーマの色を考慮するように修正
  • 非Xフレームに対して不必要にカーソル色をセットしないように修正
  • コマンド実行中に不必要にカレントバッファをチェックしないように修正
  • 非XフレームからXフレームに切り替えるとキーマップが更新されない場合がある不具合を修正
  • モニターの電源が省電力機能で自動的に切れると、ibus-modeが異常終了する不具合を修正
  • 複数フレームの1つでemacs−w3mを起動すると、他のバッファのうちの1つでキーマップが無効化されてしまう不具合を修正
  • ibus-mode開始時またはディスプレイ切替時に、ibus-el-agentがXのディスプレイへの接続に失敗してクラッシュする場合がある問題を修正したかも(RH bug #627358)

2010.08.19 version 0.2.0
  • `ibus' グループの親グループに `i18n' を追加
  • オプション `ibus-agent-start-ibus-daemon' を追加
  • デフォルトではibus-daemonを自動的に起動しないように変更 (RH bug #620349)
  • xwininfoを使わないように変更
  • Xのルートウインドウの「_NET_ACTIVE_WINDOW」プロパティを使わないように変更
  • 複数ディスプレイ環境で複数の異なるレイアウトのキーボードを使う場合でも、Alt-Meta間の変換が正常に動作するように修正
  • カスタム変数の説明文字列を書き直した
  • 内部的なオプションibus-meta-key-existsを削除
  • keyvalが非アルファベットのASCII文字の場合に、Shiftキーが無視される不具合を修正
  • isearch-modeでibus-toggleコマンドを使うとミニバッファが消去されてしまう不具合を修正
  • isearch-mode-mapにおいて C-\ がibus-toggleコマンドに割付けられ、かつ `ibus-use-kana-onbiki-key' が非nilの場合に、Xのキーマップが正常に書き換えられない不具合を修正
  • 他のアプリケーションからフォーカスインした後、最大約0.3秒間キーマップが無効になっている不具合を修正
  • キーボードにMetaキーが有る場合に、Alt + Romajiが無視される不具合を修正
  • キーボードにMetaキーが有る場合に、forward_key_eventがRomajiキーをHiragana_Katakanaキーに誤変換する不具合を修正
  • 複数ディスプレイ環境でibus-el-agentがインデックスエラー(list index out of range)を発生することがある問題を修正
  • ibus-modeが異常終了した後にpost-command-hookが実行される可能性がある不具合を修正
  • インクリメンタル検索時に `english-dvorak' インプットメソッドとIBusを併用できない不具合を修正
  • ヘッダーラインが表示されている時にtext-scale-modeをオフにすると、行の高さとして誤った値が使われる不具合を修正
  • インクリメンタル検索にIBusを使うと、時々 "<ibus-resume-preedit> is undefined" というエラーが出る不具合を修正
  • インクリメンタル検索にIBusを使うと、時々誤ってプリエディット文字列がカレントバッファに挿入されてしまう不具合を修正

2010.06.11 version 0.1.1
  • オプション `ibus-prediction-window-position' を追加
  • オプション `ibus-agent-buffering-time' を追加
  • Key release イベントをエージェントに送る必要がないように変更
  • カーソル位置が変化しなかった場合に座標をエージェントに送信しないように変更
  • プリエディットが空の場合に不必要な空文字列をEmacsが受け取らないように変更
  • 不必要になっていたイベント `ibus-dummy-event' を使わないように変更
  • 文字列確定の直後にカーソル位置を送信しないようにした
  • ibus-anthy の「フォーカスアウト時の動作」を「保持」 に設定している場合に、正常動作するようにした
  • 同一のバッファを表示している別フレームを選択した時に、プリエディットを再描画するようにした
  • ヘッダーライン表示時に text-scale-mode で候補ウインドウの位置がずれる不具合を修正
  • 多数のフレームを使用していると、post-command-hook が非常に重たくなる不具合を修正
  • IBus 1.3で使用すると、ibus-mode が突然 終了することがある不具合を修正
  • エージェントによるIBusデーモンの起動が失敗することがある不具合を修正

2010.05.29 version 0.1.0
  • 初公開


最終更新:2012年02月29日 23:15
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。