Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

"interactive"は結局何をしているのか

emacs lispで対話型インターフェイスを作る際、半ばオマジナイみたいに唱えられている"interactive"。
何となく意味合いは使えますが、どういった実装をしているのでしょうか?

実際のところ

リファレンスの和訳によると

この特殊フォームは、(これを持つ)関数がコマンドであること、(つまり) "M-x か、それにバインドされたキーを入力することでインタラクティブに呼び出すこと ができる" こと、を宣言します。

とのことで、M-x foward-char (C-f)みたいな単純なものから、M-x twittering-mode といった別関数を呼び出す関数です。

記法は以下のようになっており、arg-descriptorsを切り替える事で引数だのバッファだのをトリガとして扱えるようになります。

(interactive "<arg-descriptors>")

例えばこんな感じ

(defun foo3 (n)  
  (interactive "p")
  (number-to-string (* 2 n)))

(foo3 6)
; "12"