2

Stupid question, but: how to press C-( (this is a default bind in Prelude Emacs for Smartparens's sp-backward-slurp-sexp)? On my keyboard i have such bracket only in same key with 9.

9
  • Hold control and shift and then press 9?
    – Tyler
    Apr 8, 2016 at 20:19
  • @Tyler damn, rly seems to work, but i thought control+shift is another one modifier, cuz i have C-S-<up> and other arrows for buffer-move.
    – Flowneee
    Apr 8, 2016 at 20:22
  • C-( is the same as C-S-9
    – Tyler
    Apr 8, 2016 at 20:24
  • @Tyler thx for explanation. One more thing: so i cant make smth like C-S-P (or other uppercase letter)? And maybe u will post ur comment as answer? i think this can be helpful for newcomers like me.
    – Flowneee
    Apr 8, 2016 at 20:27
  • 2
    @Flowneee To figure out the key notation, do C-h c followed by the key combination you need to bind something to. If something is already bound, you will see that that is, or you will simply see that that combination is not bound to anything. For example, if you do C-h c followed by Ctrl+Shift+9 in an emacs -Q session, you will see C-( is undefined. So you need to bind your command to (kbd "C-("). Apr 8, 2016 at 20:34

1 Answer 1

6

This is a convention when describing key bindings in text. C indicates the control key, M the meta key (the alt key on most keyboards), and S indicates the shift key. The shift key is not normally listed explicitly. Instead, you would refer to the symbol that you get when holding the shift key.

For instance, the command set-mark-command is bound to C-@. To actually type this key, you would press C-S-2. Or in your example, C-( is entered by pressing C-S-9. (this assumes you're using a US keyboard, where @ is on the 2 key, and ( is on the 9)

One other note: for key combinations that combine the control key and a letter, the shifted letters do the same thing as the unshifted letter by default. That is, C-S-a (C-A) is the same as C-a. The same is true for meta. Meta + a shifted letter (eg. M-S-a) does the same as meta + the unshifted letter (e.g., M-a).

However, if you wish you can change this by explicitly binding the shifted letter to a different command. See the manual section (emacs) Modifier Keys for more details on this.

Finally, note that all of this is in reference to how we communicate about key bindings. As @KaushalModi points out, when it comes time to actually make a keybinding in your init file, you don't include the S-, you actually enter the shifted key. That is, you use

(kbd "C-(")

and not

(kbd "C-S-9")
10
  • 1
    I'd like to add that the convention is to use S when doing something like Ctrl + Shift + <alphabet>. So in the case of "Ctrl + Shift + p", it would be (kbd "C-S-p"). So rather than remember rules when to use or not use S in the bindings, it's better to just do C-h c (or C-h k) followed by the key combination you are interested in binding, to get the correct key notation. Apr 8, 2016 at 20:48
  • .. and for "Alt + Shift + p", it is (kbd "M-P") :) Apr 8, 2016 at 20:55
  • @KaushalModi actually, for Ctrl + letter, it doesn't matter if you use S- or not, captials and lower case letters are always treated the same. I didn't realize that before!
    – Tyler
    Apr 8, 2016 at 21:04
  • Hmm, but I do have M-f and M-F bound to different things and they call different commands as I would expect. Apr 8, 2016 at 21:07
  • 3
    You CAN bind C-A and C-a to different commands; just that C-A is the wrong representation; C-S-a is the right one. Try out (global-set-key (kbd "C-S-n") #'previous-line) in emacs -Q; C-n will do next-line but C-S-n ("C-N") will do previous-line. Apr 8, 2016 at 21:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.