[Top][All Lists]

[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 11:13:05 +0100
User-agent: Mozilla Thunderbird 1.0.7 (Windows/20050923)

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)

then when adding help-event-list bindings:

      (setq bw-keymap (let ((map (make-sparse-keymap)))
                        (set-keymap-parent map bw-keymap)
      ;; 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 to 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*")):

bw-keymap is a variable defined in `c:/emacs-lisp/test/bwcvs.el'.
Its value is shown below.

Keymap used by `bw-window-resize-mode'.

(right . bw-mode-resize-right)
(left . bw-mode-resize-left)
(down . bw-mode-resize-down)
(up . bw-mode-resize-up)
(102 . bw-shrink-windows-horizontally)
(46 . bw-balance-siblings)
(43 . bw-balance)
(t . bw-exit-resize-mode)
(menu-bar keymap
          (bw "&Resize" keymap
              (balance "Balance Windows" . bw-balance)
              (siblings "Balance Window Siblings" . bw-balance-siblings)
              (shrink "Shrink to Buffers" . bw-shrink-windows-horizontally)
"Window Resizing")


reply via email to

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