Emacsでコマンドを定義するとき、(interactive)
で入力補完を利用することができる。
(interactive "f")
で実在するファイル名、(interactive "a")
で函数名が補完できる、といった具合だ。Helmなどの補完インターフェイスを利用すると、さらに入力しやすくなる。(君は誰とEmacsる? (補完インターフェイス紹介篇)を参照)
この機能の概要は、Emacsのdescribe-function
でinteractive
を引くと、どんな文字を利用できるのかが一覧できる。(GNU Emacs Lisp Reference Manual: Interactive Codes)
さて、では変数名を補完入力させようと思ったら、どうすればいいのか。
v -- Variable name: symbol that is
custom-variable-p
.
v
がその文字にあたるようだ。しかしその後に不穏なことが書いてある。「custom-variable-p
にあたるシンボルこそが変数なのだ」と。
私は変数default-directory
を補完対象にしたかったのだが、なるほど、うまくいかないようだ……?
ちなみに、(interactive "v")
に相当する単独の函数はread-variable
で、およそ同じ動作をする。
解決
custom-variable-p
で判定するって言ってるんだから、函数を一時的に上書きしてやればいいよ。
そう、**cl-letf
**だね。
(cl-letf (((symbol-function 'custom-variable-p) #'boundp)) (read-variable "Variable: "))
実際に動かしてみる。
予想的中! 別の条件で変数を絞りこみたいときにも、これを応用できますね ヾ(〃><)ノ゙☆
おまけ
いろんなものがコピーできるcopyitに変数の値をコピペする機能をつけたんですよ。
みなさんも使ってみて、おともだちにも紹介してくださいね☆