"Alex Schroeder" <alex@emacswiki.org> wrote in message
873cfwvcqp.fsf@emacswiki.org">news:873cfwvcqp.fsf@emacswiki.org...
"David Vanderschel" <DJV1@Austin.RR.com> writes:
Also, in testing such things, I am confused by the
fact that I cannot seem to redefine the bindings of a
mode-map by simply setting it to nil and rerunning the
(modified) code which builds the mode-map. ...
A keymap is a list that starts with the symbol `keymap'.
Only the cdr of that list is used by Emacs when
looking up keys. When you just change the value of a
mode-map, the old cdr will still be used. (Maybe you
need to draw box diagrams to see this.)
When I said "setting it to nil" I was talking about
the pointer to the list (Hube-mode-map, in my case).
Thus regenerating that list should also generate a new
cdr. If emacs still has a pointer to the old cdr, I
need to know how to get emacs to give it up. What
makes it adopt the cdr in the first place?
I think I have now figured this one out. Changing the
mode-map itself is not sufficient. You must again
invoke (use-local-map whatever-mode-map).
(I had
erroneously believed that what emacs remembered was my
variable which held the pointer to the mode-map and
that it would use the new map when I changed it. But
there is no quote on the argument, so it cannot know.
I now recall running into another manifestation of
this. emacs will readily show you the current
mode-map, but it is difficult to discover the 'name'
of that map - ie., the variable used to create it.)