define-key で多ストロークを設定
keymap というのは car が editor:keymap とゆー symbol で、cdr が (key . command) の alist らしい。
(setq *keymap* (make-sparse-keymap)) => (keymap) (define-key *keymap* #\C-b 'command) => t *keymap* => (keymap (#\C-b . command))
んで、多ストローク。
(define-key *keymap* '(#\C-x #\C-g) 'hello) => t *keymap* => (keymap (#\C-x keymap (#\C-g . hello)) (#\C-b . command))
ふむ。その key に bind された command として keymap を突っ込んであるようだ。
(lookup-keymap *keymap* #\C-x) => (keymap (#\C-g . hello)) (cdr (assoc #\C-x (cdr *keymap*))) => (keymap (#\C-g . hello))
つまりこんなことをしてるんだろう。
(defun define-key~ (keymap key command) (if (consp key) (let ((second-map (cdr (assoc (car key) keymap)))) (unless (keymapp second-map) (setq second-map (make-sparse-keymap))) (define-key~ second-map (cadr key) command) (define-key~ keymap (car key) second-map)) (let ((place (assoc key (cdr keymap)))) (if place (setf (cdr place) command) (let ((last (last keymap))) (setf (cdr last) (list (cons key command))))))) t)