[xyzzy] C-x a で変数をセットするやつ
2014-10-19
* バッファローカルな変数をちゃんとセットできてなかったのを修正
* 標準の関数上書きするのをやめた
主に lisp 書いてて *buffer-package* を修正するのに使ってる。けど微妙に使いにくいので余計なことをしてみた。
- 値を入力するときに元の値と(あれば)変数の説明を表示
- 元の値が文字列だったときに、文字列を入力させるか否かを設定できるように
- 値を入力するときのプロンプトを文字列待ちなら変える
(defvar *set-variable-for-string* t "*コマンド set-variable で変数の値が文字列の場合、式ではなく文字列を入力するかどうか。") (defun my-set-variable (var) (interactive "vSet variable: ") (unless (and (symbolp var) (boundp var)) (error "No such variable")) (set var (save-window-excursion (save-excursion ;; 変数の説明があれば *Help* バッファに表示 (let ((buf (get-buffer-create "*Help*")) (doc (documentation var 'variable)) (val (symbol-value var))) (erase-buffer buf) (setup-temp-buffer buf) (with-output-to-buffer (buf) (when doc (format t "変数の説明:~%~A~2&" doc)) (format t "元の値:~%~S~2%" val)) (pop-to-buffer buf) (if (and *set-variable-for-string* (stringp val)) (read-string "文字列: ") (read-sexp "値: "))))))) (global-set-key '(#\C-x #\a) 'my-set-variable)
defcustom があれば色々できるんだろうけどなー。