Rebind C-space in Emacs

14.7k views Asked by At

I've tried various version to no avail:

(global-set-key (kbd "C-<space>") 'tempo-complete-tag)

(global-set-key [C-space] 'tempo-complete-tag)

I'm using CUA mode and running Emacs on Ubuntu, version: GNU Emacs 23.1.50.1 (x86_64-pc-linux-gnu, GTK+ Version 2.18.0) of 2009-09-27 on crested, modified by Debian

When I run tempo-complete-tag manually it tells me it is bound to C-space but C-space still runs cua-set-mark (or if CUA is disable, set-mark-command).

How can I rebind the C-space shortcut in Emacs to a command I decide?

3

There are 3 answers

3
phils On BEST ANSWER

C-h k (key) will tell you how Emacs refers to a given key (which is "C-SPC" in this instance). (global-set-key (kbd "C-SPC") 'tempo-complete-tag) will do what you want.

I always use the (kbd) function for key-bindings, as it allows you to refer to the key the same way it is typically written everywhere else.

Do keep in mind that C-SPC is a standard set-mark-command binding! Personally I'd pick something different :)

0
gavenkoa On

Alternative syntax for key binding is via vector:

(global-set-key [?\M-\ ] 'cycle-spacing)
(global-set-key [?\C-\ ] 'tempo-complete-tag)
0
offby1 On

Also keep in mind that "global-set-key" will only do what you want, if your mode doesn't override it. I'm too lazy to load tempo to see if it does indeed override C-SPC, but it might well do so, in which case, you want to put this in your .emacs:

(add-hook 'tempo-mode-hook
          (lambda ()
            (local-set-key (kbd "C-SPC") 'tempo-complete-tag)
            ))