Enlaces de teclas de Emacs en otros programas

1

Soy un gran usuario de Emacs y me encantaría tener algunos de mis enlaces de teclado de Emacs al editar texto en otras aplicaciones.

Entiendo que podría programar estas macros con Keyboard Maestro manualmente, pero me sorprendió no poder encontrar ninguna macros predefinida para esto. Antes de reinventar la rueda, ¿hay algún depósito de macros de teclado maestro por ahí? ¿Keyboard Maestro viene con algún conjunto de macros que facilitan este proceso?

Amelio Vazquez-Reina
fuente

Respuestas:

1

Las macros de Keyboard Maestro a menudo tienen retrasos notables y no es realmente el mejor método para la reasignación de teclado.

En su lugar, podría crear ~/Library/KeyBindings/y guardar una lista de propiedades como esta como DefaultKeyBinding.dict :

{
  "~b" = moveWordBackward:;
  "~f" = moveWordForward:;
  "~F" = moveWordForwardAndModifySelection:;
  "~B" = moveWordForwardAndModifySelection:;
  "~d" = deleteWordForward:;
  "~u" = (uppercaseWord:, moveForward:, moveForward:);
  "~l" = (lowercaseWord:, moveForward:, moveForward:);
  "~c" = (capitalizeWord:, moveForward:, moveForward:);
  "~v" = pageUp:;
  "~V" = pageUpAndModifySelection:;
  "^V" = pageDownAndModifySelection:;
  "^ " = setMark:;
  "^w" = deleteToMark:;
  "~<" = moveToBeginningOfDocument:;
  "~>" = moveToEndOfDocument:;
  "~/" = complete:;
  "^l" = selectParagraph:;
  "~h" = selectParagraph:;
  "^_" = undo:;
  "^/" = undo:;
  "^x" = {
    "^x" = swapWithMark:;
    "^m" = selectToMark:;
  };
}

DefaultKeyBinding.dict no funciona en algunas aplicaciones como Xcode o Firefox. Las combinaciones de teclas que ingresan estados de teclas muertas (como ⌥U en la distribución del teclado de EE. UU.) No pueden reasignarse. También hay métodos como performClose:y openDocument:, pero no funcionan en todas las aplicaciones. Ver http://www.hcs.harvard.edu/~jrus/site/KeyBindings/Emacs%20Esc%20Bindings.dict o http://www.hcs.harvard.edu/~jrus/site/selectors.html .

Otra opción es usar un private.xml como este con KeyRemap4Macbook :

<?xml version="1.0"?>
<root>
  <item>
    <name>test</name>
    <identifier>test</identifier>
    <not>{{EMACS_MODE_IGNORE_APPS}}</not>
    <autogen>__KeyToKey__ KeyCode::P, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_UP</autogen>
    <autogen>__KeyToKey__ KeyCode::N, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_DOWN</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_LEFT</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_CONTROL | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT</autogen>
    <autogen>__KeyToKey__ KeyCode::P, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_UP, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::N, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_DOWN, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_OPTION | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_OPTION</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_OPTION | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_OPTION</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_OPTION | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_LEFT, VK_OPTION | VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_OPTION | VK_SHIFT | ModifierFlag::NONE, KeyCode::CURSOR_RIGHT, VK_OPTION | VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::D, VK_OPTION | ModifierFlag::NONE, KeyCode::FORWARD_DELETE, VK_OPTION</autogen>
    <autogen>__KeyToKey__ KeyCode::V, VK_OPTION | ModifierFlag::NONE, KeyCode::PAGEUP</autogen>
    <autogen>__KeyToKey__ KeyCode::V, VK_OPTION | VK_SHIFT | ModifierFlag::NONE, KeyCode::PAGEUP, VK_SHIFT</autogen>
    <autogen>__KeyToKey__ KeyCode::V, VK_CONTROL | VK_SHIFT | ModifierFlag::NONE, KeyCode::PAGEDOWN, VK_SHIFT</autogen>
  </item>
</root>

Los códigos clave deben cambiarse para diseños de teclado como Dvorak o Colemak. EMACS_MODE_IGNORE_APPS incluye emuladores de terminal, aplicaciones Emacs y máquinas virtuales, pero también puede agregar elementos personalizados de aplicación .

También hay un grupo de modo Emacs predefinido , pero, por ejemplo, la configuración para cambiar ⌥F a ⌥ → también cambia ⌥⌘F a ⌥⌘ →.

Lri
fuente
¡Gracias! ¿Cómo se relaciona el enlace con EMACS_MODE_IGNORE_APPSel private.xmlfragmento que incluyó en la respuesta?
Amelio Vazquez-Reina
1
El archivo private.xml incluye lo <not>{{EMACS_MODE_IGNORE_APPS}}</not>que hace que no se aplique a las aplicaciones que se enumeran en la página vinculada.
Lri
Parece que la DefaultKeyBinding.dictopción ya no funciona en El-Capitan, ¿alguna sugerencia? por cierto, hay una respuesta similar en apple.stackexchange.com/questions/68716/…
zeliboba