/* ~/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 */ | |
} |
The link in line 35 is dead, BTW http://osxnotes.net/keybindings.html
The link in line 35 is dead, BTW
http://osxnotes.net/keybindings.html
https://web.archive.org/web/20161220060333/http://osxnotes.net/keybindings.html
Just tried it in Catalina and works like a charm! Thanks!
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.
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/
Oh! So, no key binding is possible on BigSur?
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
Oh! So, no key binding is possible on BigSur?
Yes, it works!
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.
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.
~ : Option (Alt)
@ : Command (Apple)
Maybe they're reserved. Also remember to restart the app you're trying testing it in.
~ : 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.
"^\UF702" = "moveWordLeft:"; // ctrl-left
"^\UF703" = "moveWordRight:"; // ctrl-right
This doesn't work on BigSur. Anyone know the correct way?
"^\UF702" = "moveWordLeft:"; // ctrl-left
"^\UF703" = "moveWordRight:"; // ctrl-rightThis doesn't work on BigSur. Anyone know the correct way?
@jlahijani These have changed to moveWordBackward
and moveWordForward
.
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 */
Working perfectly on MacOS Monterey 12.0.1
Thank you!
"^\UF702" = "moveWordLeft:"; // ctrl-left
"^\UF703" = "moveWordRight:"; // ctrl-rightThis doesn't work on BigSur. Anyone know the correct way?
@jlahijani These have changed to
moveWordBackward
andmoveWordForward
.
Odd. Those work for me on Monterey without changing "left" or "right" to "backward" / "forward"
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?
Can't find "space" key anywhere
Upd. ok, will try to go with U+0020 \U0020
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?
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...
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"
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...
![]()
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!
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 ???
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.
Thanks @TwiggyWan for the pointer. I had lost sight of AltTab and thanks to your link see that it's in constant development.
Does DefaultKeyBinding.dict works on MacOS 13 Ventura ???
Yes it does, but it's worth mentioning that in pretty much all MacOS versions, there are some applications where the keybindings either work in part or not at all.
Yes it does, but it's worth mentioning that in pretty much all MacOS versions, there are some applications where the keybindings either work in part or not at all.
Yes, it really works. I reprogram the key cmd+e and it is default to find selection on Ventura. I change the key and it's working now. Thanks
I'm trying to use "^\U007F" = "deleteWordBackward:"; // ctrl-backspace and it works for most apps. However, in apps such as google docs and vscode, I think something overrides this hotkey and doesn't work. Does anyone know a solution to this issue?
I started off with KeyBindings to get the typing straight but realized that for me it only works for the Shift, Pos1, End stuff.
Windows key combo (D, E, 1...0, arrows) I bought BetterTouchTool in combination with BetterSnapTool
For switch windows with Alt+Tab I bought Witch because even though BetterTouchTool supports switching programs (MacOS default) it does not support switching windows which eventually drove me nuts.