Skip to content

Instantly share code, notes, and snippets.

@trcook
Last active July 25, 2018 17:40
Show Gist options
  • Save trcook/3196919b905ad38fb2be to your computer and use it in GitHub Desktop.
Save trcook/3196919b905ad38fb2be to your computer and use it in GitHub Desktop.
private.xml for keyremap4macbook (karabiner). This file adds a bunch of app-specific hacks that enable emacs-style navigation. Ex. using option-f to go forward one word
<?xml version="1.0"?>
<root>
<appdef>
<appname>MACVIM</appname>
<equal>org.vim.MacVim</equal>
</appdef>
<appdef>
<appname>CHROME</appname>
<equal>com.google.Chrome</equal>
</appdef>
<appdef>
<appname>SAFARI</appname>
<equal>com.apple.Safari</equal>
</appdef>
<appdef>
<appname>MATHEMATICA</appname>
<equal>com.wolfram.Mathematica</equal>
</appdef>
<appdef>
<appname>RSTUDIO</appname>
<equal>org.rstudio.RStudio</equal>
</appdef>
<appdef>
<appname>ATOM</appname>
<equal>com.github.atom</equal>
</appdef>
<appdef>
<appname>SUBLIME</appname>
<equal>com.sublimetext.3</equal>
</appdef>
<appdef>
<appname>ALFRED</appname>
<equal>com.runningwithcrayons.Alfred-2</equal>
</appdef>
<appdef>
<appname>PYCHARM</appname>
<equal>com.jetbrains.pycharm</equal>
</appdef>
<appdef>
<appname>ITERM2</appname>
<equal>com.googlecode.iterm2</equal>
</appdef>
<appdef>
<appname>JAVA_VNC</appname>
<equal>net.java.openjdk.cmd</equal>
</appdef>
<replacementdef>
<replacementname>EMACS_MODE_IGNORE_APPS</replacementname>
<replacementvalue>
ALFRED,
EMACS,
SUBLIME,
VI,
TERMINAL,
ITERM2,
Atom,
JAVA_VNC
</replacementvalue>
</replacementdef>
<replacementdef>
<replacementname>EMACS_MODE_IGNORE_ARROW_APPS</replacementname>
<replacementvalue>
ITERM2,
SUBLIME,
JAVA_VNC
</replacementvalue>
</replacementdef>
<item>
<name>Change Right Command Key to Escape</name>
<identifier>private.right_command_to_escape</identifier>
<only>MACVIM</only>
<autogen>__KeyToKey__ KeyCode::COMMAND_R, KeyCode::ESCAPE</autogen>
</item>
<item>
<name>Change Right Option Key to Left Shift</name>
<identifier>private.right_option_to_Left_shift</identifier>
<autogen>__KeyToKey__ KeyCode::OPTION_R, KeyCode::SHIFT_L</autogen>
</item>
<item>
<name>Change Command Esc to Command `</name>
<identifier>private.command_esc_to_command_backtick</identifier>
<autogen>__KeyToKey__ KeyCode::ESCAPE, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND,
KeyCode::BACKQUOTE, ModifierFlag::COMMAND_R </autogen>
</item>
<!--
#----writelabelhere-------------------------------------------------------------
#
# Enable to use control space but
# disable through conveintional keys
#
#
#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-->
<item>
<name>Normal exit from mark_set mode</name>
<item>
<name> Exit with Command C or Command X</name>
<identifier>private.emacsmode_ex_controlSpace_core</identifier>
<autogen>
__KeyToKey__
KeyCode::X, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND | ModifierFlag::SHIFT_L | ModifierFlag::NONE,
KeyCode::VK_LOCK_SHIFT_L_FORCE_OFF,
KeyCode::X, ModifierFlag::COMMAND_L,
KeyCode::VK_CONFIG_FORCE_OFF_notsave_emacsmode_ex_controlSpace_core,
Option::NOREPEAT,
</autogen>
<autogen>
__KeyToKey__
KeyCode::C, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND | ModifierFlag::SHIFT_L | ModifierFlag::NONE,
KeyCode::VK_LOCK_SHIFT_L_FORCE_OFF,
KeyCode::C, ModifierFlag::COMMAND_L,
KeyCode::VK_CONFIG_FORCE_OFF_notsave_emacsmode_ex_controlSpace_core,
Option::NOREPEAT,
</autogen>
<autogen>
__KeyToKey__
KeyCode::V, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND | ModifierFlag::SHIFT_L | ModifierFlag::NONE,
KeyCode::VK_LOCK_SHIFT_L_FORCE_OFF,
KeyCode::V, ModifierFlag::COMMAND_L,
KeyCode::VK_CONFIG_FORCE_OFF_notsave_emacsmode_ex_controlSpace_core,
Option::NOREPEAT,
</autogen>
<autogen>
__KeyToKey__
KeyCode::G, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL | ModifierFlag::SHIFT_L | ModifierFlag::NONE,
KeyCode::VK_LOCK_SHIFT_L_FORCE_OFF,
KeyCode::VK_CONFIG_FORCE_OFF_notsave_emacsmode_ex_controlSpace_core,
Option::NOREPEAT,
</autogen>
<autogen>
__KeyToKey__
KeyCode::SPACE, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL | ModifierFlag::SHIFT_L | ModifierFlag::NONE,
KeyCode::VK_LOCK_SHIFT_L_FORCE_OFF,
KeyCode::VK_CONFIG_FORCE_OFF_notsave_emacsmode_ex_controlSpace_core,
Option::NOREPEAT,
</autogen>
<autogen>
__KeyToKey__
KeyCode::DELETE | ModifierFlag::SHIFT_L | ModifierFlag::NONE,
KeyCode::VK_LOCK_SHIFT_L_FORCE_OFF,
KeyCode::DELETE,
KeyCode::VK_CONFIG_FORCE_OFF_notsave_emacsmode_ex_controlSpace_core,
Option::NOREPEAT,
</autogen>
<autogen>
__KeyToKey__
KeyCode::RETURN | ModifierFlag::SHIFT_L | MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL,
KeyCode::VK_LOCK_SHIFT_L_FORCE_OFF,
KeyCode::RETURN | ModifierFlag::CONTROL_L,
KeyCode::VK_CONFIG_FORCE_OFF_notsave_emacsmode_ex_controlSpace_core,
Option::NOREPEAT,
</autogen>
<autogen>
__KeyToKey__
KeyCode::ENTER | ModifierFlag::SHIFT_L | MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL,
KeyCode::VK_LOCK_SHIFT_L_FORCE_OFF,
KeyCode::ENTER | ModifierFlag::CONTROL_L,
KeyCode::VK_CONFIG_FORCE_OFF_notsave_emacsmode_ex_controlSpace_core,
Option::NOREPEAT,
</autogen>
<autogen>
__KeyToKey__
KeyCode::ENTER | ModifierFlag::SHIFT_L | MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND,
KeyCode::VK_LOCK_SHIFT_L_FORCE_OFF,
KeyCode::ENTER | ModifierFlag::COMMAND_L,
KeyCode::VK_CONFIG_FORCE_OFF_notsave_emacsmode_ex_controlSpace_core,
Option::NOREPEAT,
</autogen>
<autogen>
__KeyToKey__
KeyCode::RETURN | ModifierFlag::SHIFT_L | MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND,
KeyCode::VK_LOCK_SHIFT_L_FORCE_OFF,
KeyCode::RETURN | ModifierFlag::COMMAND_L,
KeyCode::VK_CONFIG_FORCE_OFF_notsave_emacsmode_ex_controlSpace_core,
Option::NOREPEAT,
</autogen>
</item>
<item>
<name>Enable Control+Space</name>
<identifier>private.emacsmode_ex_controlSpace</identifier>
<not>{{EMACS_MODE_IGNORE_APPS}}</not>
<autogen>
__KeyToKey__
KeyCode::SPACE, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL | ModifierFlag::NONE,
KeyCode::VK_LOCK_SHIFT_L_FORCE_ON,
KeyCode::VK_CONFIG_FORCE_ON_notsave_emacsmode_ex_controlSpace_core
</autogen>
</item>
</item>
<!--
END of mark-sst
-->
<item>
<name>Minor fix for mark-set mode</name>
<identifier>private.mark-unset-mode-copy</identifier>
<autogen>__KeyToKey__ KeyCode::C, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND,
KeyCode::W, ModifierFlag::OPTION_L</autogen>
</item>
<!-- TAB key changed to act as ESC, for MacVim only -->
<item>
<name>Change Tab to Esc in MacVim</name>
<identifier>private.macvimdef</identifier>
<only>MACVIM</only>
<autogen>__KeyToKey__ KeyCode::TAB, ModifierFlag::NONE, KeyCode::ESCAPE</autogen>
</item>
<!-- Emacs for Mathematica keys -->
<item>
<name>Change option to left right in mathematica</name>
<identifier>private.mathematicadef</identifier>
<only>MATHEMATICA</only>
<autogen>__KeyToKey__
KeyCode::B, ModifierFlag::OPTION_L,
KeyCode::CURSOR_LEFT, ModifierFlag::OPTION_L
</autogen>
<autogen>__KeyToKey__
KeyCode::B, ModifierFlag::OPTION_R,
KeyCode::CURSOR_RIGHT, ModifierFlag::OPTION_L
</autogen>
<autogen>__KeyToKey__
KeyCode::F, ModifierFlag::OPTION_L,
KeyCode::CURSOR_RIGHT, ModifierFlag::OPTION_L
</autogen>
<autogen>__KeyToKey__
KeyCode::F, ModifierFlag::OPTION_R,
KeyCode::CURSOR_RIGHT, ModifierFlag::OPTION_L
</autogen>
<autogen>__KeyToKey__
KeyCode::V, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL,
KeyCode::PAGEDOWN
</autogen>
<autogen>__KeyToKey__
KeyCode::V, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_OPTION,
KeyCode::PAGEUP
</autogen>
</item>
<!--
#----RSTUDIO--------------------------------------------------------------
#
# Changes for rstudio, chrome and others to default emacs keys
#
#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-->
<item>
<name>Fix Keys for Rstudio, Chrome and Safari</name>
<identifier>private.rstudiodef</identifier>
<only>RSTUDIO,CHROME,SAFARI</only>
<!-- Back character/word -->
<autogen>__KeyToKey__
KeyCode::B, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_OPTION,
KeyCode::CURSOR_LEFT, ModifierFlag::OPTION_L
</autogen>
<autogen>__KeyToKey__
KeyCode::B, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL,
KeyCode::CURSOR_LEFT
</autogen>
<!-- Forward character/word -->
<autogen>__KeyToKey__
KeyCode::F, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL,
KeyCode::CURSOR_RIGHT
</autogen>
<autogen>__KeyToKey__
KeyCode::F, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_OPTION,
KeyCode::CURSOR_RIGHT, ModifierFlag::OPTION_L
</autogen>
<!-- Line Down -->
<autogen>__KeyToKey__
KeyCode::N, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL,
KeyCode::CURSOR_DOWN
</autogen>
<!-- Line Up -->
<autogen>__KeyToKey__
KeyCode::P, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL,
KeyCode::CURSOR_UP
</autogen>
<!-- page up/down -->
<autogen>__KeyToKey__
KeyCode::V, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL,
KeyCode::PAGEDOWN
</autogen>
<autogen>__KeyToKey__
KeyCode::V, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_OPTION,
KeyCode::PAGEUP
</autogen>
<!-- Forward delete to control d -->
<autogen>__KeyToKey__
KeyCode::D, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_OPTION,
KeyCode::FORWARD_DELETE, ModifierFlag::OPTION_L
</autogen>
</item>
<!--
#----more emacs fixes --------------------------------------------------------------
#
# some options for fixing emacs mode in pycharm
#
#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-->
<item>
<name>Option+BF to Option+Left/Right -- fix for pycharm</name>
<identifier>private.emacsmode_optionBF</identifier>
<not>{{EMACS_MODE_IGNORE_ARROW_APPS}}</not>
<modifier_not>
ModifierFlag::COMMAND_L, ModifierFlag::COMMAND_R,
ModifierFlag::CONTROL_L, ModifierFlag::CONTROL_R
</modifier_not>
<autogen>
__KeyToKey__
KeyCode::B, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_OPTION,
KeyCode::CURSOR_LEFT, ModifierFlag::OPTION_L,
</autogen>
<autogen>
__KeyToKey__
KeyCode::F, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_OPTION,
KeyCode::CURSOR_RIGHT, ModifierFlag::OPTION_L,
</autogen>
</item>
</root>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment