Vim/Emacs keybinding for `Preview.app`
Does anybody have ideas about using emacs
/ vim
key binding for Preview.app
to browser pdf
files and how?
You can edit the "Up" and "Down" keyboard shortcuts by going to System Preferences / Keyboard / Application Shortcuts, add a new shortcut for Preview.app. I've mapped Option-J to down, Option-K to up. It won't let you map just J and K, for some reason. But at least you can now browse a PDF without leaving the home row.
As @tty suggested, using Karabiner is brilliant. I made some extra rules.
You can navigate using HJKL and zoom using FDER. Read the file for more information.
Here is my private.xml
:
<?xml version="1.0"?>
<root>
<appdef>
<appname>PREVIEW</appname>
<equal>com.apple.Preview</equal>
</appdef>
<item>
<name>Vi Navigation in Preview</name>
<identifier>private.preview.vinav</identifier>
<only>PREVIEW</only>
<uielementrole_not>AXTextField, AXTextArea</uielementrole_not>
<modifier_only>
ModifierFlag::NONE,
ModifierFlag::SHIFT_L | ModifierFlag::NONE,
ModifierFlag::SHIFT_R | ModifierFlag::NONE,
</modifier_only>
<appendix>Navigate using the HJKL keys</appendix>
<autogen>__KeyToKey__ KeyCode::J, KeyCode::CURSOR_DOWN</autogen>
<autogen>__KeyToKey__ KeyCode::K, KeyCode::CURSOR_UP</autogen>
<autogen>__KeyToKey__ KeyCode::H, KeyCode::CURSOR_LEFT</autogen>
<autogen>__KeyToKey__ KeyCode::L, KeyCode::CURSOR_RIGHT</autogen>
</item>
<item>
<name>Vi Zoom in Preview</name>
<identifier>private.preview.vizoom</identifier>
<only>PREVIEW</only>
<uielementrole_not>AXTextField, AXTextArea</uielementrole_not>
<modifier_only>
ModifierFlag::NONE,
ModifierFlag::SHIFT_L | ModifierFlag::NONE,
ModifierFlag::SHIFT_R | ModifierFlag::NONE,
</modifier_only>
<appendix>Zoom using E/R: out/in</appendix>
<appendix>Zoom to fit: F</appendix>
<appendix>Zoom to 100%: D</appendix>
<autogen>__KeyToKey__ KeyCode::F, KeyCode::KEYPAD_9, VK_COMMAND</autogen>
<autogen>__KeyToKey__ KeyCode::D, KeyCode::KEYPAD_0, VK_COMMAND</autogen>
<autogen>__KeyToKey__ KeyCode::R, KeyCode::KEYPAD_PLUS, VK_COMMAND</autogen>
<autogen>__KeyToKey__ KeyCode::E, KeyCode::KEYPAD_MINUS, VK_COMMAND</autogen>
</item>
</root>
Use this
Very excellent!!!
I found it recently.
https://pqrs.org/macosx/keyremap4macbook/index.html.en
Self-plug – I’ve made a Karabiner rule that adds vim jk bindings to Preview. I didn’t want to use the other Karabiner rules that added systemwide vim bindings.
https://github.com/xrisk/preview-vim
To use: copy the preview-vim.json
file from the repository (or take the copy from below), paste it in your ~/.config/karabiner/assets/complex_modifications
, and then enable the rule from Karabiner.
{
"title": "Map jk in Preview",
"rules": [
{
"description": "map jk",
"manipulators": [
{
"type": "basic",
"from": {
"key_code": "j"
},
"to": [
{
"key_code": "down_arrow"
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": ["^com.apple.Preview$"]
}
]
},
{
"type": "basic",
"from": {
"key_code": "k"
},
"to": [
{
"key_code": "up_arrow"
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": ["^com.apple.Preview$"]
}
]
}
]
}
]
}
Contributions are welcome!
Also sidenote: you might want to look into using zathura; it might fit your use-case.