Next: , Previous: Quitting, Up: Command Loop


20.10 前置コマンド引数

Emacsのほとんどのコマンドは、前置引数(prefix argument)、 つまりコマンド自身のまえに指定された数を利用できます。 (前置引数とプレフィックスキーを混同しないこと。) 前置引数はつねに値で表現され、 nilであると現在は前置引数がないことを表します。 各コマンドは、前置引数を使ってもよいし、無視してもかまいません。

前置引数には2つの表現方法があります。 (raw)と数値(numeric)です。 エディタコマンドループでは、内部的には生の表現を使い、 その情報を保持するLisp変数もそのようにしますが、 コマンドではどちらの表現を要求してもかまいません。

生の前置引数の値にはつぎの可能性があります。

いろいろな前置引数でつぎの関数を呼び出す例を示します。

     (defun display-prefix (arg)
       "Display the value of the raw prefix arg."
       (interactive "P")
       (message "%s" arg))

以下は、生の前置引数でdisplay-prefixを呼び出した結果です。

             M-x display-prefix  -| nil
     
     C-u     M-x display-prefix  -| (4)
     
     C-u C-u M-x display-prefix  -| (16)
     
     C-u 3   M-x display-prefix  -| 3
     
     
     M-3     M-x display-prefix  -| 3      ; C-u 3と同じ)
     
     C-u -   M-x display-prefix  -| -
     
     
     M--     M-x display-prefix  -| -      ; C-u -と同じ)
     
     C-u - 7 M-x display-prefix  -| -7
     
     
     M-- 7   M-x display-prefix  -| -7     ; C-u -7と同じ)

Emacsは、前置引数を保持するために2つの変数、 prefix-argcurrent-prefix-argを使います。 他のコマンド向けに前置引数を設定するuniversal-argumentなどの コマンドは、前置引数をprefix-argに保持します。 対照的に、current-prefix-argには 現在のコマンドに対して前置引数を運ぶ役割があり、 この変数に設定しても以後のコマンドに対する前置引数には なんの効果もありません。

通常、コマンドは、interactive宣言により、 「生」か「数値」のいずれの表現の前置引数を使うか指定します。 (See Using Interactive。) あるいは、変数current-prefix-argにある前置引数の値を 関数から直接見てもかまいませんが、 これは見通しのよい方法ではありません。

— Function: prefix-numeric-value arg

この関数は、有効な生の前置引数の値argからそれに等価な数値を返す。 引数は、シンボル、数、リストのいずれかである。 それがnilであると、戻り値は1である。 -であると、戻り値は−1である。 数であると、その数を返す。 リストであると、リストの(数であるはずの)carを返す。

— Variable: current-prefix-arg

この変数は、現在のコマンドに対する生の前置引数を保持する。 コマンドが直接この変数を調べてもよいが、 前置引数を参照する普通の方法は(interactive "P")を使うことである。

— Variable: prefix-arg

この変数の値は、つぎの編集コマンド向けの生の前置引数である。 後続のコマンド向けの前置引数を指定するuniversal-argumentなどの コマンドは、この変数に設定することで動作する。

— Variable: last-prefix-arg

まえのコマンドで使われた生の前置引数の値。

つぎのコマンドは、後続のコマンド向けの前置引数を設定するためのものです。 それ以外の目的には呼ばないでください。

— コマンド: universal-argument

このコマンドは入力を読み取り、後続のコマンド向けの前置引数を指定する。 なにをしているか理解していない限り、読者自身でこのコマンドを呼ばないこと。

— コマンド: digit-argument arg

このコマンドは、後続のコマンド向けの前置引数に追加する。 引数argは、このコマンドが呼び出されるまえの生の前置引数であり、 前置引数を更新する計算に使われる。 なにをしているか理解していない限り、読者自身でこのコマンドを呼ばないこと。

— コマンド: negative-argument arg

このコマンドは、後続のコマンド向けの数値前置引数に追加する。 引数argは、このコマンドが呼び出されるまえの生の前置引数であり、 その値の符号を変えて新たな前置引数とする。 なにをしているか理解していない限り、読者自身でこのコマンドを呼ばないこと。