Mac: How to Create Keyboard Layout and Keybinding

By Xah Lee. Date: . Last updated: .

This page tells you how to modify Mac OS X's keybinding.

You can:

mac unicode char
Mac OS X, 【⌥ Opt+key】 in Dvorak Keyboard Layout

Key Config File

Create a file at ~/Library/KeyBindings/DefaultKeyBinding.dict. Create the “KeyBindings” dir if you don't already have it.

The DefaultKeyBinding.dict file is just a text file.

The file's content should be key & action pairs, like this:

/* this is comment */
{
"keycode1" = actionCode1;
"keycode2" = actionCode2;
}

Simple Example

Create a file at ~/Library/KeyBindings/DefaultKeyBinding.dict, and put the following content.

/* -*- coding: utf-8 -*- */
/* my keybindings */

{
/* insert Unicode character with Option key down*/
"~a" = ("insertText:", "\U03B1"); /* greek alpha α */
"~;" = ("insertText:", "\U2665"); /* heart symbol ♥ */

/* move cursor with i j k l keys while Ctrl key down */
"^i" = ("moveUp:");
"^k" = ("moveDown:");
"^j" = ("moveLeft:");
"^l" = ("moveRight:");
}

Restart a application and the new keybinding will take effect in that application. Launch TextEdit to test your changes.

Note: Only applications that uses Cocoa Text System will support this.

Note: if you use Unicode Characters directly in the file such as , you must save the file using UTF-8 encoding.

Key Syntax

Mac OS X Keybinding Key Syntax

Action Code

Mac OS X Keybinding Action Code

Sample File

Example of defining the {↖ Home, ↘ End} keys to move to the beginning/end of line.

/* make home/end key to move to begin/end of line */

{
"\UF729" = "moveToBeginningOfLine:"; /* home key */
"\UF72B" = "moveToEndOfLine:"; /* end key */
}

Here's example file for inserting Unicode characters with the ⌥ Opt key.

/* -*- coding: utf-8 -*- */
{

/* insert Unicode characteres with Option key down */
"~#8" = ("insertText:", "↑");
"~#2" = ("insertText:", "↓");
"~#4" = ("insertText:", "←");
"~#6" = ("insertText:", "→");

"~a" = ("insertText:", "α");
"~h" = ("insertText:", "θ");

"~3" = ("insertText:", "†");
"~7" = ("insertText:", "—");
"~8" = ("insertText:", "•");
"~9" = ("insertText:", "★");

"~&" = ("insertText:", "‣");
"~*" = ("insertText:", "°");

/* insert pairs with Option down */
"~d" = ("insertText:", "«»", "moveBackward:");
"~h" = ("insertText:", "{}", "moveBackward:");
"~t" = ("insertText:", "()", "moveBackward:");
"~n" = ("insertText:", "[]");
"~s" = ("insertText:", "“”", "moveBackward:");
"~-" = ("insertText:", "「」", "moveBackward:");

"~D" = ("insertText:", "‹›", "moveBackward:");
"~S" = ("insertText:", "‘’", "moveBackward:");
"~_" = ("insertText:", "『』", "moveBackward:");

/* insert sig */
"~1" = ("insertText:", "  John\n http://example.com/\n\n☄");
}

Here's a example of ErgoEmacs Keybinding, one for QWERTY layout and one for Dvorak Keyboard Layout:

You can look at Xcode's keybinding file at /Developer/Applications/Xcode.app/Contents/Resources/PBKeyBinding.dict. You can view it here: osx_keybinding_xcode.dict.txt.

Emacs Keybinding

Mac OS X by default support emacs' keybindings. They are:

Mac OS X's default emacs keybindings
KeyAction
Ctrl+fmove forward
Ctrl+bmove backward
Ctrl+nmove down a line
Ctrl+pmove up a line
Ctrl+abeginning of line
Ctrl+eend of line
Ctrl+kdelete current position to end of line
Ctrl+ypaste

You can add more of emacs's

KeyAction
Ctrl+spaceset mark
Ctrl+wcut
Ctrl+x Ctrl+xSwap cursor position to last mark

However, i don't recommend it. Emacs's keys is very inefficient and ergonomically painful. See: Why Emacs's Keyboard Shortcuts are Painful. If you like a efficient keybinding for text editing, you might try: ErgoEmacs Keybinding.

Problems

See: Problems of Mac OS X's Keybinding Scheme DefaultKeyBinding.dict.

Alternatives

Something DefaultKeyBinding.dict can't do. For example:

There are many solutions to these. See:

Mac Keyboard Software Guide ⌨

Best is to get a programable keyboard. I can recommend Logitech G910 Orion Spark Keyboard. May look ugly, but is functionally the best keyboard. Quiet mechanical keys.

logitech g910 keyboard 12
Logitech G910 Orion Spark Keyboard amazon
logitech g710plus keyboard
Logitech G710+ Mechanical Keyboard amazon

References

Note: the default keybinding config file used by the system is a XML file at: /System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict. You don't have to do anything with that file. This is for your information only.

Shop at Xah Keyboard Store