LoginSignup
2
2

More than 5 years have passed since last update.

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

Posted at

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に変数の値をコピペする機能をつけたんですよ。

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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2