The current changelog is here.

The historic changelog is below:

Version 2013-07-5

There are many changes that were missed, but will be added to this changelong in future releases. The biggest change for this release is movind to o-blog to generate HTML and changing `variants' to `themes'. I believe that theme is easier to understand.

version 5.7.5, 2013-01-29

some minor fix to prevent byte compile errors.

version 5.7.4, 2013-01-26 much more fixes and features by Matthew Fidler

to be documented later.

also, the commands “ergoemacs-forward-block” and “ergoemacs-backward-block” improved. Now they skip empty lines with whitespace in them properly.

version 5.7.3, 2012-12-14 major rewrite by Matthew Fidler

A rewrite of the mode, with the following user-visible changes and features:

Generate layout diagrams in SVG format

Call “ergoemacs-extras” to generate diagrams in SVG format for all supported layouts.

The files are generated at the `user-emacs-directory' e.g. 〔~/.emacs.d/ergoemacs-extras/〕.

SVG files can be viewed in InkScape or modern browser (Firefox, Google Chrome, IE9, …).

Generate AutoHotkey source code

for System-wide ErgoEmacs keybinding on Microsoft Windows.

Call “ergoemacs-extras” to generate AutoHotkey source code.

Generate Bash 〔.inputrc〕

for ErgoEmacs keybinding for unix terminal.

Call “ergoemacs-extras” to generate.

To install, follow the instructions in the generated file.

Generate Mac OS X 〔DefaultKeyBinding.dict〕

for system-wide ErgoEmacs keybinding or Mac. Call “ergoemacs-extras” to generate.

To install, follow the instructions in the generated file.

Customizable by “customize-group”

You can customize keys by calling emacs's “customize-group” then give it “ergoemacs-mode”.

Here's some technical description:

  • Added the customizable variable `ergoemacs-variable-layout' which defines keys based on the QWERTY layout. You can customize this variable to suit your needs. Also you can save your customization so that You do not have to learn new keys every time a new ergoemacs mode is introduced.
  • Added the customizable variable `ergoemacs-fixed-layout' which defines keys that are the same regardless of the layout. This includes standard keys such as 【Ctrl+s】 for saving. For this layout I added 【Ctrl+z】 for undo, 【Ctrl+Shift+z】 for redo, 【Ctrl+y】 for redo
  • Added the customizable variable `ergoemacs-minor-mode-layout'. From this variable all of the minor mode and major mode hooks are created and setup. When using `minor-mode-overriding-map-alist' as the keybinding to modify, an additional keybinding variable is created per mode.

If you wish to freeze your keybindings, but keep current with the ergoemacs trunk, you can save all of the customizable variables and your layout will be saved between upgrades.

For developers: a better mechanism for key/command map

The internal working of the mode for mapping commands to keys has completely changed.

Now, each layout are defined using visual diagram similar to ASCII-art. This allows developers to easily add new layouts or change keys.

See 〔README.txt〕 file that describes the tech detail of how layout format to be read by ErgoEmacs emacs lisp code.

version 5.6.0, 2012-11-21

The command for cancel “keyboard-quit” is changed from QWERTY 【Alt+n】 to 【Esc】. Reason: I think it's overall slightly better, because: ① it's more familiar. ② involves a single key. The disadvantage is that on terminal, Meta can no longer be pressed by 【Esc】 (but can still be done by 【Ctrl+[】). I think Esc for Meta is really bad, from the 1980s. I think it's rare to find a terminal app today that do not support Alt as Meta.

version 5.5.7, 2012-09-28

Added functions: “cut-line-or-region” “copy-line-or-region”

Replacing previous “defadvice” functions: “kill-region-key” “kill-ring-save-key”

because these “defadvice” functions causes emacs to spit this warning “ad-Orig-kill-region called with 3 arguments, but accepts only 2”, since about emacs 24. Haven't looked into why it's doing that.

version 5.5.6, 2012-08-14

removed a bad code: (eval-when-compile (log-edit-mode)) there's no function “log-edit-mode”.

version 5.5.5, 2012-07-10

Added commands “unfill-paragraph”, “unfill-region”. These are useful when doing keyboard macros. (in addition to “compact-uncompact-block”)

version 5.5.4, 2012-07-10

Modified forward/backward bracket functions (e.g. “backward-open-bracket”) so that they don't print a error when reaching end.

version 5.5.3, 2012-06-05

• Added a French layout support. • Added 【Alt+6】 for “select-current-block”. Experimental. • Added 【Alt+7】 for “select-current-line”. Experimental.

version 5.5.2, 2012-05-25

• 【Alt+Shift+u】 was “beginning-of-defun”, is now “backward-block” • 【Alt+Shift+o】 was “end-of-defun”, is now “forward-block”

Rational: after tried the beginning/end of defun, i didn't find it as usable in comparison to backward/forward block. Because, in many modes such as python, HTML, plain text (email, irc, text document), the defun one is useless. However, the move by block is applicable to vast majority of modes.

I think the navigation of defun and sexp has one nice key group. e.g. Ctrl+Alt+arrow move by sexp, and Ctrl+Alt+home/end does defun. So, that's a nice set there.

version 5.5.1, 2012-05-25

Changed behavior of 【Alt+‹arrow keys›】

Before, 【Alt+‹left/right›】 move cursor backward/forward to left bracket positions, and, 【Alt+‹up/down›】 does the same to right bracket positions.

Now, 【Alt+←】 does “backward-open-bracket”, and 【Alt+→】 does “forward-closing-bracket”. Now, 【Alt+↑】 and 【Alt+↓】 does backward/forward block.

A “block” is text between empty new lines. (similar to emacs's “paragraph”)

Rational: Several advantages with the new way.

① reduces the number of keys needed for navigating to all possible left/right bracket points. Before, it needs 4 keys, now 2.

② the new way is more intuitive with emacs. The forward key moves to end of things, and backward to beginning of things.

③ advantage of backward/forward block: GNU Emacs has {【Ctrl+↑】, 【Ctrl+↓】} for backward/forward paragraph. The problem is that “paragraph” is dependent on major mode's syntax table, so the behavior is unpredictable, and “paragraph” isn't well defined in computer language modes. e.g. in “html-mode”, it seems to move in funny way. The new behavior is predicable and useful. It's useful because vast majority of text uses empty lines to separate blocks of text.

version 5.5.0, 2012-05-24

Major change.

• 【Alt+Shift+j】 was “beginning-of-buffer”, is now “backward-open-bracket” • 【Alt+Shift+l】 was “end-of-buffer”, is now “forward-close-bracket”

• 【Alt+Shift+u】 was “backward-paragraph”, is now “beginning-of-defun” • 【Alt+Shift+o】 was “forward-paragraph”, is now “end-of-defun”

Rational: the beginning/end of buffer command is not frequently used. Their replacement, the backward/forward bracket is much more useful in any programing language with brackets: (){}[].

Similarly, the movement by defun is probably more useful than movement by paragraph, because most emacs users are programers. The concept of “paragraph” isn't well defined in programing languages. But the defun movement also work with C-like syntax languages as well as lisp.

Thanks a lot to David Capello for suggestion and discussion. See:

〈Comandos de programación básicos de Emacs (forward-sexp, beginning-of-defun)〉 @

Also, implementation of {forward-open-bracket, backward-open-bracket, forward-close-bracket, backward-close-bracket} is reverted to not dependent on syntax table. Because, for example, in cperl mode, the curly bracket {} doesn't have bracket syntax.

version 5.4.9, 2012-05-22

improved implementation of forward-open-bracket, backward-open-bracket, forward-close-bracket, backward-close-bracket

They now include the straight double quote char (Unicode U+22) Part of the new implementation are now based on syntax table. Not sure this is a improvement, because depending on syntax table makes the command unpredictable.

This is experimental change.

version 5.4.8, 2012-05-20

added 【Alt+Del】 to delete word to the right.

version 5.4.7, 2012-05-17

added 【F4】 for paste previous “yank-pop”

version 5.4.6, 2012-05-15

added commands to traverse brackets.

“forward-open-bracket” 【Alt+→】 “backward-open-bracket” 【Alt+←】 “forward-close-bracket” 【Alt+↓】 “backward-close-bracket” 【Alt+↑】

Note: other minor modes may over-ride these keys. e.g. “org-mode”.

added “forward-block”, “backward-block”

These commands currently don't have a key. You may bind the keys for “forward-paragraph” and “backward-paragraph”. Call “describe-function” on “forward-block” for detail.

added commands to select line, block text, string

Added: “select-current-line” “select-current-block”

Modified “select-text-in-quote” to also work on single quotes. e.g. 'some thing'

version 5.4.5, 2012-05-14

on Windows, now the 【Menu】 key does emacs's “execute-extended-command”,

just like emacs on linux's default behavior. Rational: This is better than the 【Alt+a】. Because 【a】 is pinky, and it involves 2 keys. Now it's single key. Also, this makes it compatible with emacs on linux .

interactive search (“isearch-forward”) is now QWERTY 【y】

, instead of 【;】. Rational: this is a highly frequently used command. 【;】 is on home-row, but by pinky. 【y】 is far, but by strong finger. Reaching for y may be a fraction of second slower, but more comfortable and healthy than using pinky.

【Ctrl+f】 is now interactive search (“isearch-forward”).

(was “search-forward”) Feature incomplete. Need to add repeated 【Ctrl+f】 to invoke next match.

added more than 10 additional keys starting with function keys.

【F1 1】 describe-function 【F1 2】 describe-variable 【F1 3】 describe-key 【F1 4】 describe-char

【F1 6】 lookup-all-dictionaries 【F1 7】 lookup-google 【F1 8】 lookup-wikipedia 【F1 9】 lookup-word-definition 【F1 0】 【F1 [】 lookup-word-dict-org 【F1 ]】 lookup-wiktionary 【F1 `】 elisp-index-search

【F2】 ,cut 【F3】 ,copy; 【Ctrl+F3】 ,copy-all 【F4】 ,paste

【F5】 ,undo; 【Ctrl+F5】 ,redo

【F8】 ,ctl-x-map. Emacs's C-x prefix key.

Rational: these are single key or single key sequence additional keys. The copy, cut, paste, undo, ones are frequently used. Single key is good. The F8 is a additional key for emacs combo key C-x. The F1 key sequences adds many convenient or helpful commands.

version 5.4.4, 2012-05-12

added 【F1+m】 for “describe-major-mode” and 【F1+o】 for “where-is-old-binding”. Rationale: keep in sync with the 【F1】 = 【Ctrl+h】 equivalence.

version 5.4.3, 2012-04-29

Removed 【Ctrl+Shift+w】 for “delete-frame” (close current window).

rationale: Close Current Window should really follow OS's key convention. Or, in ErgoEmacs, 【Alt+F4】 does it. This way, it's more standard. Less keys.

On the Mac, current behavior is ok too.

The reason for a 【Ctrl+Shift+w】 for closing window doesn't seem strong.

If inside minibuffer, “close-current-buffer” now do do nothing.

Fixed bug #92 Previously, it prompt if user want to save, etc. Thanks to

version 5.4.2, 2012-04-11

Fixed “open-in-external-app”. Before, on linux, emacs freezes until external app is closed. Thanks to Thanks to Ozan Erdem.

version 5.4.1, 2012-04-09

trivial changes.

fixed a leaked variable “item” in 〔ergoemacs-unbind.el〕.

updated 〔INSTALL.txt〕.

updated a few files that points to the dead 〔〕 to 〔

version 5.4.0, 2012-03-03

2012-03-03 Added a command “open-in-external-app”. The key 【Ctrl+Shift+o】 is now bound to it, instead of “open-in-desktop”.

2011-11-22 GNU emacs's 【C-x d】 for “dired” is no longer unbound (it's available now).

Originally, it's unbound because the thought was that 【Ctrl+o】 for “find-file” with a dir input is a good clean substitute. But now, i think in some situations, calling dired directly is necessary. For example, calling dired then give “~/emacs/*.html” to list all HTML files. If using “find-file”, it'll try to open all files.

Now, since it's necessary to call “dired” directly sometimes, it's convenient to have a key. Since GNU Emacs already has 【C-x d】 for it, and this key doesn't conflict with ErgoEmacs, so we use it.

Thanks to Joseph Buchignani 〔 〕 and Jon Snader 〔 〕.

2011-11-18 minor improvement on “toggle-letter-case”. Now better guess at initial state.

version 5.3.9, 2011-04-17

2011-04-17 Fixed shift key selection with cua-mode

r647 Fixed a bug with a default GNU Emacs, when cua-mode is NOT turned on, load ergoemacs-mode and turn it on, then keys with Shift will also highlight text. This is because ergoemacs-fix-cua–pre-command-handler-1 tries to set symbols from cua-mode but they are not there.

thanks to (zyangm… for bug report.

fixed by temp turning on cua-mode.

2011-03-22 Added a compatibility fix for auto-complete-mode

Added a ergoemacs-auto-complete-mode-hook.

Thanks to Renier ( for code.

2010-11-18 added a hotkey 【Ctrl+Shift+t】 for open-last-closed

r556 This key follows browser convention. But won't work in Terminal.

2010-12-10 copy/cut with no text selection will include the line ending.

r578. Thanks to Max Arnold for bug report.

version 5.3.7, 2010-11-15

Added open-in-desktop command with key 【Ctrl+Shift+o】.

Added open-last-closed command.

More international layouts

Added Danish layout. Thanks to Michael Budde Added ergoemacs-layout-pt-nativo.el. Thanks to Xavier Pinho

You can see all supported layouts and their contributors in the directory 〔ergoemacs-keybindings〕.

See also: 〈Dvorak, Maltron, Colemak, NEO, Bépo, Turkish-F, Keyboard Layouts Fight!〉 @

minor fixes

【Ctrl+Backspace】 for backward-kill-word

This is a standard key together with 【Ctrl+Arrow】 and 【Ctrl+Del】.

r477 Technically, removed the unbinding of 「<C-backspace>」

Added ergoemacs-keyboard-quit-key to ergoemacs-layout-gb.el

A bug fix. Thanks to Jorge Dias.

version 5.3.4, 2010-08-16

Added a Swedish layout

Contributed by Kristian Hellquist.

remapped split window keys for all layouts.

OLD COMMAND NEW 【Alt+1】 delete-other-windows 【Alt+3】 【Alt+!】 delete-window 【Alt+0】 【Alt+2】 split-window-vertically 【Alt+4】 【Alt+@】 split-window-horizontally 【Alt+$】

Reason: the 1 and 2 keys are two of the most difficult to press keys on the top row. 3 and 4 are the best for left hand. 8 and 9 are the best for right hand. (this can be verified by looking at the original Dvorak layout for number keys)

For emacs commands, according to command frequency statistics, the order are roughly this, from most used to least:

delete-other-windows split-window-vertically delete-window split-window-horizontally

therefore this change. For Xah Lee's personal experience in this, see:

Note that 【Alt+0】 for delete-window was in the original ErgoEmacs keybinding design for about a year, but got changed to 【Alt+Shift+1】 (【Alt+!】). The thinking was for some logical consistency with 【Alt+1】. My experience since is that logical consistency is bad for ergonomics advantage. Logical consistency is good at beginning for learning, but once muscle memory is developed, ergonomic efficiency is far more important, and will be used for years.

version 5.3.3, 2010-05-24

【Ctrl+p】 now asks for confirmation before printing

【Ctrl+p】 will now ask user confirmation before printing the current buffer. This is to prevent unintentional printing. Old Emacs users tends to press 【Ctrl+p】 a lot because that used to be moving cursor up. See:

version 5.3.2, 2010-05-22

Added United Kingdom Dvorak layout (gb-dv).

fixed keybinding conflict problem. You can now change bindings

by David Capello. (and thanks to maddin)

Added ergoemacs-hook-list variable, ergoemacs-add-hook function, and ergoemacs-global/local-set/unset-key functions

and added “defadvice” for local/global-set/unset-key functions.

Copy and Cut to copy/cut current line

Added a feature so that copy/cut will get the current line if there's no text selection.

version 5.x.x

Italian layout has been created, by By David Capello, with help by Francesco Biccari

A Colemak layout is added or sometimes before. The bulk of key mapping was helped by Ivan Haralamov (aka postivan), and vockets?

version 5, 2009-09-15

Changed into a minor mode, with support for many keyboard layouts

By David Capello. This version is now a full featured minor mode. It supports 3 different keyboard layout: US QWERTY, US Dvorak, and “Spanish (Spain)” (aka “Spanish (International sort)”). Also supports a new command where-is-old-binding (with shortcut 【Ctrl+h o】).

version 4.3.13, 2009-08-28

improved shrink-whitespaces. Now, when called twice, it removes the remaining single space. Thanks to David Capello for the code.

version, 2009-08-15

Fixed a bug where delete-selection-mode might be turned off. Changed “(delete-selection-mode t)” to “(delete-selection-mode 1)”.

version, 2009-08-14

A minor implementation improvement. In one place, changed the use of functionp to fboundp for checking the existing of a emacs 23 feature recenter-top-bottom. Was using functionp because i forgot about fboundp.

version 4.3.12, 2009-08-13

【Alt+p】 is now “recenter-top-bottom” for emacs 23 users. In emacs 22, it is “recenter”.

version 4.3.11, 2009-08-05

Added a hook to fix message-mode.

version 4.3.10, 2009-06-14

fixed a previous/next reversal for f11/f12 keys in rcirc-mode-hook.

diff-mode uses some bindings in “M-‹key›” space. Fixed by adding a diff-mode-hook. (thanks to lwarxx)

version 4.3.9, 2009-06-14

unbind 「C-x 3」 (use 【Alt+@】 for split-window-horizontally)

unbind 「C-M-%」 (use 【Alt+%】 for query-replace-regexp).

unbind 「C-@」 (use 【Alt+Space】 for set-mark-command).

unbind 「M-{」 (use 【Alt+u】 for backward-paragraph).

unbind 「M-}」 (use 【Alt+o】 for forward-paragraph). Thanks to marciomazza

version 4.3.8, 2009-06-14

added 【Alt+7】 to select-text-in-quote.

version 4.3.7, 2009-05-27

ibuffer's 「M-s」 changed in emacs 23, such that 「M-s」 is now a prefix. For Dvorak users, 「M-s」 should be isearch. This is reclaimed to be isearch. For qwerty users, 「M-s」 should be other-window. Fixed.

version 4.3.6, 2009-05-26

dired's 「M-s」 changed in emacs 23, such that 「M-s」 is now a prefix. For Dvorak users, 「M-s」 should be isearch. This is reclaimed to be isearch. For qwerty users, 「M-s」 should be other-windox. Fixed.

version 4.3.5, 2009-05-10

experimental modification to shrink-whitespaces.

version 4.3.4, 2009-04-19

Added 【Alt+Shift+PageDown】 for forward-page (move cursor to the next ASCII formfeed char (often displayed as L)). Same for PageDown key.

version 4.3.3, 2009-03-16

Added 【Ctrl+Shift+n】 for opening a new window (make-frame-command). Removed 「C-x 5 2」. Added 【Ctrl+Shift+w】 for closing window (delete-frame), removed 「C-x 5 0」.

version 4.3.2, 2009-03-11

Removed 「C-x o」 for other-window. (use 【Alt+s】 and 【Alt+Shift+s】 instead.)

version 4.3.1, 2009-03-04

A better implementation for making 「M-t」 call 「M-TAB」. So that, describe-key on M-t will show better documentation.

version 4.3.0, 2009-03-02

Added 【Alt+Shift+x】 for cut-all and 【Alt+Shift+c】 for copy-all.

version 4.2.4, 2009-03-01

Removed 【Ctrl+x Ctrl+w】 for write-file. Use 【Ctrl+Shift+s】.

Fixed 【Ctrl+o】 for ibuffer to run find-file instead of ibuffer-visit-buffer-other-window-noselect.

version 4.2.3, 2009-03-01

fixed a dired binding so that 【Ctrl+o】 runs find-file instead of dired-display-file

version 4.2.2, 2009-03-01

Removed the default keybinding for split-window-vertically 【Ctrl+x 2】. Use 【Alt+2】 instead.

The key 【Ctrl+x Ctrl+b】 is now ibuffer, instead of list-buffers.

【Ctrl+h m】 now calls describe-major-mode.

version 4.2.1, 2009-02-28

Changed the keybinding for previous-user-buffer from 【Ctrl+←】 to 【Ctrl+PageUp】. And previous-emacs-buffer from 【Ctrl+Shift+←】 to 【Ctrl+Shift+PageUp】. Similar for the “next” versions. Rationale: The 【Ctrl+Arrow】 are standard editing shortcuts command in Windows, Mac, Linux.

version 4.2.0, 2009-02-27

Added 【Alt+t】 for keyword completion. Rationale: The default 「M-TAB」 is used by Windows, Mac, Linux, to switch apps.

version 4.1.8, 2009-02-15

Corrected the keybinding for Save As (write-file)

version 4.1.7, 2008-12-10

Made compact-uncompact-block to work on text selection if there's one.

version 4.1.6, 2008-12-09

Added select-text-in-quote

version 4.1.5, 2008-10-21

Added extend-selection by Nikolaj Schumacher.

version 4.1.4, 2008-10-20

Fixed close-current-buffer

Sometimes when closing a buffer not associated with a file, it'll prompt whether to kill instead of whether to save.

version 4.1.3, 2008-10-18

Fixed minor bug in toggle-letter-case.

It now works non-english letters such as éÉ and single letter word “a teapot” or words starting with a number “1st timer”. Thanks to Andreas Politz and Nikolaj Schumacher.

next-frame-command is renamed to switch-to-next-frame. Similar for previous-frame-command.

version 4.1.2, 2008-10-16

Removed 【Ctrl+x h】 for mark-whole-buffer. (use 【Ctrl+a】 instead)

Improved compact-uncompact-block and shrink-whitespaces.

version 4.1.1, 2008-10-07

Removed unfill-paragraph and unfill-region

Because they are defined in ourcomments-util.el bundled with emacs 22, also because they are not used in this file now (compact-uncompact-block replaced most of their functionality).

version 4.1, 2008-10-06

Added keys for about 9 commands

previous-user-buffer, next-user-buffer, next-frame-command, previous-frame-command, query-replace and query-replace-regexp, move-cursor-to-next-pane, move-cursor-to-previous-pane, split-window-horizontally, toggle-letter-case. Combined delete-blank-lines and just-one-space to shrink-whitespaces.

Moved delete-window to be with delete-other-window.

version 4.0.1, 2008-09-23

Fixed 「C-o」 in dired mode.

version 4, 2008-09-21

Unbind almost all 【Meta+‹key›】 and 【Ctrl+‹key›】 space bindings.

Added about 11 commands, such as next-user-buffer, close-current-buffer etc.

version 3.6, 2008-09-18

Reclaimed keybindings in text-mode.

version 3.5, 2008-09-16

Reclaimed keybindings in ibuffer.

version 3.4, 2008-09-06

Fixed key bindings in the Meta-‹key› space in about 10 modes.

version 3.3, 2008-09-05

Fixed cua-mode-hook by setting symbol property 'CUA to nil, so that a bunch of no-select-* functions kludge is no longer needed. Thanks to Lennart Borgman.

version 3.2, 2008-09-02

Moved cua fix functions to modernoperations.el. The functions are: no-select-cua-scroll-down, no-select-cua-scroll-up, no-select-backward-paragraph, no-select-forward-paragraph, no-select-beginning-of-buffer, no-select-end-of-buffer, no-select-move-end-of-line.

version 3.1, 2008-09-02

Added just-one-space, delete-blank-lines.

Added fill-paragraph, unfill-paragraph.

Added comment-dwim.

version 3, 2008-08-31

Added isearch.

Added redo, kill-line-backward, shell-command.

Added bug fix for cua-mode. Now, commands with Shift keys won't go into a selection mode.

version 2, 2008-08-29

Somewhat major change. Positions for undo, cut, copy, paste, paste previous, has been moved.

Added delete-char, delete-backward-char, kill-word, backward-kill-word.

Removed the now redundant binding of kill-word and backward-kill-word using the backspace key.

Removed the other-frame binding.

version 1.1, 2007-12-18

changed keycode to consistently use kbd syntax.

Fixed a scroll-up and scroll-down mix-up.

version 1.0, 2007-08-01

first version, by Xah Lee