物理的なキーボードが接続されていないシステムでは、そのウィンドウシステムがオンスクリーンキーボード(“仮想キーボード: virtual keyboard” として広く知られている)を提供しているかもしれません。これは何列かに並んだクリック可能なボタンをもち、キーボード入力を実際のキーボードと同じようにアプリケーションに送信するキーボードです。
フォーカスのあるアプリケーションがテキスト入力をリクエストしていないときは、ディスプレイ上で少しの領域しか専有しないように仮想キーボードを非表示にします。Xを実行するシステムでは仮想キーボードの表示は保証されていますが、Android Emacsのように他のシステムでは必要になったとき(一般的にはタッチスクリーンへの“タップ”ジェスチャーへの反応として; Emacsでのタッチスクリーンの使用を参照)、あるいはミニバッファー(ミニバッファーを参照)を使用する際の仮想キーボードの表示はAndroid Emacsの役目です。
“タップ”ジェスチャーによってあるコマンドが実行されると、Emacsはリストtouch-screen-set-point-commands
を検索して、それがポイントのセットを意図したコマンドなのかどうかチェックします。もし意図したコマンドであれば、新たなポイントの下にあるテキストが読み取り専用でなければ仮想キーボードをアクティブして、アプリケーションのユーザーがそこで入力できるようになるのです。
touch-screen-set-point-commands
のデフォルト値には、コマンドmouse-set-point
(編集のためのマウスコマンドを参照)だけがセットされています。mouse-1
はデフォルトでtouch-screen-set-point-commands
にバインドされており、同じようにタッチスクリーンのタップジェスチャーもバインドされています。
ユーザーオプションtouch-screen-display-keyboard
はたとえテキストが読み取り専用であっても、すべてのタップジェスチャーにたいして仮想キーボードの表示を強制します。これはバッファーローカルにセットすることもできます。この場合にはセットされたバッファーを表示しているウィンドウへのタップの反応として、Emacsは常にキーボードを表示します。
オンスクリーンキーボードの表示や非表示を行う関数は他にもいくつかあります。詳細についてはOn-Screen Keyboards in The Emacs Lisp Reference Manualを参照してください。
コマンドの実行中にEmacsが仮想キーボードを表示できない可能性があるため、物理的キーボードを備えていない場合が多いウィンドウシステムでは、デバイスに常に存在するハードウェアボタンを素早く2回クリックしてquit(閉じる、終了)する機能を実装しています。中止と中断を参照してください。
Xではこのようなボタンは有効ではありませんが変数x-quit-keysym
を通じて設定できます。Androidのデフォルトのキーはボリュームダウンボタンですが、これも変数android-quit-keycode
を通じて設定できます。
仮想キーボードで動作するようにデザインされた入力メソッドのほとんどは、デスクトップの入力メソッドとは異なる方法でテキストを編集します。
デスクトップの伝統的なウィンドウシステムでは、入力メソッドは進行中の文字合成の内容をスクリーン上に単に表示して、ユーザーの確認後にその内容を反映するイベントを送信します。
対照的に仮想キーボードの入力メソッドは、それぞれのフレームの選択されたウィンドウにたいして編集を直接実行します。これはXウィンドウシステムでは“テキスト変換(text conversion)”あるいは“文字列変換(string conversion)”と呼ばれる方法です。
Emacsはバッファーローカル変数text-conversion-style
が非nil
のとき、つまり一般的にはtext-mode
およびprog-mode
の派生モードの内部では、これらの入力メソッドを有効にします。
Emacsは入力メソッドから処理の要求を受信すると、常に非同期でテキスト変換を実行します。現在のところすでにプレフィクスキーが読み取られたキーシーケンス(キーを参照)は読み取りません。変換が完了した後はtext-conversion
イベントが送信されます。Misc
Events in the Emacs Reference Manualを参照してください。
バッファーのリージョンにたいして入力メソッドが処理を必要とする場合には、その領域は“構成リージョン(composing
region)”、または“変換前リージョン(preconversion
region)”と指定されます。変数text-conversion-face
は構成リージョンを特定のフェイスで表示するか、表示する場合にはどのフェイスを用いるかを制御します。