Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
My DefaultKeyBinding.dict for Mac OS X
/* ~/Library/KeyBindings/DefaultKeyBinding.Dict
This file remaps the key bindings of a single user on Mac OS X 10.5 to more
closely match default behavior on Windows systems. This makes the Command key
behave like Windows Control key. To use Control instead of Command, either swap
Control and Command in Apple->System Preferences->Keyboard->Modifier Keys...
or replace @ with ^ in this file.
Here is a rough cheatsheet for syntax.
Key Modifiers
^ : Ctrl
$ : Shift
~ : Option (Alt)
@ : Command (Apple)
# : Numeric Keypad
Non-Printable Key Codes
Standard
Up Arrow: \UF700 Backspace: \U0008 F1: \UF704
Down Arrow: \UF701 Tab: \U0009 F2: \UF705
Left Arrow: \UF702 Escape: \U001B F3: \UF706
Right Arrow: \UF703 Enter: \U000A ...
Insert: \UF727 Page Up: \UF72C
Delete: \UF728 Page Down: \UF72D
Home: \UF729 Print Screen: \UF72E
End: \UF72B Scroll Lock: \UF72F
Break: \UF732 Pause: \UF730
SysReq: \UF731 Menu: \UF735
Help: \UF746
OS X
delete: \U007F
For a good reference see http://osxnotes.net/keybindings.html.
NOTE: typically the Windows 'Insert' key is mapped to what Macs call 'Help'.
Regular Mac keyboards don't even have the Insert key, but provide 'Fn' instead,
which is completely different.
*/
{
"@\UF72B" = "moveToEndOfDocument:"; /* Cmd + End */
"~@\UF703" = "moveToEndOfDocument:"; /* Cmd + Option + Right Arrow */
"@$\UF72B" = "moveToEndOfDocumentAndModifySelection:"; /* Shift + Cmd + End */
"@\UF729" = "moveToBeginningOfDocument:"; /* Cmd + Home */
"~@\UF702" = "moveToBeginningOfDocument:"; /* Cmd + Option + Left Arrow */
"@$\UF729" = "moveToBeginningOfDocumentAndModifySelection:"; /* Shift + Cmd + Home */
"\UF729" = "moveToBeginningOfLine:"; /* Home */
"~\UF702" = "moveToBeginningOfLine:"; /* Option + Left Arrow */
"$\UF729" = "moveToBeginningOfLineAndModifySelection:"; /* Shift + Home */
"$~\UF702" = "moveToBeginningOfLineAndModifySelection:"; /* Shift + Option + Right Arrow */
"\UF72B" = "moveToEndOfLine:"; /* End */
"~\UF703" = "moveToEndOfLine:"; /* Option + Right Arrow */
"$\UF72B" = "moveToEndOfLineAndModifySelection:"; /* Shift + End */
"$~\UF703" = "moveToEndOfLineAndModifySelection:"; /* Shift + Option + Left Arrow */
"\UF72C" = "pageUp:"; /* PageUp */
"\UF72D" = "pageDown:"; /* PageDown */
"$\UF728" = "cut:"; /* Shift + Del */
"$\UF727" = "paste:"; /* Shift + Ins */
"@\UF727" = "copy:"; /* Cmd + Ins */
"$\UF746" = "paste:"; /* Shift + Help */
"@\UF746" = "copy:"; /* Cmd + Help (Ins) */
"~j" = "moveBackward:"; /* Option + j */
"~l" = "moveForward:"; /* Option + l */
"~i" = "moveUp:"; /* Option + i */
"~k" = "moveDown:"; /* Option + k */
"@~i" = ("moveUp:","moveUp:","moveUp:","moveUp:","moveUp:","moveUp:","moveUp:","moveUp:",); /* Cmd + Option + j */
"@~k" = ("moveDown:","moveDown:","moveDown:","moveDown:","moveDown:","moveDown:","moveDown:","moveDown:",); /* Cmd + Option + j */
"@\UF702" = "moveWordBackward:"; /* Cmd + LeftArrow */
"@~j" = "moveWordBackward:"; /* Cmd + Option + j */
"@\U007F" = "deleteWordBackward:"; /* Cmd + Backspace */
"@\UF703" = "moveWordForward:"; /* Cmd + RightArrow */
"@~l" = "moveWordForward:"; /* Cmd + Option + l */
"@\UF728" = "deleteWordForward:"; /* Cmd + Delete */
"@$\UF702" = "moveWordBackwardAndModifySelection:"; /* Shift + Cmd + Leftarrow */
"@$\UF703" = "moveWordForwardAndModifySelection:"; /* Shift + Cmd + Rightarrow */
}
@georgenica
Copy link

georgenica commented Dec 30, 2020

Any idea on how to get this to work on BigSur (11.1)? The dictionary file is no longer accessible at that path on the filesystem.

@rolandas-valantinas
Copy link

rolandas-valantinas commented Jan 5, 2021

Any idea on how to get this to work on BigSur (11.1)? The dictionary file is no longer accessible at that path on the filesystem.

I don't think Catalyst apps support usage of that file https://www.reddit.com/r/mac/comments/jv97u8/catalyst_apps_ignore_defaultkeybindingdict/

@floatingpurr
Copy link

floatingpurr commented Jan 5, 2021

Oh! So, no key binding is possible on BigSur?

@philipchristopher
Copy link

philipchristopher commented Jan 14, 2021

Oh! So, no key binding is possible on BigSur?

This worked for me on BigSur 11.1:

mkdir -p $HOME/Library/KeyBindings
echo '{
/* Remap Home / End keys to be correct */
"\UF729" = "moveToBeginningOfLine:"; /* Home */
"\UF72B" = "moveToEndOfLine:"; /* End */
"$\UF729" = "moveToBeginningOfLineAndModifySelection:"; /* Shift + Home */
"$\UF72B" = "moveToEndOfLineAndModifySelection:"; /* Shift + End */
"^\UF729" = "moveToBeginningOfDocument:"; /* Ctrl + Home */
"^\UF72B" = "moveToEndOfDocument:"; /* Ctrl + End */
"$^\UF729" = "moveToBeginningOfDocumentAndModifySelection:"; /* Shift + Ctrl + Home */
"$^\UF72B" = "moveToEndOfDocumentAndModifySelection:"; /* Shift + Ctrl + End */
}' > $HOME/Library/KeyBindings/DefaultKeyBinding.dict

Original thread: https://discussions.apple.com/thread/251108215

FYI, it saves the file in this location: /users/{YOUR_USERNAME}/Library/KeyBindings/DefaultKeyBinding.dict

@JorgeLuisCampos
Copy link

JorgeLuisCampos commented Feb 7, 2021

Oh! So, no key binding is possible on BigSur?

Yes, it works!

@louisdeb
Copy link

louisdeb commented Apr 11, 2021

This still works in BigSur. If ~/Library/KeyBindings/DefaultKeyBinding.dict, create the directory and the file. New key bindings won't work in already running apps - you'll need to restart the app.

@geru-scotland
Copy link

geru-scotland commented May 24, 2021

Do anyone know what code is used for right Command and Option? I would like to remap right cmd as "Home" and right Option as "End", but can't find the proper codes. Using Key Codes doesn't seem to work, unfortunately.

@louisdeb
Copy link

louisdeb commented May 25, 2021

~ : Option (Alt)
@ : Command (Apple)

Maybe they're reserved. Also remember to restart the app you're trying testing it in.

@geru-scotland
Copy link

geru-scotland commented May 25, 2021

~ : Option (Alt)
@ : Command (Apple)

Maybe they're reserved. Also remember to restart the app you're trying testing it in.

Thank you for your answer. I meant the right Command and Option, I mean, I can not find a way to identify when those keys have been specifically pressed. I would like to bind Right Cmd and Right Option and leave the left ones as they are right now.

@jlahijani
Copy link

jlahijani commented Jul 9, 2021

"^\UF702" = "moveWordLeft:"; // ctrl-left
"^\UF703" = "moveWordRight:"; // ctrl-right

This doesn't work on BigSur. Anyone know the correct way?

@jace
Copy link

jace commented Jul 9, 2021

"^\UF702" = "moveWordLeft:"; // ctrl-left
"^\UF703" = "moveWordRight:"; // ctrl-right

This doesn't work on BigSur. Anyone know the correct way?

@jlahijani These have changed to moveWordBackward and moveWordForward.

@pmunin
Copy link

pmunin commented Feb 9, 2022

was moveToBeginningOfDocument changed to something also for Big Sur? Ctrl + Home/End does not work for me from that:

"^\UF729" = "moveToBeginningOfDocument:"; /* Ctrl + Home */
"^\UF72B" = "moveToEndOfDocument:"; /* Ctrl + End */

@mrjoecastellon
Copy link

mrjoecastellon commented Mar 22, 2022

Working perfectly on MacOS Monterey 12.0.1

Thank you!

@mrjoecastellon
Copy link

mrjoecastellon commented Mar 22, 2022

"^\UF702" = "moveWordLeft:"; // ctrl-left
"^\UF703" = "moveWordRight:"; // ctrl-right

This doesn't work on BigSur. Anyone know the correct way?

@jlahijani These have changed to moveWordBackward and moveWordForward.

Odd. Those work for me on Monterey without changing "left" or "right" to "backward" / "forward"

πŸ€”

@srsudar
Copy link

srsudar commented Mar 26, 2022

Is there a way to enter escape? I'd like to globally remap ctrl+[ to escape without downloading something as heavyweight as Karabiner.

I've tried various combinations of:

"^[" = "\U001B";
"^[" = ("insertText:", "\U001B");

I don't see escape listed here as an option.

Does anyone know if there's another way to do that?

@lotyp
Copy link

lotyp commented Apr 17, 2022

Can't find "space" key anywhere πŸ˜€ For example Cmd+Space to trigger Spotlight.

Upd. ok, will try to go with U+0020 \U0020

@mrjoecastellon
Copy link

mrjoecastellon commented Apr 17, 2022

Can't find "space" key anywhere πŸ˜€ For example Cmd+Space to trigger Spotlight.

Upd. ok, will try to go with U+0020 \U0020

Thanks for updating when you found the code!

Did it work for you?

@lotyp
Copy link

lotyp commented Apr 21, 2022

No, also tried to go with \040 which mac sees as Space, but it does not work when I set it through console:

defaults write "Apple Global Domain" NSUserKeyEquivalents -dict-add "System Preferences\\U2026" "@$\040"

If I choose other char than space, then hotkeys are working...

image

Found spacebar character here:

https://github.com/ttscoff/KeyBindings/blob/master/DefaultKeyBinding.dict

Edit:

πŸŽ‰πŸŽ‰πŸŽ‰

Works:

Just an example: (Shift + Cmd + Space)

defaults write com.apple.universalaccess com.apple.custommenu.apps -array NSGlobalDomain
defaults write "Apple Global Domain" NSUserKeyEquivalents -dict-add "System Preferences\\U2026" "@$\U0020"

@mrjoecastellon
Copy link

mrjoecastellon commented Apr 21, 2022

No, also tried to go with \040 which mac sees as Space, but it does not work when I set it through console:

defaults write "Apple Global Domain" NSUserKeyEquivalents -dict-add "System Preferences\\U2026" "@$\040"

If I choose other char than space, then hotkeys are working...

image

Found spacebar character here:

https://github.com/ttscoff/KeyBindings/blob/master/DefaultKeyBinding.dict

Edit:

πŸŽ‰πŸŽ‰πŸŽ‰

Works:

Just an example: (Shift + Cmd + Space)

defaults write com.apple.universalaccess com.apple.custommenu.apps -array NSGlobalDomain defaults write "Apple Global Domain" NSUserKeyEquivalents -dict-add "System Preferences\\U2026" "@$\U0020"

Cool find!! Thank you so much for sharing!

@LeeBinder
Copy link

LeeBinder commented May 12, 2022

Does anybody know how I can toggle the keyboard command for the (floating) application switcher (in Windows: Alt + Tab) from ⌘β‡₯ (Cmd + Tab) to βŒƒβ‡₯ (Ctrl. + Tab)? The corresponding line would be:

"^\U0009" = "???:"; // application switcher

The question is: what to enter as correct identifier instead of ???

@TwiggyWan
Copy link

TwiggyWan commented Nov 5, 2022

Does anybody know how I can toggle the keyboard command for the (floating) application switcher (in Windows: Alt + Tab) from ⌘β‡₯ (Cmd + Tab) to βŒƒβ‡₯ (Ctrl. + Tab)? The corresponding line would be:

"^\U0009" = "???:"; // application switcher

The question is: what to enter as correct identifier instead of ???

Dunno how to do it through the dict, but you could use https://alt-tab-macos.netlify.app/ then customize the shortcut in this program's preferences.

@LeeBinder
Copy link

LeeBinder commented Nov 5, 2022

Thanks @TwiggyWan for the pointer. I had lost sight of AltTab and thanks to your link see that it's in constant development.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment