Next: , Previous: , Up: Writing Defuns   [Contents][Index]


3.4 Different Options for interactive

この例でmultiply-by-seveninteractiveの引数として"p"を使用しています。これはC-u、あるいはMETAの後に数値をタイプした場合には、関数の引数としてその数値を渡すためのコマンドと解釈するようEmacsに指示するための引数です。Emacsにはinteractiveを用いる際のために事前定義された文字が20以上あります。ほとんどすべての場合において、これらのオプションのいずれかを使って、関数に正しい情報を対話的に渡すことが可能です(Code Characters for interactive in The GNU Emacs Lisp Reference Manualを参照)。

zap-to-charという関数で考えてみます。以下はこの関数のinteractive式です

(interactive "p\ncZap to char: ")

interactiveにたいする引数の最初の部分である‘p’はすでに目にしました。これはEmacsにたいしてプレフィックス(前置)されたものを関数に渡す数値として解釈するよう告げる引数です。C-uMETAの後に数値をタイプすればプレフィックスを指定できます。このプレフィックスは指定する文字の文字数を指定します。つまりプレフィックスが3で文字に‘x’を指定すると、次の3つ目の‘x’までを含んだすべてのテキストを削除することになります。プレフィックスをセットしない場合には指定した文字までのすべてのテキストを削除しますが、それを超えた削除は行われません。

削除する文字の名前を関数に伝えるのが‘c’です。

正確に言うと、2つ以上の引数をもつ関数はそれぞれの引数にたいする情報をinteractiveの後の文字列内のパーツに含めることができるということです。この場合には、、引数それぞれに渡される情報はinteractiveリストで指定されるのと同じ順序になります。この文字列内におけるパーツは、それぞれ改行文字である‘\n’によって次のパーツと区切られます。たとえば‘\n’によって‘p’の後に‘cZap to char: ’を続けることができるのです。これによって(もしあれば)プレフィックス引数や文字の値をEmacsに渡すことができます。

このような場合の関数定義は以下のようになるでしょう。interactiveargcharをそれぞれプレフィックス引数と指定する文字にバインドします:

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

(プロンプト内のコロンの後のスペースは入力を求める際の見栄えをよくするため。例についてはThe Definition of copy-to-bufferを参照のこと。)

引数を受け取らない関数のinteractiveに引数は必要ありません。そのような関数にはシンプルな式(interactive)を含めます。たとえば以下はmark-whole-bufferです。

この特殊な文字コードがあなたのアプリケーションにそぐわない場合には、リストとしてあなた独自の引数をinteractiveに渡せます。

例についてはThe Definition of append-to-bufferの定義を、このテクニックに関するより完全な例についてはUsing Interactive in The GNU Emacs Lisp Reference Manualを参照してください。

This page has generated for branch:work/add_lispintr, commit:65845cf60c073f2f3182d1d07483530e9bbe1d96 to check Japanese translation.