Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

"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"