OSX durchgehend emacsifizieren: Wort vorwärts (⌥ + F) und Wort rückwärts (⌥ + B) anstelle von Sonderzeichen?

8

Ja, OSX unterstützt bereits + und +, um den Cursor wort- und wortwärts zu bewegen, aber das Greifen nach Pfeiltasten ist ärgerlich. Warum also nicht lieber + Bund + Ftun? Ich meine, nicht ein einziges Mal habe ich (absichtlich) das Integralzeichen ∫ mit + geschrieben B(außer jetzt).

Kurz gesagt, ich hätte lieber ein Emacs-ähnliches Verhalten (nicht nur ^+ Ffür die Weiterleitung von Charakteren) im gesamten OSX.


Verwandte Frage: Verwenden Sie die Mac-Tastaturoption nicht mehr als Modifikator für Zeichen

Blaz
quelle

Antworten:

7

DefaultKeyBinding.dict

Erstellen ~/Library/KeyBindings/und speichern Sie eine Eigenschaftsliste wie folgt ~/Library/KeyBindings/DefaultKeyBinding.dict:

{
  "^ " = setMark:;
  "^/" = undo:;
  "^l" = selectParagraph:;
  "^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:);
  "~r" = centerSelectionInVisibleArea:;
  "~u" = (uppercaseWord:, moveForward:, moveForward:);
  "~v" = pageUp:;
  "~w" = (deleteToMark:, setMark:, yank:, swapWithMark:);
  "~B" = moveWordForwardAndModifySelection:;
  "~F" = moveWordForwardAndModifySelection:;
  "~V" = pageUpAndModifySelection:;
}

DefaultKeyBinding.dictfunktioniert in einigen Anwendungen wie Xcode oder Firefox nicht. Methoden, die den Kill Ring verwenden, entfernen die Formatierung aus Rich Text. Tastenkombinationen, die tote Tastenzustände eingeben (wie Option-u im US-Tastaturlayout), können nicht neu zugewiesen werden.

Siehe auch http://www.hcs.harvard.edu/~jrus/site/KeyBindings/Emacs%20Opt%20Bindings.dict . transposeWords:funktioniert in den meisten Anwendungen nicht. openDocument:und saveDocument:funktioniert nicht in Anwendungen, die die automatische Speicherung verwenden, und performClose:funktioniert auch nicht überall.

Weitere Informationen finden Sie unter http://www.hcs.harvard.edu/~jrus/site/cocoa-text.html oder http://osxnotes.net/keybindings.html .

KeyRemap4MacBook

Eine Möglichkeit besteht darin, Einstellungen in der vordefinierten Emacs-Modusgruppe zu aktivieren :

Eine andere Möglichkeit besteht darin, eine Datei wie folgt zu speichern ~/Library/Application Support/KeyRemap4MacBook/private.xml:

<?xml version="1.0"?>
<root>
  <appdef>
    <appname>EMACSMODEIGNORE</appname>
    <equal>com.gnu.Emacs</equal>
    <equal>com.apple.Terminal</equal>
    <equal>com.googlecode.iterm2</equal>
    <equal>com.vmware.fusion</equal>
    <prefix>com.vmware.proxyApp.</prefix>
  </appdef>
  <item>
    <name>emacs</name>
    <identifier>private.emacs</identifier>
    <not>EMACSMODEIGNORE</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>
    <autogen>__KeyToKey__ KeyCode::U, VK_CONTROL | ModifierFlag::NONE, KeyCode::DELETE, VK_COMMAND</autogen>
  </item>
</root>

Öffnen Sie dann die KeyRemap4MacBook-Anwendung, drücken Sie die ReloadXML-Taste und aktivieren Sie die Einstellung.

Ändern Sie die Tastencodes , wenn Sie ein Tastaturlayout wie Dvorak oder Colemak verwenden.

Weitere Informationen finden Sie unter https://pqrs.org/macosx/keyremap4macbook/xml.html.de oder http://osxnotes.net/keyremap4macbook.html .

Lri
quelle
Tolle. Relativ niedriges Verhalten ändern und doch so einfach. Ein Sprung näher an ein OS-Paradies. Hoffentlich gibt es eine noch bessere, 100% funktionierende Lösung, sonst ist dies die Antwort.
Blaz
Wie Sie sagen, funktioniert es nicht in allen Apps. Zum einen rührt sich Xcode nicht davon .dict(aber das kann mit einer benutzerdefinierten Tastenkombination, z. B. ⌘ + B und ⌘ + F, "gelöst" werden). Trotzdem sehr mächtig, um Emacs-ähnliches Verhalten (fast) im gesamten Betriebssystem zu haben.
Blaz
KeyRemap4MacBook verfügt über eine Emacs- Modusgruppe , die sich beispielsweise von ⌥F zu ⌥ → ändert, jedoch nicht, wenn sich Terminal oder Emacs ganz vorne befinden. Sie können es anpassen, indem Sie eine darauf basierende private.xml erstellen . Ich denke, die wirkliche Lösung besteht darin, nur eine Tastatur mit den Pfeiltasten und den Modifizierertasten an besseren Positionen zu bekommen.
Lri
1
@courteous Der Emacs-Modus in KeyRemap4MacBook macht das. In einer Keylayout-Datei oder mit DefaultKeyBinding.dict ist dies nicht möglich.
Lri
1
@courteous Ich habe das auch zur Antwort hinzugefügt. Ich habe "~w" = selectWord:;in meinem DefaultKeyBinding.dict .
Lri