From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.devel Subject: Re: Function for deleting a key binding in a sparse keymap Date: Tue, 06 Dec 2005 20:56:11 -0500 Message-ID: <87pso97k0r.fsf-monnier+emacs@gnu.org> References: <439382B9.7020802@student.lu.se> <439470ED.9010809@student.lu.se> <4395C4BA.4070707@student.lu.se> <43960E3F.1060105@student.lu.se> <4396184A.60606@student.lu.se> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: sea.gmane.org 1133920689 6817 80.91.229.2 (7 Dec 2005 01:58:09 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Wed, 7 Dec 2005 01:58:09 +0000 (UTC) Cc: rms@gnu.org, emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Dec 07 02:57:56 2005 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1EjoZ2-0006oe-PE for ged-emacs-devel@m.gmane.org; Wed, 07 Dec 2005 02:57:49 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1EjoZE-000301-Hb for ged-emacs-devel@m.gmane.org; Tue, 06 Dec 2005 20:58:00 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1EjoXp-0002c7-Am for emacs-devel@gnu.org; Tue, 06 Dec 2005 20:56:33 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1EjoXo-0002bc-0E for emacs-devel@gnu.org; Tue, 06 Dec 2005 20:56:32 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1EjoXn-0002bT-RN for emacs-devel@gnu.org; Tue, 06 Dec 2005 20:56:31 -0500 Original-Received: from [209.226.175.25] (helo=tomts5-srv.bellnexxia.net) by monty-python.gnu.org with esmtp (Exim 4.34) id 1EjoYV-0006H4-Kc; Tue, 06 Dec 2005 20:57:16 -0500 Original-Received: from alfajor ([70.49.81.194]) by tomts5-srv.bellnexxia.net (InterMail vM.5.01.06.13 201-253-122-130-113-20050324) with ESMTP id <20051207015612.ODYV17035.tomts5-srv.bellnexxia.net@alfajor>; Tue, 6 Dec 2005 20:56:12 -0500 Original-Received: by alfajor (Postfix, from userid 1000) id DF174D7377; Tue, 6 Dec 2005 20:56:11 -0500 (EST) Original-To: Lennart Borgman In-Reply-To: <4396184A.60606@student.lu.se> (Lennart Borgman's message of "Wed, 07 Dec 2005 00:01:30 +0100") User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux) X-Originating-IP: [0] X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:47095 Archived-At: > I feel a bit stupid because this example is not terribly important. However > this is what I do. There is a minor mode where I use this, > bw-window-resize-mode. When entering this mode I do: > (mapc (lambda(key) > (define-key bw-keymap (vector key) nil)) > help-event-list) > I set the "help keys" to nil so that the help is still available during > resizing. Those are the keys I want to remove afterwards. The default value > in the sparse keymap bw-keymap is: > (define-key bw-keymap [t] 'bw-exit-resize-mode) I see. Coming from a functional programming background, I'd use anoter approach based on the idea of reusing the original value rather than using side-effects to try and coerce it back to the same shape it had originally: (defvar bw-keymap (let ((map (make-sparse-keymap))) (define-key map [t] 'bw-exit-resize-mode) map)) then when adding help-event-list bindings: (setq bw-keymap (let ((map (make-sparse-keymap))) (set-keymap-parent map bw-keymap) map)) ;; dolist is more efficient than mapc. (dolist (key help-event-list) (define-key bw-keymap (vector key) nil)) and when you want to remove those keys, just do (setq bw-keymap (keymap-parent bw-keymap)) Of course, you can use variants of it, e.g. introduce a "bw-basic-map" variable to keep the original map, rather than rely on (keymap-parent bw-keymap) holding that original map. Stefan