システムに物理キーボードが接続されていない場合、そのウィンドウシステムは、「仮想キーボード」として広く知られる画面上のキーボードを提供することがあります。これには、実際のキーボードと同様にアプリケーションへキーボード入力を送信する、クリック可能なボタンが行状に配置されています。
この仮想キーボードは、フォーカスされているプログラムがテキスト入力を要求していないときは非表示となります。画面上の限られたスペースを占有するためであり、したがってプログラムは、キーボード入力を受け付ける準備が整った時点でこれを表示することが義務付けられています。Xを搭載しているシステムでは、仮想キーボードの表示が必要なタイミングを検知しますが、Androidなどの他のシステムでは、通常、タッチスクリーンの「タップ」操作(タッチスクリーンでのEmacsの使用を参照)や、ミニバッファが利用可能になった際(ミニバッファを参照)に反応して、Emacsが必要に応じて表示を行います。
「タップ」操作によってコマンドが実行される際、Emacsはリスト touch-screen-set-point-commands
の中からそのコマンドを検索し、ポイントを設定することを目的としたものかどうかを確認します。該当するコマンドであり、かつ新しいポイントより下のテキストが読み取り専用でない場合は、ユーザー入力に備えて仮想キーボードが有効化されます。
touch-screen-set-point-commands のデフォルト値にはコマンド
mouse-set-point(編集用マウスコマンドを参照)のみが割り当てられており、これは mouse-1
のデフォルトバインディングであり、したがってタッチスクリーンのタップジェスチャーのデフォルトバインディングでもあります。
ユーザーオプション touch-screen-display-keyboard
を指定すると、テキストが読み取り専用であっても、すべてのタップジェスチャで Emacs
が仮想キーボードを表示するようになります。また、バッファ単位で設定することも可能で、その場合は、そのバッファが表示されているウィンドウ上でタップが行われるたびに、Emacs
は常にキーボードを表示します。
さらに、画面上のキーボードを表示または非表示にする関数がいくつか用意されています。詳細については、The Emacs Lisp Reference Manualの画面上のキーボードを参照してください。
Emacsがコマンドを実行している間に仮想キーボードを表示できない場合があるため、物理的なキーボードを備えていないことが多いウィンドウシステムにおいて、デバイスに常に搭載されているハードウェアボタンを2回素早くクリックすることで終了させる機能を実装しています。終了と中断を参照してください。
Xではそのようなボタンは有効になっていませんが、変数 x-quit-keysym
で設定可能です。一方、デフォルトのキーはAndroidの音量ダウンボタンであり、こちらも変数 android-quit-keycode で設定できます。
仮想キーボード向けに設計された入力メソッドの多くは、デスクトップ向けの入力メソッドとはテキストの編集方法が異なります。
従来のデスクトップウィンドウシステムでは、入力メソッドは単に進行中の文字入力内容を画面に表示し、ユーザーによって確定された後、その内容を反映したキーイベントをEmacsに送信します。
これに対し、仮想キーボードによる入力方式では、各フレームの選択されたウィンドウに対して直接編集が行われます。これは「テキスト変換」、あるいはX Window Systemでは「文字列変換」と呼ばれます。
Emacsでは、バッファローカル値 text-conversion-style が nil 以外である場合、すなわち一般的に text-mode
や prog-mode の派生内において、これらの入力メソッドが利用可能になります。
テキスト変換は、Emacsが入力メソッドから変換のリクエストを受信し、かつ既にいずれかのプレフィックスキーが読み取られたキーシーケンスを現在読み取っていない場合に、非同期で実行されます(Keysを参照)。変換が完了すると、text-conversionイベントが送信されます。EmacsリファレンスマニュアルのMisc
Eventsを参照してください。
入力メソッドがバッファの特定領域で動作する必要がある場合、その領域は「合成領域」(または「事前変換領域」)として指定されます。変数 text-conversion-face
は、合成領域を専用のフェイスで表示するかどうか、および表示する場合にどのフェイスを使用するかを制御します。