Emacs Keybindings - Firefox: Difference between revisions

From MozillaZine Knowledge Base
Jump to navigationJump to search
m (add headers: GNU/Linux with GTK, Any OS without GTK)
m (add subheads "Changing keybindings", "The Keybindings")
Line 1: Line 1:
==GNU/Linux with GTK==
==GNU/Linux with GTK==
===Changing Keybindings===


Firefox uses the GTK setting to determine whether Emacs-like/Readline-like keybindings are active in text fields, regardless of what window manager you use.  To enable these keybindings, add the line
Firefox uses the GTK setting to determine whether Emacs-like/Readline-like keybindings are active in text fields, regardless of what window manager you use.  To enable these keybindings, add the line
Line 10: Line 12:


<i>Note:</i> This doesn't work in the latest gnome (2.8).  In this case, you need to run  "gconf-editor", and directly change the key /desktop/gnome/interface/gtk_key_theme from "Default" to "Emacs".  Then if you restart Firefox, all is good in the world again.
<i>Note:</i> This doesn't work in the latest gnome (2.8).  In this case, you need to run  "gconf-editor", and directly change the key /desktop/gnome/interface/gtk_key_theme from "Default" to "Emacs".  Then if you restart Firefox, all is good in the world again.
===The Keybindings===


The shortcuts are often called Emacs keybindings, but they're actually more similar to keybindings in Readline.  When these keybindings are enabled, they override the standard keybindings in Gnome and Firefox (when a text entry field has focus).
The shortcuts are often called Emacs keybindings, but they're actually more similar to keybindings in Readline.  When these keybindings are enabled, they override the standard keybindings in Gnome and Firefox (when a text entry field has focus).
Line 62: Line 66:


Additional Readline keys <b>not</b> supported by Firefox:
Additional Readline keys <b>not</b> supported by Firefox:


<pre>
<pre>

Revision as of 19:35, 12 December 2004

GNU/Linux with GTK

Changing Keybindings

Firefox uses the GTK setting to determine whether Emacs-like/Readline-like keybindings are active in text fields, regardless of what window manager you use. To enable these keybindings, add the line

gtk-key-theme-name = "Emacs"

to ~/.gtkrc-2.0 (create the file if it doesn't exist) and restart Firefox.

If you use Gnome, you can set this using Desktop Preferences > Keyboard Shortcuts instead of editing the configuration file.

Note: This doesn't work in the latest gnome (2.8). In this case, you need to run "gconf-editor", and directly change the key /desktop/gnome/interface/gtk_key_theme from "Default" to "Emacs". Then if you restart Firefox, all is good in the world again.

The Keybindings

The shortcuts are often called Emacs keybindings, but they're actually more similar to keybindings in Readline. When these keybindings are enabled, they override the standard keybindings in Gnome and Firefox (when a text entry field has focus).

Ctrl+A Go to beginning of line
Ctrl+E Go to end of line
Ctrl+F Go right one character
Ctrl+B Go left one character
Ctrl+K Delete to end of line
Ctrl+U Delete entire line (different from readline, in which Ctrl+U deletes to the beginning of the line)
Ctrl+W Delete word, left
Ctrl+H Delete character, left (backspace)
Ctrl+D Delete character, right

Additional Readline keys not supported by Firefox:


Ctrl+T transpose characters
Ctrl+Y yank (like paste)
Ctrl+P previous line (like Readline's Up)
Ctrl+N next line (like Readline's Down)
Ctrl+S search
Ctrl+R reverse search
Ctrl+J return
Ctrl+M carriage return
Ctrl+L redraw

Any OS, without GTK

If you don't use an operating system that has GTK (popular examples include Microsoft Windows and Mac OS X (which happens to use these bindings in nearly every program)), then you must unfortunately manually edit the res/builtin/platformHTMLBindings.xml file and add the following lines:

    <!-- Emacsish single-line motion and delete keys -->
    <handler event="keypress" key="a" modifiers="control"
        command="cmd_beginLine"/>
    <handler event="keypress" key="e" modifiers="control"
        command="cmd_endLine"/>
    <handler event="keypress" key="b" modifiers="control"
        command="cmd_charPrevious"/>
    <handler event="keypress" key="f" modifiers="control"
        command="cmd_charNext"/>
    <handler event="keypress" key="h" modifiers="control"
        command="cmd_deleteCharBackward"/>
    <handler event="keypress" key="d" modifiers="control"
        command="cmd_deleteCharForward"/>
    <handler event="keypress" key="w" modifiers="control"
        command="cmd_deleteWordBackward"/>
    <handler event="keypress" key="u" modifiers="control"
        command="cmd_deleteToBeginningOfLine"/>
    <handler event="keypress" key="k" modifiers="control"
        command="cmd_deleteToEndOfLine"/>


    <!-- Emacsish single-line motion and delete keys -->
    <handler event="keypress" key="a" modifiers="control"
        command="cmd_beginLine"/>
    <handler event="keypress" key="e" modifiers="control"
        command="cmd_endLine"/>
    <handler event="keypress" id="key_left" key="b" modifiers="control"
        command="cmd_charPrevious"/>
    <handler event="keypress" id="key_right" key="f" modifiers="control"
        command="cmd_charNext"/>
    <handler event="keypress" id="key_delback" key="h" modifiers="control"
        command="cmd_deleteCharBackward"/>
    <handler event="keypress" id="key_delforw" key="d" modifiers="control"
        command="cmd_deleteCharForward"/>
    <handler event="keypress" id="key_delwback" key="w" modifiers="control"
        command="cmd_deleteWordBackward"/>
    <handler event="keypress" id="key_del_bol" key="u" modifiers="control"
        command="cmd_deleteToBeginningOfLine"/>
    <handler event="keypress" id="key_del_eol" key="k" modifiers="control"
        command="cmd_deleteToEndOfLine"/>

    <!-- Emacsish multi-line motion and delete keys -->
    <handler event="keypress" id="key_linedown" key="n" modifiers="control"
        command="cmd_lineNext"/>
    <handler event="keypress" id="key_lineup" key="p" modifiers="control"
        command="cmd_linePrevious"/>