-
-
Save trusktr/1e5e516df4e8032cbc3d to your computer and use it in GitHub Desktop.
/* ~/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 */ | |
} |
using FileMonitor from objective-see we know that Chrome indeed reads DefaultKeyBinding.dict and actually uses them everywhere from omnibox to <textarea> !!!
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
@joaobcjr It indeed is weird, but i don't think there's anything we can do....