emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [O] org-mode + icicles, avoid key binding redefinitions?


From: Drew Adams
Subject: Re: [O] org-mode + icicles, avoid key binding redefinitions?
Date: Wed, 22 Jan 2014 20:45:33 -0800 (PST)

Someone pointed me to this thread.  I am not subscribed to this
list, so cc me if you want me to see a reply you write.

Wrt some of what I read in the thread:

1. It is not true, (or else it is meaningless, depending on what
you mean by that phrase) that "C-c ' is officially an Emacs
keybinding".

Just because Org is part of Emacs does not mean that any key
bindings enabled for Org mode are somehow the "official" Emacs
bindings for those keys, and so take precedence over bindings
from "unofficial" packages.

That would be absurd.  Think about it.  Is key `b' taken once and
for all, just because "official Emacs" `compilation-minor-mode-map'
binds it to `compile-mode-summary'?  Is `C-x C-s' taken, just
because official `rcirc-multiline-minor-mode-map' binds it to
`rcirc-multiline-minor-submit'?  Is `C-c C-SPC' taken, because
`erc-track-minor-mode-map' binds it to `erc-track-switch-buffer'?

1a. From the Elisp manual, node `Key Binding Conventions':

 * Sequences consisting of `C-c' followed by `{', `}', `<',
   `>', `:' or `;' are also reserved for major modes.

 * Sequences consisting of `C-c' followed by any other punctuation
   character are allocated for minor modes.  Using them in a major
   mode is not absolutely prohibited, but if you do that, the major
   mode binding may be shadowed from time to time by minor modes.

IOW, no major mode should bind any of the latter group of keys,
including `C-'' and `C-`', and any minor mode may do so - whether
that mode is "official" or not.

1b. There is no global default binding for `C-'' in `emacs -Q'.
And there should not be, since it is reserved for minor modes.

I don't know whether Org binds `C-'' for a minor mode or for
a major mode, but if it is the latter then it is in violation
of the convention.  If it is the former, then that is fine.

1c. Just as it is fine for any other minor mode to bind the same
key.  Icicle mode is a (global) minor mode.  By default, Icicles
binds `C-'' in `icicle-mode-map' (to command `icicle-occur').

1d. By default only.  It is trivial to customize user option
`icicle-top-level-keybindings', to bind `icicle-occur' to a
different key or to give it no key binding at all.

(And no, you do not need to fiddle with Lisp to do that - not
even `define-key'.  `M-x customize-option' is your friend -
just get yourself a separate `custom-file', for sanity.)

1e. The same holds for `C-`', which Icicles binds by default
to `icicle-search'.  And it holds for any other top-level
keys.

If you think that Icicles is "clobbering" any key bindings
that you prefer from another package (such as Org), it is
simple to change keys (in Icicles anyway; dunno about Org).
Icicles does not "clobber" any keys without your permission
- just customize `icicle-top-level-keybindings'.

1f. There are similar Icicles user options for key bindings
in minibuffer keymaps.  Minibuffer keymaps are major-mode
maps.  But any bindings Icicles makes in those maps are in
effect only while you are in Icicle (minor) mode.

2. If you have a recent Emacs version, it is simple to
download and install Icicles from MELPA.  Likewise, to
update it.

There are also other easy ways to download it, listed here:
http://www.emacswiki.org/cgi-bin/wiki/Icicles_-_Libraries#toc5.
Icicles is 10 files of Lisp code and 3 files of non-code
(doc and change history).  If you download the files without
using the package system, then just put the files in your
`load-path' to "install" Icicles.


All of this is clearly documented, both on Emacs Wiki and
in the doc files that are part of your Icicles download.
If you do not want to read the doc in general, then you
can read just this about Icicles key bindings:
http://www.emacswiki.org/emacs/Icicles_-_Key_Bindings

HTH.  Sorry for your trouble.



reply via email to

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