Last active
December 10, 2024 09:25
-
-
Save trusktr/1e5e516df4e8032cbc3d to your computer and use it in GitHub Desktop.
My DefaultKeyBinding.dict for Mac OS X
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* ~/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 */ | |
} |
see my dump of standardkeybinding.dict and AppKit symbols for bindable methods, maybe you will get some new ideas
https://gist.github.com/hym3242/8e8bc10a2fed8e55973c500f1798c234
here is my binding: explore for more yourself.
{
"^~h" = "deleteWordBackward:"; //bash style...
"^~d" = "deleteWordForward:"; //ibid
"^u" = "deleteToBeginningOfParagraph:"; //unix style kill, ONLY THIS METHOD deleteToBeginningOfParagraph: CAN ADD SELECTION TO YANK BUFFER!(or so it seems...)
"^w" = "deleteWordBackward:"; //unix style werase
"~a" = "selectParagraph:"; //cocoa paragraph ≈ unix line
"^m" = "insertNewline:"; //RETURN as in "Carriage Return"
"^j" = "insertNewlineIgnoringFieldEditor:"; //default also bound to opt+return, alternate newline, bypasses some editor smart features
"~v" = "pageUp:"; //you know your emacs.
"~V" = "pageUpAndModifySelection:"; //shift+option+v
"~A" = "selectWord:";
"~c" = "capitalizeWord:"; //uppercaseWord: method does not seem to work?
"~t" = "convertToTraditionalChinese:"; //convert selection
"~s" = "convertToSimplifiedChinese:"; //ibid.
"^J" = "insertLineBreak:"; //linebreak is different from newline. default also bound to ctrl+return
// add these to your liking
// "~h" = "deleteWordBackward:";
// "~d" = "deleteWordForward:";
// "~b" = "moveWordBackward:";
// "~f" = "moveWordForward:";
}
"^\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"
🤔
Need to remove the default control-left/right shortcuts in mission control in Settings -> Keyboard -> Keyboard Shortcuts -> Mission Control -> Mission Control
https://superuser.com/a/657851/756769
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
using FileMonitor from objective-see we know that Chrome indeed reads DefaultKeyBinding.dict and actually uses them everywhere from omnibox to <textarea> !!!