Next: イベントの例, Previous: Xwidgetイベント, Up: 入力イベント [Contents][Index]
他にもシステム内での出来事を表現するイベント型がいくつかあります。
text-conversion
この種のイベントは1つ以上のバッファーを処理するシステムワイドな入力メソッドの後に送出される。
一度イベントが送出されると、異なる多数のフレーム内の複数のバッファーにたいして入力メソッドがすでに変更を行っているかもしれない。どのバッファーが変更されているか、どの編集がその変更を行ったかを判断するために変数text-conversion-edits
を使用する。この変数は以下のような形式のリストであり、text-conversion
それぞれの送出に先立ちセットされる:
((buffer beg end ephemeral) ...)
ここでephemeralは変更されたバッファー、begとendはは編集完了時にマーカーがセットされた位置。ephemeralは挿入された文字列(または削除されたポイントの前にあるすべてのテキスト)、t
(その編集が入力メソッドによって一時的に行われた編集であることを意味する)、あるいはnil
(ポイントの後の一部テキストが削除されたことを意味する)のいずれか。
このイベントが送出されるかどうかはバッファーローカル変数text-conversion-style
の値次第。この変数はバッファーコンテンツを編集する入力メソッドがどのように振る舞うかを決定する。
以下の4つの値のいずれかを指定できる:
nil
入力メソッドは完全に無効になり、キーイベントはかわりにテキスト変換イベントに送出されることを意味する。
action
入力メソッドは有効になるが、入力メソッドが改行を挿入したいときは常にRETが送出されることを意味する。
password
これは大枠ではaction
と同じだが入力メソッドにたいしてASCII文字を挿入する能力も要求すること、テキストの提案等の機密情報を処理できない入力メソッドの機能によって後から取得されたかもしれない場所に入力を保存しないように指示できる点が異なる。
t
これとその他の値の場合には、入力メソッドが有効であり編集後にtext-conversion
イベントが発生することを意味する。
この変数の値の変更は、そのバッファーがフレームの選択されたバッファーになった後の再表示のときだけ効果がある。すぐに効果がある方法でテキスト変換を無効にする必要がある場合には、かわりに関数set-text-conversion-style
を呼び出すこと。これにより入力メソッドが無視できない時間ロックされる可能性があるので、慎重に使用すること。
さらにコマンドループやread-key-sequence
がプレフィクスキーを読み取った後は、テキスト変換が自動的に無効になる。これは変数disable-inhibit-text-conversion
に非nil
値をセットまたはバインドして無効にできる。
(delete-frame (frame))
このイベントの種類はユーザーがウィンドウマネージャーに特定のウィンドウを削除するコマンドを与えたことを示し、Emacsのフレームにたいして発生する。
フレーム削除(delete-frame)
イベントの標準的な定義ではframeが削除される。
(iconify-frame (frame))
このイベントの種類はウィンドウマネージャーを使用してユーザーがframeをアイコン化したことを示す。標準的な定義はignore
。これはそのフレームがすでにアイコン化されているので、Emacsが行う必要のことは何もないからである。このイベント型の目的は、望むならこのようなイベントの追跡を可能にしておくためである。
(make-frame-visible (frame))
このイベントの種類はウィンドウマネージャーを使用してユーザーがframeを非アイコン化したことを示す。標準的な定義はignore
。これは、そのフレームがすでに可視化されているので、Emacsが行う必要のことは何もないからである。
(touch-end (position))
この種のイベントはユーザーの指がマウスホイールやタッチパッドから離れたことを示す。マウス位置リストのposition要素(クリックイベントを参照)は、マウスホイールから指が離れた際のマウスカーソルの位置を指定する。
(wheel-up position clicks lines pixel-delta)
(wheel-down position clicks lines pixel-delta)
これらのイベントはマウスホイールを動かすことによって発生する。position要素はそのイベント発生時のマウスカーソル位置を指定するマウス位置リスト(クリックイベントを参照)。
clicksが与えられた場合には、ホイールが連続して素早く動いた回数を示す数値。リピートイベントを参照のこと。linesが与えられて、それがnil
でなければ、それはスクロールされるべきスクリーン行を表す正の行数である(イベントがwheel-up
ならスクロールアップ、wheel-down
ならスクロールダウン)。pixel-deltaが与えられた場合には、それが(x . y)
という形式のコンスセルであれば、xとyはそれぞれの軸方向にたいしてスクロールされたピクセル数、いわゆるピクセル単位デルタ(pixelwise
delta)である。通常だと2つのうちの一方が非0、もう一方は0もしくは0に非常に近い値となる。大きい数値はウィンドウをスクロールする軸を示します。変数mwheel-coalesce-scroll-events
がnil
の場合には、たとえ非nil
であってもスクロールコマンドはlines要素を無視pixel-deltaのデータを使用する。この場合にはイベント種別によって暗示される方向(アップかダウン)を無視して、ピクセル単位デルタの符号によりスクロール方向を判断する。
これらのピクセル単位デルタxとyを用いれば、マウスホイールがピクセル解像度で実際にどれだけ動いたかを判断できる。たとえばピクセル単位デルタを使うことによって、ユーザーが回したマウスホイールとまったく同じようにディスプレイをスクロールできるだろう。このピクセル単位のスクロールが可能なのはmwheel-coalesce-scroll-events
がnil
のときだけであり、この変数が非nil
の場合には通常はpixel-deltaデータは生成されない。
wheel-up
とwheel-down
は一部のシステムでのみ生成されるイベントである。他のシステムではかわりにmouse-4
やmouse-5
のようなイベントが用いられる。コードに可搬性をもたせる場合にはwheel-up
とwheel-down
以外にも、mwheel.elで定義されている変数mouse-wheel-up-event
とmouse-wheel-down-event
で指定されているイベントも処理できる必要がある。歴史的な理由によりmouse-wheel-up-event
はwheel-down
と同じように処理されるべきイベントを保持する変数であり、その逆についても同様であることに注意。
通常はwheel-left
とwheel-right
によって表現される水平ホイールの移動についても同じことが当てはまるが、コードに可搬性をもたせるにはmwheel.elで定義されている変数mouse-wheel-left-event
とmouse-wheel-right-event
にもしたがう必要がある。ただしこれらのスクロールイベントと同時に別のイベントをも生成するマウスもいくつかあり、邪魔をするかもしれない。この問題を解決するにはこれらのイベントにたいするバインドを削除する方法が一般的である(たとえばmouse-6
やmouse-7
等を削除するがバインドはハードウェアとオペレーティングシステムに大きく依存する)。
(pinch position dx dy scale angle)
この種のイベントはタッチパッドに指を2本置いてそれらを互いに近づけたり離したりする、“ピンチ(pinch)”というジェスチャーをユーザーが行った際に生成される。positionはイベント発生時のマウスポインターの位置を提供するマウス位置リスト(クリックイベントを参照)、dxは同一シーケンス内の最後のイベントから2本の指の間の水平距離の変分、dyは同じく垂直距離の変分、scaleはこのシーケンス開始時の2本の指の間の距離とカレント距離の比率、angleはこのイベントで指と指をつなぐ線分の方向と同一シーケンスの最後のイベントにおける同線分方向との間の角度差(degree)である。
ピンチイベントが送信されるのはピンチシーケンスの開始かその間だけであり、ユーザーがタッチパッド置いた2本の指をピンチではなく回転(rotate)させるように動かすジェスチャーは報告されない。
positionの後の引数はすべて浮動小数点数。
これはユーザーがタッチパッドに2本の指を置いたときが開始、指を離したときに終了するイベントであり、通常はあるシーケンスの一部として送信される。先頭のイベントではdx、dy、angleは0.0
になる。後続するイベントではこのイベント構造のこれらのメンバーにたいしては非0値が報告されるだろう。
dxとdyは1.0
がそれぞれタッチパッドの幅と高さに相当するような想像上の相対的単位として報告される。これらは通常はジェスチャーの下にあるイメージやウィンドウ等のオブジェクトサイズに相対的なものと解釈される。
(preedit-text arg)
これは何が挿入されるかをユーザーに示すために、システムのインプットメソッドがEmacsに何らかのテキストを表示するよう伝える際に送信されるイベント。argの内容は使用中のウィンドウシステムに依存する。
Xではargはカーソルの向こうに配置するテキストを記述する文字列。nil
なら前に表示していたすべてのテキストの削除を意味する。
PGTKフレーム(フレームを参照)では、argはカラーとアンダーラインの属性に関する情報をもつ文字列リスト。以下の形式をもつ:
((string1 (ul . underline-color) (bg . background-color) (fg . foreground-color)) (string2 (ul . underline-color) (bg . background-color) (fg . foreground-color)) … )
文字列に関するテキストを残してカラーの情報は省略可。underline-colorがt
ならテキストのアンダーラインがデフォルトのアンダーラインカラーになること、文字列ならそのカラー名によってアンダーラインが描画されることを意味する。
これは通常ならユーザーがコマンドにバインドするべきではないスペシャルイベントである(スペシャルイベントを参照)。Emacsは通常はこのイベントを受信すると、ポインター背後にあるオーバーレイにイベントに含まれるテキストを表示する。
(drag-n-drop position files)
この種類のイベントはEmacs外部アプリケーション内でファイルグループが選択されて、それがEmacsフレーム内にドラッグアンドドロップされたときに発生する。
要素positionは、そのイベント位置を記述しマウスクリックイベントで使用されるフォーマット(クリックイベントを参照)と同じ。要素filesはドラッグアンドドロップされたファイル名のリスト。通常はそれらのファイルをvisitすることによってこのイベントは処理される。
この種類のイベントは現在のところある種のシステムでのみ生成される。
help-echo
この種類のイベントは、テキストプロパティhelp-echo
をもつバッファーテキスト部分上にマウスポインターが移動したときに生成される。生成されるイベントは以下の形式をもつ:
(help-echo frame help window object pos)
イベントパラメーターの正確な意味とヘルプテキストを表示するためにこれらのパラメーターを使用する方法は、Text help-echoで説明されている。
sigusr1
sigusr2
これらのイベントはEmacsプロセスがシグナルSIGUSR1
やSIGUSR2
を受け取ったときに生成される。シグナルは追加情報を運搬しないので追加データは含まれない。これらのシグナルはデバッグに有用(エラーによるデバッガへのエンターを参照)。
ユーザーシグナルをcatchするためには、special-event-map
(アクティブなキーマップの制御を参照)内で対応するイベントにバインドする。そのコマンドは引数なしで呼び出され、last-input-event
内の特定のシグナルイベントが利用できる(その他のイベント入力の機能を参照)。たとえば:
(defun sigusr-handler () (interactive) (message "Caught signal %S" last-input-event)) (keymap-set special-event-map "<sigusr1>" 'sigusr-handler)
シグナルハンドラーをテストするために、自身でEmacsにシグナルを送信できる:
(signal-process (emacs-pid) 'sigusr1)
language-change
この種類のイベントはMS-Windows上で入力言語が変更されたときに生成される。これは通常はキーボードキーが異なる言語の文字でEmacsに送られることを意味する。生成されるイベントは以下の形式をもつ:
(language-change frame codepage language-id)
ここでframeは言語が変更されたときカレントだったフレーム、codepageは新たなコードページ番号(codepage
number)、language-idは新たな入力言語の数値IDである。codepageに対応するコーディングシステム(コーディングシステムを参照)は、cpcodepage
かwindows-codepage
。language-idを文字列に変更する(たとえばset-language-environment
のようなさまざまな言語依存機能にたいしこれを使用する)には、以下のようにw32-get-locale-info
関数を使用する:
;; 英語にたいする"ENU"のような言語の省略形を取得する (w32-get-locale-info language-id) ;; "English (United States)"のような ;; その言語の完全な英語名を取得する (w32-get-locale-info language-id 4097) ;; その言語の完全なローカライズ名を取得する (w32-get-locale-info language-id t)
end-session
このイベントはMS-Windowsにおいてユーザーがインタラクティブなセッションを終了したとき、またはシステムがシャットダウンすることをオペレーティングシステムがEmacsに知らせる際に生成される。このイベントの標準的な定義では、秩序に則ってEmacsをシャットダウンできるようにkill-emacs
コマンドを呼び出す(Emacsのkillを参照)。未保存の変更が存在する場合には、ユーザーが後で未保存の変更をリストアするセッションの再起動に使用できるauto-saveファイルを生成する(自動保存を参照)。
キーシーケンスの途中、つまりプレフィクスキーの後にこれらのイベントの1つが到着すると、複数イベントキー内ではなくその前か後にそのイベントが到着するようにEmacsはそのイベントを記録する。
いくつかのdelete-frame
のようなスペシャルイベントは、デフォルトではEmacsコマンドを呼び出します(他のイベントはバインドされない)。special-event-map
を通じて、あるスペシャルイベントがコマンドを呼び出すようにすることができます。このマップでファンクションキーにバインドしたコマンドは、last-input-event
内でそれが呼び出された完全なイベントを調べることができます。スペシャルイベントを参照してください。
Next: イベントの例, Previous: Xwidgetイベント, Up: 入力イベント [Contents][Index]