次: Input Events, 前: Interactive Call, 上: Command Loop
エディタコマンドループは、自身や実行中のコマンドのために 状態記録を数個のLisp変数に設定します。
この変数は、コマンドループが(現在のコマンドの)まえに実行したコマンドの 名前を記録する。 通常、この値は関数定義を持つシンボルであるが、保証はしない。
コマンドが後続のコマンドに対する前置引数を指定する場合を除いて、 コマンドからコマンドループへ戻ると
this-command
から値をコピーする。この変数は現在の端末に対してつねにローカルであり、 バッファに対してローカルにはならない。 see Multiple Displays。
この変数は、エディタコマンドループが いま実行しているコマンドの名前を記録する。
last-command
と同様に、通常は関数定義を持つシンボルである。コマンドループは、コマンドを実行する直前にこの変数に設定し、 コマンドが終了すると(コマンドが後続のコマンドに対する 前置引数を指定する場合を除いて) この値を
last-command
にコピーする。後続のコマンドに対するフラグとして 実行中にこの変数に設定するコマンドもある。 特に、テキストをキルする関数群は
this-command
にkill-region
を 設定して、直後に続くキルコマンドでは キルしたテキストをまえのキルに追加するようにする。
特定のコマンドがエラーを起こした場合に
直前のコマンドとは認識されたくない場合には、
読者はそのコマンドがそれを防ぐように書く必要があります。
1つの方法は、以下に示すように、
コマンドの始めでthis-command
にt
を設定し、
コマンドの終りでthis-command
に正しい値を戻します。
(defun foo (args...)
(interactive ...)
(let ((old-this-command this-command))
(setq this-command t)
...do the work...
(setq this-command old-this-command)))
let
でthis-command
を束縛しません。
というのは、エラーがあるとlet
は古い値を復元するからです。
これこそがここでは避けたいlet
の機能です。
この関数は、現在のコマンドに対して直前のコマンドが生成した前置引数を含めて、 現在のコマンドを起動したキー列を含んだ文字列かベクトルを返す。 すべてのイベントが文字であれば、値は文字列である。 see Input Events。
(this-command-keys) ;; C-u C-x C-eを使ってこの式を評価する => "^U^X^E"
this-command-keys
と同様だが、つねにベクトルでイベントを返すため、 文字列に入力イベントを保持する際の複雑さを扱う必要がない (see Strings of Events)。
この変数は、マウスメニューによるイベントを考慮せずに、 キー列として読んだ最後の入力イベントを保持する。
この変数の1つの用途は、 メニューをポップアップする位置を
x-popup-menu
に指示することである。y-or-n-p
(see Yes-or-No Queries)も内部的に使っている。
この変数には、コマンドの一部としてコマンドループが 読んだ最後の入力イベントが設定される。 この変数の主な用途は、どの文字を挿入すべきかを決定するために
self-insert-command
が使うことである。last-command-event ;; C-u C-x C-eを使ってこの式を評価する => 5
C-eのASCIIコードは5なので、値は5である。
Emacs 18版との互換性のために別名
last-command-char
がある。
この変数は、最後の入力イベントを振り向けたフレームを記録する。 通常これは、イベントが生成されたときに選択されていたフレームであるが、 そのフレームが入力フォーカスを別のフレームに振り向けていると、 この値はイベントを振り向けた先のフレームである。 see Input Focus。