Emacs Lispをコマンドで実行できるようにする
interactive というのを使えばよいらしい。
(defun greeting () (interactive) (message "Hello, world"))
こうすると、Emacs上で M-x greeting を叩けばミニバッファに「Hello, world」と出力される。
引数も付けてみる
(defun greeting2 (msg) (interactive "sGreeting: ") (message "%s" msg))
こうすると、M-x greeting2 を実行したときにミニバッファに以下のように出てくる。
Greeting:
ここに表示させたい文字列を入力してEnterを押す。
Greeting: こんにちは[Enter] こんにちは
ちなみに、interactiveの引数では、撮りたい値を文字列の最初の一文字で指定する。
"sGreeting: "となっているのは、文字列を引数で取るためのsが頭についているからである。
他には、以下などがある。
- b: 既存のバッファ名
- f: 既存のファイル名
- n: 数字(整数)
全部で10個ほどあるみたい。
これができただけでなんだかぐっとEmacs Lispを身近に感じますね。
さらに引数を2個に
(defun greeting3 (msg1 msg2) (interactive "sGreeting1: \nsGreeting2(%s -> ?): ") (message "%s -> %s" msg1 msg2))
こうすると、
Greeting1: こんにちは[Enter] Greeting2(こんにちは -> ?): さようなら[Enter] こんにちは -> さようなら
という風に出力されます。(例はあんまりよくないですね)