登録したファイルを開く

F1を押したら.xyzzyを開いて、F2を押したらメモを開いて……、と設定しておくと便利である。

でも、ファイル1つ1つにコマンドを作っては芸がない。ということで、次のコマンドを書いてみた。

(defvar *favorite* '((#\F1 "~/.xyzzy")
                     (#\F2 "~/memo")))

(defun open-favorite ()
  (interactive)
  "登録したファイルを開く"
  (labels ((func (c)
             (interactive "c呼出文字: ")
             (let ((f (assoc c *favorite*)))
               (if f (find-file (cadr f))))))
    (or (func *last-command-char*)
        (call-interactively #'func)
        (message "ないよ"))))

(global-set-key #\F1 'open-favorite)
(global-set-key #\F2 'open-favorite)
(global-set-key #\F3 'open-favorite)

labelsの挙動は柔軟性があって好きなのだ。