Skip to content

Instantly share code, notes, and snippets.

@astyagun
Last active January 29, 2025 10:08
Show Gist options
  • Save astyagun/fe665b93d9b79da584b0b9b41106d862 to your computer and use it in GitHub Desktop.
Save astyagun/fe665b93d9b79da584b0b9b41106d862 to your computer and use it in GitHub Desktop.
macOS Emacs-alike text editing shortcuts, including Russian keyboard layout
{
/* macOS Emacs-alike text editing shortcuts, including Russian keyboard layout
* Reference:
* - https://gist.github.com/zsimic/1367779
* - http://xahlee.info/kbd/osx_keybinding.html
* - http://xahlee.info/kbd/osx_keybinding_action_code.html
* - http://osxnotes.net/keybindings.html
* - https://gist.github.com/cheapRoc/9670905
* https://gist.github.com/astyagun/fe665b93d9b79da584b0b9b41106d862 */
/* Move */
"~f" = "moveWordForward:";
"~b" = "moveWordBackward:";
"~F" = "moveWordForwardAndModifySelection:";
"~B" = "moveWordBackwardAndModifySelection:";
"^f" = "moveForward:";
"^b" = "moveBackward:";
"^F" = "moveForwardAndModifySelection:";
"^B" = "moveBackwardAndModifySelection:";
"^a" = "moveToBeginningOfParagraph:";
"^e" = "moveToEndOfParagraph:";
"^A" = "moveToBeginningOfParagraphAndModifySelection:";
"^E" = "moveToEndOfParagraphAndModifySelection:";
"^n" = "moveDown:";
"^p" = "moveUp:";
"^N" = "moveDownAndModifySelection:";
"^P" = "moveUpAndModifySelection:";
"~v" = "pageUp:";
"~V" = "pageUpAndModifySelection:";
"^v" = "pageDown:";
"^V" = "pageDownAndModifySelection:";
"^l" = "centerSelectionInVisibleArea:";
"^x" = {
"^s" = "setMark:";
"^x" = "swapWithMark:";
"^m" = "selectToMark:";
};
"~<" = "moveToBeginningOfDocument:";
"~>" = "moveToEndOfDocument:";
/* Move in Russian */
"~а" = "moveWordForward:";
"~и" = "moveWordBackward:";
"~А" = "moveWordForwardAndModifySelection:";
"~И" = "moveWordBackwardAndModifySelection:";
"^а" = "moveForward:";
"^и" = "moveBackward:";
"^А" = "moveForwardAndModifySelection:";
"^И" = "moveBackwardAndModifySelection:";
"^ф" = "moveToBeginningOfParagraph:";
"^у" = "moveToEndOfParagraph:";
"^Ф" = "moveToBeginningOfParagraphAndModifySelection:";
"^У" = "moveToEndOfParagraphAndModifySelection:";
"^т" = "moveDown:";
"^з" = "moveUp:";
"^Т" = "moveDownAndModifySelection:";
"^З" = "moveUpAndModifySelection:";
"~м" = "pageUp:";
"~М" = "pageUpAndModifySelection:";
"^м" = "pageDown:";
"^М" = "pageDownAndModifySelection:";
"^д" = "centerSelectionInVisibleArea:";
"^ч" = {
"^ы" = "setMark:";
"^ч" = "swapWithMark:";
"^ь" = "selectToMark:";
};
"~Б" = "moveToBeginningOfDocument:";
"~Ю" = "moveToEndOfDocument:";
/* Change */
"^j" = "insertNewLine:";
"^m" = "insertNewlineIgnoringFieldEditor:";
"^h" = "deleteBackward:";
"^d" = "deleteForward:";
"^w" = "deleteWordBackward:";
"~d" = "deleteWordForward:";
"^u" = "deleteToBeginningOfParagraph:";
"^k" = "deleteToEndOfParagraph:";
"^o" = ("insertNewlineIgnoringFieldEditor:", "moveBackward:");
"~o" = ("moveToEndOfParagraph:", "insertNewlineIgnoringFieldEditor:");
"^y" = "yank:";
"^Y" = "yankPop:";
"^/" = "undo:";
"^?" = "redo:";
"^t" = "transpose:";
/* Change in Russian */
"^о" = "insertNewLine:";
"^ь" = "insertNewlineIgnoringFieldEditor:";
"^р" = "deleteBackward:";
"^в" = "deleteForward:";
"^ц" = "deleteWordBackward:";
"~в" = "deleteWordForward:";
"^г" = "deleteToBeginningOfParagraph:";
"^л" = "deleteToEndOfParagraph:";
"^щ" = ("insertNewlineIgnoringFieldEditor:", "moveBackward:");
"~щ" = ("moveToEndOfParagraph:", "insertNewlineIgnoringFieldEditor:");
"^н" = "yank:";
"^Н" = "yankPop:";
"^е" = "transpose:";
/* Change case */
"~l" = ("lowercaseWord:", "moveWordForward:", "moveWordBackward:");
"~u" = ("uppercaseWord:", "moveWordForward:", "moveWordBackward:");
"~c" = ("capitalizeWord:", "moveWordForward:", "moveWordBackward:");
/* Change case in Russian */
"~д" = ("lowercaseWord:", "moveWordForward:", "moveWordBackward:");
"~г" = ("uppercaseWord:", "moveWordForward:", "moveWordBackward:");
"~с" = ("capitalizeWord:", "moveWordForward:", "moveWordBackward:");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment