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

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 .


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.