somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【Emacs】interactiveの用途と使い方

タイトルどおりinteractiveについてのメモです。

用途

interactiveの用途は2つです。

  1. 関数をコマンドとして使用できるようにするため
  2. コマンドとして実行した関数に、引数を対話的に渡すため

コード

interactive用の関数をinit.elに追加しました。

(defun my-test-interactive (file count)
  (interactive "fOpen File: \nnCount: ")
  (message "Opening %s...%s" file count)
)

my-test-interactive関数を定義しています。引数は2つあります。

関数の内容は、interactiveの記述と、引数をメッセージバッファへ表示しています。

関数をコマンドとして

コード2行目のinteractiveがないと、M-x入力後にTABで保管しようとしても表示されません。2行目を記載することで、TAB保管の候補として表示されます。

また、コードでは引数がありますが、引数がなくても候補に表示されます。

引数を対話的に渡す

コード2行目のinteractiveの引数と、今回定義した関数の引数はとても密接した関係があります。まずはinteractiveの引数の説明をします。

"fOpen File: \nnCount: "は、「\n」で分割し、それぞれ順に引数2つに割り当てられます。

2つの引数の先頭文字「f,n」は、どのような種類の値を受け取るかを示しています。

  1. f:既存のファイルのパス
  2. n:数字

「f,n」のあとの文字は、表示する文字列です。「f」であれば、「Open File: 」と表示しつつファイル名を求めてきます。

引数の利用

入力した値は、message関数の記述どおり引数名で利用できます。

参考