interactive/read-variableはカスタム変数しか補完できない

  • 2
    Like
  • 0
    Comment

Emacsでコマンドを定義するとき、(interactive)で入力補完を利用することができる。

(interactive "f")で実在するファイル名、(interactive "a")で函数名が補完できる、といった具合だ。Helmなどの補完インターフェイスを利用すると、さらに入力しやすくなる。(君は誰とEmacsる? (補完インターフェイス紹介篇)を参照)

この機能の概要は、Emacsのdescribe-functioninteractiveを引くと、どんな文字を利用できるのかが一覧できる。(GNU Emacs Lisp Reference Manual: Interactive Codes)

さて、では変数名を補完入力させようと思ったら、どうすればいいのか。

v -- Variable name: symbol that is custom-variable-p.

vがその文字にあたるようだ。しかしその後に不穏なことが書いてある。「custom-variable-pにあたるシンボルこそが変数なのだ」と。

私は変数default-directoryを補完対象にしたかったのだが、なるほど、うまくいかないようだ……?

interactive-v.gif

ちなみに、(interactive "v")に相当する単独の函数はread-variableで、およそ同じ動作をする。

解決

custom-variable-pで判定するって言ってるんだから、函数を一時的に上書きしてやればいいよ。

そう、cl-letfだね。

(cl-letf (((symbol-function 'custom-variable-p) #'boundp)) (read-variable "Variable: "))

実際に動かしてみる。

read-variable-letf.gif

予想的中! 別の条件で変数を絞りこみたいときにも、これを応用できますね ヾ(〃><)ノ゙☆

おまけ

いろんなものがコピーできるcopyitに変数の値をコピペする機能をつけたんですよ。

みなさんも使ってみて、おともだちにも紹介してくださいね☆