Emacsify OSX in tutto: word-forward (⌥ + F) e word-backward (⌥ + B) anziché "caratteri speciali"?


8

Sì, l'OSX supporta già + e + per spostare il cursore avanti e indietro, ma raggiungere i tasti freccia è fastidioso. Quindi, perché non preferire che + Be + Ffacciano questo? Voglio dire, non una volta ho (intenzionalmente) scritto il segno integrale ∫ con + B(a parte adesso).

In breve, preferirei avere un comportamento simile a Emacs (non solo, diciamo, ^+ Fper il personaggio) in tutto l'OSX.


Domanda correlata: interrompere l'utilizzo dell'opzione tastiera Mac come modificatore del carattere

Risposte:


7

DefaultKeyBinding.dict

Crea ~/Library/KeyBindings/e salva un elenco di proprietà come questo come ~/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.dictnon funziona in alcune applicazioni come Xcode o Firefox. I metodi che utilizzano l'anello di eliminazione rimuovono la formattazione dal rich text. Le combinazioni di tasti che entrano negli stati dei tasti morti (come l'opzione-u nel layout di tastiera degli Stati Uniti) non possono essere riassegnate.

Vedi anche http://www.hcs.harvard.edu/~jrus/site/KeyBindings/Emacs%20Opt%20Bindings.dict . transposeWords:non funziona nella maggior parte delle applicazioni. openDocument:e saveDocument:non funziona in applicazioni che utilizzano il salvataggio automatico e performClose:non funziona neanche dappertutto.

Vedere http://www.hcs.harvard.edu/~jrus/site/cocoa-text.html o http://osxnotes.net/keybindings.html per ulteriori informazioni.

KeyRemap4MacBook

Un'opzione è abilitare le impostazioni nel gruppo modalità Emacs predefinito :

Un'altra opzione è quella di salvare un file come questo come ~/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>

Quindi apri l'applicazione KeyRemap4MacBook, premi il pulsante ReloadXML e abilita l'impostazione.

Modificare i codici chiave se si utilizza un layout di tastiera come Dvorak o Colemak.

Vedi https://pqrs.org/macosx/keyremap4macbook/xml.html.en o http://osxnotes.net/keyremap4macbook.html per ulteriori informazioni.


Sorprendente. Cambiare comportamento di livello relativamente basso eppure così facile. Un salto più vicino a un paradiso del sistema operativo. Speriamo che esista ancora una soluzione funzionante al 100%, altrimenti questa è la risposta.
Blaz,

Come dici tu, non funziona in tutte le app. Xcode, per esempio, non si muoverà in questo .dict(ma che può essere "risolto" con un keybinding personalizzato, diciamo, ⌘ + B e ⌘ + F). Tuttavia, è molto potente avere un comportamento simile a Emacs (quasi) in tutto il sistema operativo.
Blaz,

KeyRemap4MacBook ha un gruppo di modalità emacs che cambia ad esempio da ⌥F a ⌥ →, ma non quando Terminal o Emacs è in primo piano. Puoi personalizzarlo creando un private.xml basato su di esso. Penso che la vera soluzione sia quella di ottenere una tastiera con i tasti freccia e i tasti modificatori in posizioni migliori.
Lri,

1
@courteous La modalità emacs in KeyRemap4MacBook lo fa. Non è possibile in un file keylayout o con DefaultKeyBinding.dict.
Lri,

1
@courteous L'ho aggiunto anche alla risposta. Ho "~w" = selectWord:;nel mio DefaultKeyBinding.dict .
Lri
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.