For Vim users, there is Vimperator. For Emacs users, there is KeySnail.
keysnail.xpi from the link below.
|KeySnail for Firefox||KeySnail for Thunderbird (beta)|
After that, drag keysnail.xpi and drop it to the Firefox or Thunderbird. Then you can install the KeySnail following instructions.
Or from the command line,
$ wget https://github.com/mooz/keysnail/raw/master/keysnail.xpi $ firefox keysnail.xpi
This extension provides very flexible way of customizing the keybindings.
Yes, this extension allows you to bind functions to the key sequence not just the shortcut key.
For Emacs junkies, KeySnail provides a lot of commands and functions which emulate the Emacs behavior.
Part of features are listed below.
KeySnail has the plugin system which allows user to extends KeySnail with lot of features.
Plugins makes your Firefox and KeySnail life more special.
If you are the Firefox extension developer or familiar with the userChrome.js, it’s easy to start writing the KeySnail plugins.
See Writing Plugins for details.
KeySnail loads the .keysnail.js / _keysnail.js from user home directory (or a profile directory in Windows) and execute it. This directory can be changed in the preference dialog.
You can bind the function to the key sequence, using the functions listed below.
key.setGlobalKey(keys, func, ksDescription, ksNoRepeat); key.setEditKey(keys, func, ksDescription, ksNoRepeat); key.setViewKey(keys, func, ksDescription, ksNoRepeat); key.setCaretKey(keys, func, ksDescription, ksNoRepeat);
Here are the descriptions of the each argument.
Specify key (string) or key sequence (array). if you want to bind a function to mutliple key sequence use ‘array of array’. The expression of the key follows the Emacs like below example.
|Ctrl + Alt + t||C-M-t|
|Arrow Key||<up>, <down>, <left>, <right>|
|PgUp, PgDn||<prior>, <next>|
|F1, F2, F3||<f1>, <f2>, <f3>|
Specify anonymous function. This function can take two arguments.
You can use these arguments through declaring the following expression.
function (aEvent, aArg)
Specify description of the function. You can omit this argument.
When this value is false, command (function) is executed prefix arguments times.
If you want to use prefix argument in your function and do not want to repeat it, set this value to true.
you can omit this argument.