emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Function for deleting a key binding in a sparse keymap


From: Lennart Borgman
Subject: Re: Function for deleting a key binding in a sparse keymap
Date: Wed, 07 Dec 2005 15:33:32 +0100
User-agent: Mozilla Thunderbird 1.0.7 (Windows/20050923)

Lennart Borgman wrote:

Stefan Monnier wrote:

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.
I wrote too early. For some reason this does not work. It seems like the help keys just runs the default function (ie 'bw-exit-resize-mode). Here is the output from (describe-variable 'bw-keymap (get-buffer-create "*Help*")):

I wrote too early once again. I was adding the old bw-keymap to emulation-mode-map-alist, not the new one. When I changed this the above procedures work nicely.

Sorry for the unnecessary noise.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]