[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: redefine C-h
RE: redefine C-h
Sun, 10 Aug 2008 17:41:10 -0700
> > C-h is a normally prefix key, but I want to bind 'backward-char-
> > delete' to it. My .emacs has this:
> > (global-unset-key "\C-h")
> > (global-set-key "\C-\M-h" 'help-command)
> > (global-set-key [C-h] 'delete-backward-char)
> > I want to use C-M-h for help-command instead and use C-h for
> > backspace. However...it's not working. C-h remains a prefix key. My
> > understanding of prefix keys is basically nil, so there's probably
> > something pretty basic I'm missing here. Would anyone here be kind
> > enough to clue me in?
> Problem solved: looks like the "icicles" package was overriding my key
Icicles does not bind `C-h'. `C-h' with Icicle mode is the same as it is without
If `C-h' remains a prefix key after your customizations, I am sure that has
nothing to do with Icicles. And, as others have pointed out, [C-h] is not what
you want anyway - use [(control ?h)] or "\C-h" or (kbd "C-h") or [?\C-h] or...
And you should also customize `help-char', as Kevin pointed out.
Similarly, for `C-M-h': Icicles should not affect it. Your binding of `C-M-h' to
`help-command' should work OK everywhere. Is that not what you see?
Icicle mode does, however make some changes in the minibuffer keymaps. One that
is pertinent here is that it remaps command `delete-backward-char' to
`icicle-delete-backward-char' in the minibuffer completion keymaps. This is so
that whenever you delete a character in the minibuffer the set of candidate
completions is updated to reflect your edited input.
This is as it should be. This does not, however, affect the binding of
`delete-backward-char' outside of the minibuffer. And it does not even affect
its binding in the minibuffer, except during completion.
If you successfully change the binding of `delete-backward-char' to `C-h', then,
because Icicle mode remaps this to `icicle-delete-backward-char' in the
minibuffer during completion, `C-h' during completion will delete a minibuffer
character and update the set of completion candidates.
IIUC, that should be just what you're after: `C-h' will always delete the
character before point. In the minibuffer, it will also update the completion
candidates - but that's the only difference.
You can easily see all of this for yourself if you load library `help-fns+.el'
(**) and then use `C-h M-k' (`describe-keymap'). You can use `C-h C-k' to show
`icicle-mode-map' and each of the minibuffer maps: `minibuffer-local-map',
`minibuffer-local-completion-map', and so on. Quit Icicle mode and check the
minibuffer maps again, to see the difference. Check `global-map' too, to see
whether your customizations have really taken effect as you expect.
`describe-keymap' is your friend.
You should be able to get what you want and still use Icicles, without any
difficulty. If you have questions, feel free to ask. If you see a problem,
please file a bug report: `M-x icicle-send-bug-report'.
(*) In Icicle mode, these two `C-h' bindings are changed, but only if you so
choose - see option `icicle-top-level-key-bindings':
`C-h C-o' - `icicle-describe-option-of-type'
`C-h w' - `icicle-where-is' (multi-command version of `where-is')
(**) `help-fns+.el' is available here: