偽abbrev

xyzzyに文字列のコピーを貼り付ける方法が無駄にいくつもある。セレクションのコピー・貼り付けやリージョンのコピー・貼り付けはもちろん、モードによる定型文の貼り付け、dabbrevによる補完などもある。また、abbrevで補完したり、レジスタから挿入もできる。


でも、せっかくlispを積んでるんだから、変数に文字列や数値を入れて、そのまま貼り付ければ良いんじゃないかと思った。

(defun insert-command (arg)
  (interactive "Xinsert ")
  (with-output-to-selected-buffer
   (format t "~A" arg)))

(defun setq-command (arg)
  (interactive "ssetq:")
   (eval (list 'setq (intern arg) (read-sexp (concat "setq " arg ":")))))

setq-commandで変数に保存して、insert-commandで中身を書く。これで十分なのではないだろうか。上に書いたのは変数名を補完してくれない代わりに、新しい変数にもsetqできるコマンドと、変数だけでなくS式ならなんでも挿入できるコマンドだ。これで簡単な計算をミニバッファに書いて結果を貼ったりするのが楽になる。


既存の変数しか指定できない代わりに補完してくれるっていうのは、標準ではset-variableがある。同じような挿入コマンドも書いておくと便利だ。これは上のコマンドのXをvに変えれば良い。ついでに(setq 変数 中身)を書き出してくれるコマンドもあると便利そうだけど……それをするならハッシュでキーワード−値として記録した方が良さそうだ。