たまに使うコマンドをちゃんと利用するために
xyzzyはemacs風のキーバインドで、いくらでもショートカットキーを登録できる。とはいえ、そんなに入力方法を覚えられるわけじゃない。また、M-xから直接コマンド名を入力しても良い。しかし、これもコマンドの名前を覚えてないといけない。ちょっとコマンドの数を調べてみたところ、ざっと1000以上のコマンドがあった。そんなにあることも知らなかったくらいだ。
もちろん、使われていなかったコマンドは、使い始めると結構便利だったり、たまに必要を感じるようなものである。そこで、そういったコマンドを使うようにする方法を考えた。それは簡単で、メモ用のファイルにコマンドを貼り付けて、必要ならコマンドの機能を一緒に書いておく。これだけだ。
必要な機能があったら、とりあえずメモを開いて検索すればいい。コマンドが見つかれば、すぐに実行できる。が、標準ではM-xから呼び出さないと実行できない。仕方ないので適当にコマンドを作る。
(defun call-last-command (&optional stream) "バッファ上のコマンドを実行" (interactive "p") (let ((syntab (syntax-table))) (let (from to) (cond ((selection-start-end (start end) (setq from start to end))) (t (use-syntax-table ed::*lisp-mode-syntax-table*) (unwind-protect (let ((opoint (point))) (setq from (progn (backward-sexp) (point)) to (progn (forward-sexp) (point))) (goto-char (max opoint to))) (use-syntax-table syntab)))) (save-excursion (handler-case (command-execute (car (find-all-symbols (substitute-string (buffer-substring from to) "\\(^[^:]*:+\\)\\|\\('\\)" "")))) (error (c) (message "~A" c)))))))
まあ、作るといってもlisp.lからcall-last-sexpを拝借して直しただけだ。これをScrollキー辺りに登録しておけば簡単にコマンドを実行できる。もし、他のバッファでコマンドを利用したくなったら、command-executeの中身を変数に保存する関数と、それを呼び出す関数に分ければいい。