-
-
Save zsimic/1367779 to your computer and use it in GitHub Desktop.
| { | |
| /* ~/Library/KeyBindings/DefaultKeyBinding.dict | |
| See https://gist.github.com/zsimic/1367779, prefix cheatsheet: | |
| Char Short Key | |
| $ S- Shift ⇧ | |
| ^ C- CTRL ⌃ | |
| ~ O- Option ⌥ (⊞ Win key position on PC) | |
| @ M- Command ⌘ (Alt position on PC) | |
| # Numeric Keypad | |
| */ | |
| /*---- Navigation ----*/ | |
| /* Up/down is mostly for a nicer laptop navigation (no Home, PgUp etc keys) */ | |
| "~\Uf700" = "pageUp:"; /* O-up Page up */ | |
| "~$\Uf700" = "pageUpAndModifySelection:"; /* O-S-up Select + page up */ | |
| "@\Uf700" = "moveToBeginningOfDocument:"; /* M-up Beginning of document */ | |
| "@$\Uf700" = "moveToBeginningOfDocumentAndModifySelection:"; /* M-S-up Select to beginning of document */ | |
| "~\Uf701" = "pageDown:"; /* O-down Page down */ | |
| "~$\Uf701" = "pageDownpAndModifySelection:"; /* O-S-down Select + page down */ | |
| "@\Uf701" = "moveToEndOfDocument:"; /* M-down End of document */ | |
| "@$\Uf701" = "moveToEndOfDocumentAndModifySelection:"; /* M-S-down Select to end of document */ | |
| /* Windows defaults are more convenient */ | |
| "^\Uf702" = "moveWordBackward:"; /* C-left Move word left */ | |
| "^$\Uf702" = "moveWordBackwardAndModifySelection:"; /* C-S-left Select word left */ | |
| "^\Uf703" = "moveWordForward:"; /* C-right Move word right */ | |
| "^$\Uf703" = "moveWordForwardAndModifySelection:"; /* C-S-right Select word right */ | |
| "\Uf729" = "moveToBeginningOfLine:"; /* home Beginning of line */ | |
| "$\Uf729" = "moveToBeginningOfLineAndModifySelection:"; /* S-home Select to beginning of line */ | |
| "^\Uf729" = "moveToBeginningOfDocument:"; /* C-home Beginning of document */ | |
| "^$\Uf729" = "moveToBeginningOfDocumentAndModifySelection:"; /* C-S-home Select to beginning of document */ | |
| "\Uf72b" = "moveToEndOfLine:"; /* end End of line */ | |
| "$\Uf72b" = "moveToEndOfLineAndModifySelection:"; /* S-end Select to end of line */ | |
| "^\Uf72b" = "moveToEndOfDocument:"; /* C-end End of document */ | |
| "^$\Uf72b" = "moveToEndOfDocumentAndModifySelection:"; /* C-S-end Select to end of document */ | |
| "\Uf72c" = "pageUp:"; /* PageUp Page up */ | |
| "$\Uf72c" = "pageUpAndModifySelection:"; /* S-PageUp Select + page up */ | |
| "@\Uf72c" = "scrollPageUp:"; /* M-PageUp Scroll page up */ | |
| "\Uf72d" = "pageDown:"; /* PageDn Page down */ | |
| "$\Uf72d" = "pageDownAndModifySelection:"; /* S-PageDn Select + page down */ | |
| "@\Uf72d" = "scrollPageDown:"; /* M-PageDn Scroll page down */ | |
| /*---- Editing ----*/ | |
| "^\U007f" = "deleteWordBackward:"; /* C-Del Delete word backward */ | |
| "^\Uf728" = "deleteWordForward:"; /* C-FwdDel Delete word forward */ | |
| "$\U000a" = "insertLineBreak:"; /* S-Ret Line break */ | |
| } |
Example DefaultKeyBinding.dict
{
"~w" = selectWord:;
"~j" = (selectWord:, cut:);
"~g" = (selectWord:, copy:);
"~h" = (selectWord:, paste:);
"~l" = selectParagraph:;
"~z" = (selectParagraph:, deleteBackward:);
"~x" = (selectParagraph:, cut:);
"~c" = (selectParagraph:, copy:);
"~s" = (moveToBeginningOfParagraphAndModifySelection:, moveToEndOfParagraphAndModifySelection:);
"~y" = (moveToBeginningOfParagraphAndModifySelection:, moveToEndOfParagraphAndModifySelection:, deleteBackward:);
"~q" = (moveToBeginningOfParagraphAndModifySelection:, moveToEndOfParagraphAndModifySelection:, cut:);
"~m" = (moveToBeginningOfParagraphAndModifySelection:, moveToEndOfParagraphAndModifySelection:, copy:);
"~a" = (moveToBeginningOfParagraphAndModifySelection:, copy:);
"~r" = (moveToEndOfParagraphAndModifySelection:, copy:);
"~t" = (moveToBeginningOfParagraphAndModifySelection:, cut:);
"~k" = (moveToEndOfParagraphAndModifySelection:, cut:);
"~v" = (delete:, setMark:, paste:, selectToMark:);
"~d" = (setMark:, moveToBeginningOfParagraphAndModifySelection:, moveToEndOfParagraphAndModifySelection:, delete:, yank:, insertNewlineIgnoringFieldEditor:, yank:, swapWithMark:);
"~-" = lowercaseWord:;
"~=" = uppercaseWord:;
"~." = capitalizeWord:;
"@\r" = (moveToEndOfParagraph:, insertNewlineIgnoringFieldEditor:, deleteToBeginningOfParagraph:);
"$\r" = (moveToBeginningOfParagraph:, insertNewlineIgnoringFieldEditor:, moveBackward:);
"~\Uf700" = (moveUp:, moveUp:, moveUp:, moveUp:, moveUp:, moveUp:, moveUp, moveUp);
"~\Uf701" = (moveDown:, moveDown:, moveDown:, moveDown:, moveDown:, moveDown:, moveDown, moveDown);
"~$\Uf700" = (moveUpAndModifySelection:, moveUpAndModifySelection:, moveUpAndModifySelection:, moveUpAndModifySelection:, moveUpAndModifySelection:, moveUpAndModifySelection:, moveUpAndModifySelection, moveUpAndModifySelection);
"~$\Uf701" = (moveDownAndModifySelection:, moveDownAndModifySelection:, moveDownAndModifySelection:, moveDownAndModifySelection:, moveDownAndModifySelection:, moveDownAndModifySelection:, moveDownAndModifySelection, moveDownAndModifySelection);
"^~\Uf700" = (selectParagraph:, setMark:, deleteToMark:, moveBackward:, moveToBeginningOfParagraph:, setMark:, yank:, moveBackward:, selectToMark:);
"^~\Uf701" = (selectParagraph:, setMark:, deleteToMark:, moveToEndOfParagraph:, moveForward:, setMark:, yank:, moveBackward:, selectToMark:);
"@\Uf728" = deleteToEndOfParagraph:;
"^," = moveToBeginningOfDocument:;
"^." = moveToEndOfDocument:;
"^$," = moveToBeginningOfDocumentAndModifySelection:;
"^$." = moveToEndOfDocumentAndModifySelection:;
"^~," = (moveToBeginningOfDocumentAndModifySelection:, deleteBackward);
"^~." = (moveToEndOfDocumentAndModifySelection:, deleteBackward);
"^d" = deleteToBeginningOfParagraph:;
}
Notes
Key combinations that enter dead key states cannot be reassigned.
They include option-E, option-I, option-N, option-U, and option-` in the U.S. keyboard layout.
setMark:, selectToMark: removes anchoring so that the methods that modify a selection expand the selection.
delete: (bound to the clear key) doesn't delete anything if there is no selection.
deleteBackward: (bound to the delete key) doesn't add deleted selections to the kill ring.
deleteBackward: doesn't add single character selections to the kill ring but setMark:, deleteToMark: does.
scrollPageDown: (bound to page down) doesn't move the caret but pageDown: (bound to option-page down) does.
I haven't changed the page down key to pageDown: because pageDown: doesn't do anything in Safari or other web views.
moveToBeginningOfParagraphAndModifySelection:, moveToEndOfParagraphAndModifySelection: or
selectParagraph:, moveForwardAndModifySelection:, moveBackwardAndModifySelection:, moveBackwardAndModifySelection:, moveToEndOfParagraphAndModifySelection:
select a line without a newline.
delete:, setMark:, paste:, selectToMark: pastes text and selects the pasted text.
If you remove the delete: method, the original selection is kept when the original selection is longer than the pasted text.
defaults write -g NSTextKillRingSize -int 100 makes yankPop: cycle through previously killed pieces of text.
Methods
- http://www.hcs.harvard.edu/~jrus/site/selectors.html
- NSResponder
- NSApplication
- NSDocument
- NSTextView
- NSWindow
Emacs keybindings
{
"^ " = setMark:;
"^/" = undo:;
"^u" = deleteToBeginningOfParagraph:;
"^w" = deleteToMark:;
"^x" = {
"^x" = swapWithMark:;
"^m" = selectToMark:;
};
"^V" = pageDownAndModifySelection:;
"~@" = selectWord:;
"~b" = moveWordBackward:;
"~c" = (capitalizeWord:, moveForward:, moveForward:);
"~d" = deleteWordForward:;
"~f" = moveWordForward:;
"~l" = (lowercaseWord:, moveForward:, moveForward:);
"~u" = (uppercaseWord:, moveForward:, moveForward:);
"~v" = pageUp:;
"~w" = (deleteToMark:, setMark:, yank:, swapWithMark:);
"~B" = moveWordBackwardAndModifySelection:;
"~F" = moveWordForwardAndModifySelection:;
"~V" = pageUpAndModifySelection:;
}
This page includes a few more keybindings, but for example transposeWords: doesn't work in most applications, openDocument: and saveDocument: don't work in applications that use auto-save, and performClose: doesn't work everywhere either.
More links
-
https://github.com/ttscoff/KeyBindings/blob/master/DefaultKeyBinding.dict
-
Salvaged from
gnustep/apps/gorm/tags/Gorm-0_1_0/ClassInformation.plist:
{
IBInspector = {
Actions = (
"ok:",
"revert:",
"touch:"
);
Outlets = (
window
);
Super = NSObject;
};
NSApplication = {
Super = NSResponder;
Outlets = (
delegate
);
Actions = (
"arrangeInFront:",
"hide:",
"hideOtherApplications:",
"miniaturizeAll:",
"orderFrontColorPanel:",
"orderFrontDataLinkPanel:",
"orderFrontHelpPanel:",
"orderFrontStandardAboutPanel:",
"orderFrontStandardInfoPanel:",
"runPageLayout:",
"stop:",
"terminate:",
"unhide:",
"unhideAllApplications:"
);
};
NSButton = {
Super = NSControl;
};
NSBrowser =
{
Outlets = (
delegate
);
Super = NScontrol;
Actions = (
"doClick:",
"doDoubleClick:"
);
};
NSColorWell = {
Super = NSControl;
Actions = (
"takeColorFrom:"
);
};
NSControl = {
Actions = (
"takeDoubleValueFrom:",
"takeFloatValueFrom:",
"takeIntValueFrom:",
"takeObjectValueFrom:",
"takeStringValueFrom:"
);
Outlets = (
target
);
Super = NSView;
};
NSDocumentController =
{
Super = NSObject;
Actions = (
"saveAllDocuments:",
"openDocument:",
"newDocument:",
"clearRecentDocuments:"
);
};
NSDocument =
{
Super = NSObject;
Actions = (
"runPageLayout:",
"printDocument:",
"saveDocument:",
"saveDocumentAs:",
"saveDocumentTo:",
"revertDocumentToSaved:"
);
};
NSDrawer =
{
Super = NSResponder;
Actions = (
"close:",
"open:",
"toggle:"
);
Outlets = (
delegate
);
};
NSFontManager =
{
Super = NSResponder;
Actions = (
"addFontTrait:",
"removeFontTrait:",
"modifyFont:",
"modifyFontViaPanel:",
"orderFrontFontPanel:"
);
};
NSHelpManager =
{
Super = NSResponder;
Actions = (
"showHelp:",
"activateContextHelpMode:"
);
};
NSMenu = {
Super = NSObject;
};
NSMenuItem = {
Outlets = (
target
);
Super = NSObject;
};
NSPanel = {
Super = NSWindow;
};
NSProgressIndicator = {
Super = NSObject;
Actions = (
"animate:",
"startAnimation:",
"stopAnimation:"
);
};
NSSlider = {
Super = NSControl;
};
NSTextField = {
Outlets = (
delegate
);
Super = NSControl;
};
NSResponder = {
Super = NSObject;
Actions = (
"selectAll:",
"deselectAll:",
"selectText:"
);
};
NSTabView = {
Super = NSView;
Actions = (
"selectFirstTabViewItem:",
"selectLastTabViewItem:",
"selectNextTabViewItem:",
"selectPreviousTabViewItem:",
"takeSelectedTabViewItemFromSender:"
);
Outlets = (
delegate
);
};
NSText = {
Super = NSView;
Actions = (
"toggleRuler:",
"copy:",
"copyFont:",
"copyRuler:",
"cut:",
"delete:",
"paste:",
"pasteFont:",
"pasteRuler:",
"selectAll:",
"changeFont:",
"alignCenter:",
"alignLeft:",
"alignRight:",
"subscript:",
"superscript:",
"underline:",
"unscript:",
"checkSpelling:",
"showGuessPanel:",
"changeSpelling:",
"ignoreSpelling:"
);
Outlets = (
delegate
);
};
NSTextView = {
Super = NSText;
Actions = (
"changeColor:",
"alignJustified:",
"pasteAsPlainText:",
"pasteAsRichText:",
"turnOffKerning:",
"tightenKerning:",
"loosenKerning:",
"useStandardKerning:",
"turnOffLigatures:",
"useStandardLigatures:",
"useAllLigatures:",
"raiseBaseline:",
"lowerBaseline:",
"toggleTraditionalCharacterShape:",
"toggleContinuousSpellChecking:"
);
};
NSView = {
Super = NSResponder;
Actions = (
"fax:",
"print:"
);
};
NSWindow = {
Outlets = (
delegate
);
Super = NSResponder;
Actions = (
"performZoom:",
"zoom:",
"orderBack:",
"orderFront:",
"orderOut:",
"makeKeyAndOrderFront:",
"selectNextKeyView:",
"selectPreviousKeyView:",
"performClose:",
"deminiaturize:",
"miniaturize:",
"performMiniaturize:",
"fax:",
"print:",
"toggleToolbarShown:",
"runToolbarCustomizationPalette:"
);
};
NSWindowController = {
Outlets = (
document
);
Super = NSResponder;
Actions = (
"showWindow:"
);
};
FirstResponder = {
Actions = (
"activateContextHelpMode:",
"alignCenter:",
"alignJustified:",
"alignLeft:",
"alignRight:",
"arrangeInFront:",
"cancel:",
"capitalizeWord:",
"changeColor:",
"changeFont:",
"checkSpelling:",
"close:",
"complete:",
"copy:",
"copyFont:",
"copyRuler:",
"cut:",
"delete:",
"deleteBackward:",
"deleteForward:",
"deleteToBeginningOfLine:",
"deleteToBeginningOfParagraph:",
"deleteToEndOfLine:",
"deleteToEndOfParagraph:",
"deleteToMark:",
"deleteWordBackward:",
"deleteWordForward:",
"deminiaturize:",
"deselectAll:",
"fax:",
"hide:",
"hideOtherApplications:",
"indent:",
"loosenKerning:",
"lowerBaseline:",
"lowercaseWord:",
"makeKeyAndOrderFront:",
"miniaturize:",
"miniaturizeAll:",
"moveBackward:",
"moveBackwardAndModifySelection:",
"moveDown:",
"moveDownAndModifySelection:",
"moveForward:",
"moveForwardAndModifySelection:",
"moveLeft:",
"moveRight:",
"moveToBeginningOfDocument:",
"moveToBeginningOfLine:",
"moveToBeginningOfParagraph:",
"moveToEndOfDocument:",
"moveToEndOfLine:",
"moveToEndOfParagraph:",
"moveUp:",
"moveUpAndModifySelection:",
"moveWordBackward:",
"moveWordBackwardAndModifySelection:",
"moveWordForward:",
"moveWordForwardAndModifySelection:",
"ok:",
"open:",
"orderBack:",
"orderFront:",
"orderFrontColorPanel:",
"orderFrontDataLinkPanel:",
"orderFrontHelpPanel:",
"orderFrontStandardAboutPanel:",
"orderFrontStandardInfoPanel:",
"orderOut:",
"pageDown:",
"pageUp:",
"paste:",
"pasteAsPlainText:",
"pasteAsRichText:",
"pasteFont:",
"pasteRuler:",
"performClose:",
"performMiniaturize:",
"performZoom:",
"print:",
"raiseBaseline:",
"runPageLayout:",
"runToolbarCustomizationPalette:",
"scrollLineDown:",
"scrollLineUp:",
"scrollPageDown:",
"scrollPageUp:",
"scrollViaScroller:",
"selectAll:",
"selectLine:",
"selectNextKeyView:",
"selectParagraph:",
"selectPreviousKeyView:",
"selectText:",
"selectText:",
"selectToMark:",
"selectWord:",
"showContextHelp:",
"showGuessPanel:",
"showHelp:",
"showWindow:",
"stop:",
"subscript:",
"superscript:",
"swapWithMark:",
"takeDoubleValueFrom:",
"takeFloatValueFrom:",
"takeIntValueFrom:",
"takeObjectValueFrom:",
"takeStringValueFrom:",
"terminate:",
"tightenKerning:",
"toggle:",
"toggleContinuousSpellChecking:",
"toggleRuler:",
"toggleToolbarShown:",
"toggleTraditionalCharacterShape:",
"transpose:",
"transposeWords:",
"turnOffKerning:",
"turnOffLigatures:",
"underline:",
"unhide:",
"unhideAllApplications:",
"unscript:",
"uppercaseWord:",
"useAllLigatures:",
"useStandardKerning:",
"useStandardLigatures:",
"yank:",
"zoom:",
);
Super = NSObject;
};
}
You've assembled an amazing resource... Thank you!
This is really helpful. Thank you!
Great resource! Thank you!
Just a note if anyone's faced the same issue. For the following to work I had to disable or change the Mission Control shortcuts for moving spaces left and right.
/* Windows defaults are more convenient */
"^\Uf702" = "moveWordBackward:"; /* C-left Move word left */
"^$\Uf702" = "moveWordBackwardAndModifySelection:"; /* C-S-left Select word left */
"^\Uf703" = "moveWordForward:"; /* C-right Move word right */
"^$\Uf703" = "moveWordForwardAndModifySelection:"; /* C-S-right Select word right */
Thank you for this, truly helpful. Question, is there a shortcut string that would specifically point to the right option key? Can left and right be differentiated in the key bindings?
StandardKeyBinding.dict
See the built-in defaults:
Example output: