Next: Recursive Editing, Previous: Quitting, Up: Command Loop
Emacsのほとんどのコマンドは、前置引数(prefix argument)、
つまりコマンド自身のまえに指定された数を利用できます。
(前置引数とプレフィックスキーを混同しないこと。)
前置引数はつねに値で表現され、
nil
であると現在は前置引数がないことを表します。
各コマンドは、前置引数を使ってもよいし、無視してもかまいません。
前置引数には2つの表現方法があります。 生(raw)と数値(numeric)です。 エディタコマンドループでは、内部的には生の表現を使い、 その情報を保持するLisp変数もそのようにしますが、 コマンドではどちらの表現を要求してもかまいません。
生の前置引数の値にはつぎの可能性があります。
nil
。
その数値としての値は1であるが、
多くのコマンドではnil
と整数1を区別する。
-
。
数字文字なしにM--やC-u -を打ったことを表す。
これに等価な数値は−1であるが、
整数−1とシンボル-
を区別するコマンドもある。
いろいろな前置引数でつぎの関数を呼び出す例を示します。
(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-arg
とcurrent-prefix-arg
を使います。
他のコマンド向けに前置引数を設定するuniversal-argument
などの
コマンドは、前置引数をprefix-arg
に保持します。
対照的に、current-prefix-arg
には
現在のコマンドに対して前置引数を運ぶ役割があり、
この変数に設定しても以後のコマンドに対する前置引数には
なんの効果もありません。
通常、コマンドは、interactive
宣言により、
「生」か「数値」のいずれの表現の前置引数を使うか指定します。
(See Using Interactive。)
あるいは、変数current-prefix-arg
にある前置引数の値を
関数から直接見てもかまいませんが、
これは見通しのよい方法ではありません。
この関数は、有効な生の前置引数の値argからそれに等価な数値を返す。 引数は、シンボル、数、リストのいずれかである。 それが
nil
であると、戻り値は1である。-
であると、戻り値は−1である。 数であると、その数を返す。 リストであると、リストの(数であるはずの)carを返す。
この変数は、現在のコマンドに対する生の前置引数を保持する。 コマンドが直接この変数を調べてもよいが、 前置引数を参照する普通の方法は
(interactive "P")
を使うことである。
この変数の値は、つぎの編集コマンド向けの生の前置引数である。 後続のコマンド向けの前置引数を指定する
universal-argument
などの コマンドは、この変数に設定することで動作する。
つぎのコマンドは、後続のコマンド向けの前置引数を設定するためのものです。 それ以外の目的には呼ばないでください。
このコマンドは入力を読み取り、後続のコマンド向けの前置引数を指定する。 なにをしているか理解していない限り、読者自身でこのコマンドを呼ばないこと。