Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!uunet!husc6!mit-eddie!B.CS.UIUC.EDU!liberte From: liberte@B.CS.UIUC.EDU (Daniel LaLiberte) Newsgroups: comp.emacs Subject: deep-copy-keymap Message-ID: <8710280402.AA05213@b.cs.uiuc.edu> Date: Tue, 27-Oct-87 23:02:36 EST Article-I.D.: b.8710280402.AA05213 Posted: Tue Oct 27 23:02:36 1987 Date-Received: Fri, 30-Oct-87 07:15:17 EST Sender: dmh@eddie.MIT.EDU Lines: 39 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 )))))