Next: イベントの例, Previous: Xwidgetイベント, Up: 入力イベント [Contents][Index]
他にもシステム内での出来事を表現するイベント型がいくつかあります。
(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
でなければ、それはスクロールされるべきスクリーン行の行数である。pixel-deltaが与えられた場合には、それが(x . y)
という形式のコンスセルであれば、xとyはそれぞれの軸方向にたいしてスクロールされたピクセル数、いわゆるピクセル単位デルタ(pixelwise
delta)である。
これらのピクセル単位デルタxとyを用いれば、マウスホイールがピクセル解像度で実際にどれだけ動いたかを判断できる。たとえばピクセル単位デルタを使うことによって、ユーザーが回したマウスホイールとまったく同じようにディスプレイをスクロールできるだろう。
この種類のイベントはある種のシステムでのみ発生する。いくつかのシステムでは、かわりにmouse-4
とmouse-5
が使用される。可搬性のあるコードとするためには、マウスホイールにたいしてどのイベント型が期待されるかを決定するために、mwheel.el内で定義されている変数mouse-wheel-up-event
、mouse-wheel-up-alternate-event
、mouse-wheel-down-event
、mouse-wheel-down-alternate-event
を使用すること。
同様にmouse-wheel-left-event
とmouse-wheel-right-event
を生成できる一部のマウスでは、mouse-wheel-tilt-scroll
が非mouse-wheel-tilt-scroll
ならこれらをスクロールに使用できる。ただしこれらのスクロールイベントと同時に別のイベントをも生成するマウスもいくつかあり、邪魔をするかもしれない。この問題を解決するにはこれらのイベントにたいするバインドを削除する方法が一般的である(たとえば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
内でそれが呼び出された完全なイベントを調べることができます。スペシャルイベントを参照してください。