GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/eintr/Interactive-Options.html ・ emacs-doc.conao3.com

3.4 interactive のさまざまなオプション

この例では、multiply-by-seven は interactive の引数として "p" を使用しました。この引数は、C-u の後に数値が続くか、あるいは META の後に数値が続く入力を、その数値を引数として関数に渡すコマンドとして解釈するよう Emacs に指示するものです。Emacs には、interactive で使用するためにあらかじめ定義された文字が20種類以上あります。ほとんどの場合、これらのオプションのいずれかを使えば、適切な情報を対話的に関数に渡すことができます。(The GNU Emacs Lisp Reference Manual の interactive 用のコード文字 を参照してください。)

関数 zap-to-char を考えます。そのインタラクティブな式は

(interactive "p\ncZap to char: ")

interactive への引数の第1部分は ‘p’ であり、これについてはすでにご存知のことでしょう。この引数は、プレフィックスを関数に渡す数値として解釈するよう Emacs に指示します。プレフィックスは、C-u と入力して数値を続けるか、あるいは META と入力して数値を続けることで指定できます。プレフィックスは、指定された文字数となります。したがって、プレフィックスが 3 で、指定文字が ‘x’ の場合、3 番目の ‘x’ までのすべてのテキスト(その文字自体を含む)が削除されます。プレフィックスを設定しない場合は、指定された文字までのすべてのテキストが削除されますが、それ以上の範囲は削除されません。

‘c’は、削除対象の文字名を関数に伝えます。

より厳密に言えば、2つ以上の引数を持つ関数では、interactive に続く文字列に部分を追加することで、各引数に情報を渡すことができます。このようにすると、情報は interactive リストで指定された順序通りに各引数に渡されます。文字列内では、各部分は改行を表す ‘\n’ によって区切られます。例えば、‘p’ の後に ‘\n’ と ‘cZap to char: ’ を続けることができます。これにより、Emacs はプレフィックス引数(もしあれば)の値と文字を渡します。

この場合、関数定義は次のようになります。ここで arg と char は、interactive が接頭辞引数と指定文字を束縛するシンボルです。

(defun name-of-function (arg char)
  "documentation..."
  (interactive "p\ncZap to char: ")
  body-of-function...)

(プロンプトのコロン以降のスペースを入れると、プロンプトが表示された際に見栄えが良くなります。例については copy-to-buffer の定義 を参照してください。)

関数が引数を取らない場合、interactive は引数を必要としません。このような関数には、単純な式 (interactive) が含まれます。mark-whole-buffer 関数もこのようになっています。

あるいは、特殊な文字コードが用途に適さない場合は、独自の引数をリスト形式で interactive に渡すこともできます。

例については、append-to-bufferの定義を参照してください。この手法に関するより詳細な解説については、The GNU Emacs Lisp Reference ManualのInteractiveの使用を参照してください。