2011-03-15 6 views
8

Di solito trovo interessanti impostazioni di keyshinding zsh (tramite il comando bindkey) sul Web. La mia domanda è: come interpreto a cosa sono mappate queste sequenze di escape? Per esempio, ecco un frammento dal oh-my-zsh s' key-bindings.zshInterpretazione di sequenze di escape con bindkey zsh

bindkey "^[[H" beginning-of-line 
bindkey "^[[1~" beginning-of-line 
bindkey "^[[F" end-of-line 
bindkey "^[[4~" end-of-line 

C'è un riferimento su come fare queste keymaps rappresentati? Inoltre, è specifico per zsh o specifico per piattaforma?

Sono consapevole del fatto che è possibile utilizzare cat o Ctrl-V per trovare la sequenza di escape corrispondente per determinati tasti. Dato che ho potuto forzare la forza per trovare la corrispondenza inversa, ma questo non avrebbe funzionato per i tasti che non esistono sulla mia tastiera (ad esempio Home/End su laptop Mac). Pertanto, preferirei metodi in grado di determinare i tasti indipendentemente dalla tastiera fisica.

risposta

4

Se si parla di un tipico flusso di eventi unix/linux, l'immagine è approssimativamente la seguente.

Il programma di emulazione di terminale riceve gli eventi X in questo modo, quindi il pulsante viene premuto, viene rilasciato un altro pulsante. Questi eventi possono essere monitorati con l'utilità xev, ad esempio. L'emulatore di terminale traduce quindi tali eventi nelle sequenze di escape .

Questa traduzione non è impostata in pietra. Può essere configurato. Diversi emulatori di terminale sono configurati in modo diverso. Per esempio xterm traduzione può essere impostato in .Xdefaults del genere:

XTerm*VT100*Translations:#override \ 
Ctrl<Key>Left:   string(0x1B) string(OD) \n\ 
Ctrl<Key>Right:   string(0x1B) string(OC) \n\ 

Nota 0x1B che è ESC. ESC viene anche stampato come ^[.

Ora, zsh utilizza zle (e bash utilizza la libreria readline per lo stesso scopo) che interpreta alcune sequenze per spostarsi attorno alla riga di input ed eseguire azioni di modifica.

I seguenti testi dovrebbero fornire ulteriori dettagli aggiuntivi.

Zsh Line editor description

Wikipedia article on escape sequences

e

Xterm Control Sequences

+0

Ma che non include altri emulatori terminali che non possono essere eseguite in X11. –

+0

Giusto. Questa è molte a molte situazioni. Molti terminali, molte shell, molti driver per tastiera, ecc. Tutti sono impostati in modo diverso. Ad esempio, non sono mai riuscito a trovare dove installare le traduzioni sul terminale gnome. – horsh

+0

Grazie per la spiegazione. Per favore scusami il mio ignorante, perché non sono sicuro che risponda alla mia domanda. Ho cercato i riferimenti forniti e ancora non ho trovato il modo di tradurre sequenze di escape a corrispondenti sequenze di tasti (ad esempio, i tasti premuti mappati a "^ [[H") – ejel