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の使用を参照してください。