liberte@B.CS.UIUC.EDU (Daniel LaLiberte) (10/28/87)
Here is a function to create a deep copy of a keymap. As was noted earlier, copy-keymap does a shallow copy of just the top level. This does the job recursively on all subkeymaps as well. I've used it a bit, but it is not thoroughly tested. It is difficult to see if a copy is really different. dan ---- (defun deep-copy-keymap (keymap) "Return a deep copy of KEYMAP. That is, all levels are copied, not just the top level." (if (not (keymapp keymap)) keymap (cond ((listp keymap) (let ((new-keymap (copy-alist keymap))) (setq keymap (cdr new-keymap)) (while keymap (let ((binding (car keymap))) (if (keymapp (cdr binding)) (setcdr binding (deep-copy-keymap (cdr binding)))) ) (setq keymap (cdr keymap)) ) new-keymap )) ((vectorp keymap) (let ((i 0) (n (length keymap)) (new-keymap (copy-sequence keymap))) (while (< i n) (if (keymapp (aref keymap i)) (aset new-keymap i (deep-copy-keymap (aref keymap i)))) (setq i (1+ i))) new-keymap )))))