I know this is an old question, but I came across this while trying to do the same thing as you so I'm gonna post this anyways.
I'm using Chromium and I used Ubuntu 12.04 (now I'm using Gentoo), but it shouldn't matter.
Executing:
$ gsettings set org.gnome.desktop.interface gtk-key-theme "Emacs"
will change the key bindings to the Emacs binding. If you're fine with that, then this is all. However, if you want to use Ctrl-a
as "select all", there's a bit more work to do.
Take a look at /usr/share/themes/Default/gtk-2.0-key/gtkrc
and /usr/share/themes/Emacs/gtk-2.0-key/gtkrc
. The syntax should not be too difficult to understand. Copy all the key bindings you want to use to the /usr/share/themes/Default/gtk-2.0-key/gtkrc
. Don't forget to add the
class "GtkEntry" binding "foo"
class "GtkTextView" binding "foo"
class "GtkTextView" binding "bar"
part, which can be found at the very end of the file.
GNOME
The settings should be reflected by switching to the Emacs theme and switching back to the Default theme.
$ gsettings set org.gnome.desktop.interface gtk-key-theme "Emacs"
$ gsettings set org.gnome.desktop.interface gtk-key-theme "Default"
Non-GNOME
Create and add the following to ~/.gtkrc-2.0
gtk-key-theme-name = "Default"
Restart Chromium and the settings should be reflected.
The best thing about this is that even if you set Ctrl-w
to delete one word, you're still able to close tab when you're not inputting.
P.S. I also use the happy hacking keyboard and I'm happy to find someone who uses it too :)
Ubuntu 18.04 (GTK3)
Edit: 11/01/2018
After nearly 5 years, I'm updating this post for Ubuntu 18.04. I'm currently using Firefox, but the following should be independent of what browser you use.
On GTK3, the ~/.gtkrc-2.0
method no longer works. Instead, edit the ~/.config/gtk-3.0/settings.ini
and add the following line to the end:
gtk-key-theme-name=Emacs
If you want to modify the bindings, the Emacs
binding can be found in /usr/share/themes/Emacs/gtk-3.0/gtk-keys.css
, which can be copied over to ~/.config/gtk-3.0/gtk.css
and modified.
Some references:
If you are using xterm
, you can get it to send a CSI
(0x9B) instead of the sequence \e[
by setting the eightBitControl boolean resource. For example, start xterm up like this:
xterm -xrm '*eightBitControl:true'
You can permanently set this resource by editing the XTerm application-specific resource file (Ubuntu seems to put this in /etc/X11/app-defaults
but I think /usr/share/X11/app-defaults
is more standard.)
But be warned: this will basically break your terminal until you fix up all your keybindings.
As for the more general question, I think it's more difficult than it might at first appear. The Linux console is pretty well designed around generating eight-bit character codes (so it can work with UTF-8). From an actual console (that is, not using X), you can get "raw" scancodes, but then you'd have to do all the keymapping logic yourself (which is what X does, in fact). You might be able to use the X keymapping facilities to generate some specific codes for alt+ctrl+letter combinations, but I don't know where you would squeeze them into the eight-bit coding sequence. I feel your pain, though :)
Best Answer
iPython is built on GNU Readline - the same basis for command line editing in bash.
Readline's user documentation covers keyboard shortcuts.