interactive

Title
interactive
Type
Special Form
Arguments
interactive {INTERACTIVE-STRING {PARAMETER}*|LIST}
Package
editor
Section
関数
File
builtin.l
関数が対話的に実行可能であること、すなわちコマンドであることを宣言します。
このフォームを定義に含む関数は対話的に実行できます。
対話的に実行とは具体的には
・キーバインドでの実行
・M-x (execute-extended-command) での実行
・ツールバーでの実行
などです。

実行に引数が必要でない関数では必要ありませんが、引数を与えなければならな
い関数の場合は、INTERACTIVE-STRINGによって対話的に実行したときに関数に渡
す引数の値やその与え方を制御する必要があります。
INTERACTIVE-STRINGの構成は以下のようになります。
  *             任意。書込み禁止バッファでの実行を禁止します。
  0             任意。プロンプトに数引数がつきます。
  指定子        引数に与えるデータとその与え方の指定になります。
  任意の文字列  ミニバッファで引数を与えるときのプロンプトになります。
  \n            区切り文字です。続けて次の引数についての記述ができます。

PARAMETERでは指定子に対する設定を記述できます。
 :defaultN      初期表示
 :historyN      履歴情報
 :titleN        ダイアログのタイトル
Nの部分には何番目の指定子に対する設定かという数値が入ります。
例えば最初の指定子に対する初期表示の指定は:default0で行います。
:defaultNと:titleNで指定するのは文字列、
:historyNで指定するのはminibuffer-history-variableプロパティを持つシンボルです。
履歴のデータはそのプロパティ値が使用されます。minibuf.l参照。

以下、指定子とその動作です。

  {属性}
   P: Prompt       ミニバッファでユーザー入力
   M: Must Match   正しく入力されるまで繰り返す
   C: Completion   入力候補表示・補完あり
   D: Default      :defaultN使用可能
   H: History      :historyN使用可能
   T: Title        :titleN使用可能

  [最終変換値]
  {xx}    - 関数には xxx 型の値がくる
  {xx/yy} - 入力値が省略又は未定義値だと、yy型がくる
  {xx|yy} - 入力値が多重値だと、yy の型でくる
  {*****} - なんでもあり

        {PMCDHT}
  a     {PMCDH }[symbol]        関数名
  B     {P CDH }[buffer/string] バッファ名
  b     {PMCDH }[buffer]        既存のバッファ名
  c     {P     }[character]     文字
  C     {PMCDH }[symbol]        コマンド名
  d     {      }[integer]       ポイント位置
  D     {PMCDHT}[string]        ディレクトリ名
  e     {P CDH }[string]        実行ファイル
  F     {P CDHT}[string]        ファイル名
  f     {PMCDHT}[string]        既存のファイル名
  l     {P CDHT}[string|cons]   ファイル名(複数可)
  M     {      }[integer]       セレクション開始位置
  m     {      }[integer]       マーク位置
  n     {PM    }[integer]       整数
  N     {PM    }[integer]       整数(前置引数を優先)
  p     {      }[integer]       前置引数の値
  P     {      }[symbol/nil]    生の前置引数
  R     {      }[integer]       セレクション範囲(一つ目がセレクションの始点、二つ目がセレクションの終点)
  r     {      }[integer]       リージョン(一つ目がマーク位置、二つ目がポイント位置)
  s     {P  DH }[string]        文字列
  S     {PMCDH }[symbol]        シンボル
  v     {PMCDH }[symbol]        変数名
  X     {P     }[*****]         S式(引数には評価した値が渡される)
  x     {P     }[*****]         S式そのもの
  z     {PMC H }[encoding]      文字エンコーディング
  Z     {PMC H }[encoding]      文字エンコーディング(自動判定を除く)
 
新たに任意の指定子を作成することもできます。
*interactive-specifier-alist*に指定子にあたる文字と処理の関数シンボルを
登録します。keymap.lを参照。

また、LISTにて指定子に依らない任意の動作をさせることもできます。
cmds.lのrepeat-complex-commandの定義などを参照。

備考:
・0zと0Zという指定は特別に、前置引数が与えられたときのみミニバッファで入
  力待ちになるという動作になります。
・PARAMETERで:emacsにnon-nilを指定するとemacsとの互換性を考慮した動作に
  なります。
Seealso
commandp
long-operation
*prefix-args*
read-buffer-name
read-char-encoding
read-command-name
read-directory-name
read-exist-buffer-name
read-exist-file-name
read-file-name-list
read-file-name
read-function-name
read-integer
read-sexp
read-string
read-symbol-name
read-variable-name