2009-10-09 8 views
20

Nella schermata GNU, voglio cambiare il binding del comando predefinito in Alt-s (modificando lo screenrc) al posto del Ca predefinito, la ragione è che io uso emacs quindi lo schermo GNU lega il tasto Ca, inviando "Ca" al emacs diventa noioso (come dice @Nils, per inviare "Ca" dovrei digitare "Ca a"), così come "Ca" nella shell bash, e potrei cambiare la fuga in C- ma alcuni di essi sono già mappati in emacs e altre combinazioni non sono facili come ALT-s. Se qualcuno ha già eseguito una mappatura dei tasti ALT, per favore fatemelo sapere.schermata gnu - modifica del tasto comando escape predefinito su ALT-X?

risposta

1

Non risponde alla tua domanda, ma C-a a invia C-a alla finestra, non è vero?

+1

Lo fa, è solo meno conveniente per gli utenti di emacs. – rampion

+0

C-a lo fa. Ma il problema è che non posso usare l'associazione C-a in emacs che gira sullo schermo. Spero che ce l'abbiate – Siva

+1

@rampion: capito, ma la domanda diceva "Non posso usare C-a in emacs", che credo sia sbagliato. @Siva: Hm. acually, no. Premendo "C-a a" è possibile inviare C-a a emacs. È incostante, sì - ma possibile. – Nils

9

Dalla mia lettura di man screen sembra che l'unico personaggio meta che screen può usare per il comando di legame è CTRL:

escape xy 

    Set the command character to x and the character generating a literal 
    command character (by triggering the "meta" command) to y (similar to 
    the -e option). Each argument is either a single character, a two-character 
    sequence of the form "^x" (meaning "C-x"), a backslash followed by an octal 
    number (specifying the ASCII code of the character), or a backslash followed 
    by a second character, such as "\^" or "\\". The default is "^Aa". 

Se c'è qualche mappatura che non si usa in emacs, anche se è scomodo, come C-|, quindi è possibile utilizzare il gestore di input del terminale per rimappare lo ALT-X, consentendo invece di utilizzare il binding ALT. Sarebbe comunque un po 'schifoso.

+0

grazie. È un po 'complicato, forse potrebbe esserci un modo diretto per farlo – Siva

+3

Non è necessario prefaceare la chiave di escape con Control. Io uso "escape' ~ ", che lo imposta su backtick (senza Control). Non penso che tu possa usare Alt-qualcosa, comunque. – silentbicycle

+0

@silentbicyle grazie. Sì, lo so che non devo preordinare con Control, "escape' ~ "non funziona per me. E diventerò noioso quando devo effettivamente ~ in uno qualsiasi dei programmi in esecuzione sulla shell, questo è il motivo per cui preferisco la mappatura CTL/ALT. – Siva

6

Lo schermo non ha una sintassi abbreviata per le associazioni alt, ma puoi dargli il codice ottale direttamente. Per esempio sulla mia macchina, Alt-x ha il codice esadecimale F8, o 370 ottale, in modo da mettere

escape \ 370x

nel mio screenrc cambiato il codice di escape per Alt-X

testato e funziona con schermo 4.00.03 su Linux.

Potrebbe essere necessario cambiare la fuga, in quanto credo che questo può dipendere su cose come la lingua e codeset, ecc: come ho scoperto quello che il mio codice di fuga era stato quello di digitare

$ echo -n ^QM-x | perl -ne 'printf "%lo\n", ord($_)' 

^Q è il comando quoted-insert per readline (inserisce ciò che scrivi direttamente senza tentare di interpretarlo) e Mx era un Alt-X letterale.

+0

Ho provato questo trucco e non funziona per me. C'è un modo per eseguire il debug di questo? – Siva

+0

Ciao Siva - Penso che la differenza più probabile sia dovuta alla codifica terminale delle meta chiavi. Sto usando xterm con l'impostazione termcap/terminfo di xterm; è possibile che altri terminali come kterm o gnome-terminal o diverse impostazioni TERM utilizzino una codifica diversa. Cosa produce il trucco echo sulla tua macchina? –

5

Sono un utente di Emacs e schermo. Sebbene utilizzi raramente Emacs in un terminale - e come tale in una sessione di schermate - non ho voluto rinunciare a C-a per la shell (che usa i binding di tasti di Emacs). La mia soluzione era usare C-j come chiave di prefisso per lo schermo, che ero disposto a sacrificare. Nei modi di programmazione di Emacs è legato a (newline-and-indent) che ho legato anche a RET, quindi davvero non mi manca.

A proposito: so che questo è un consiglio piuttosto che una risposta, ma ho ritenuto che sarebbe stato abbastanza prezioso da pubblicare comunque.

0

Utente di emacs Fellow qui.

La soluzione migliore che ho trovato è un ~ /.screenrc file con il seguente:

# C-a :source .screenrc 

escape ^gg 

Aggiornamento-live qui: https://gist.github.com/1058111

Vedi anche: http://ubuntuforums.org/showthread.php?t=498675

+0

btw, questo funziona davvero bene per me perché^G è la sequenza "cancella" in emacs. Quindi se la tua memoria muscolare "spasma", non fai casini su emacs. – audiodude

+3

Non sono un fan di questo. C-g è una delle ultime chiavi che vorrei rinunciare ad Emacs. – Psyllo

+0

Cambialo in "escape^\' ["per usare il backquote. C- \ 'non è associato a nulla in Emacs per impostazione predefinita. – Psyllo

7

E 'possibile aggirare : sfuggire limitazioni di comando utilizzando registri e : bindkey Comando. Basta mettere questo in .screenrc:

# reset escape key to the default 
escape ^Aa 

# auxiliary register 
register S ^A 

# Alt + x produces ^A and acts as an escape key 
bindkey "^[x" process S 

## Alt + space produces ^A and acts as an escape key 
# bindkey "^[ " process S 

Vedi http://adb.cba.pl/gnu-screen-tips-page-my.html#howto-alt-key-as-escape

6

Per rendere Alt +X il prefisso predefinito per i comandi e la connessione Ca, aggiungere le seguenti righe per .screenrc:

escape ^|| 
bindkey "^[x" command 

Come effetto collaterale C- | sarà anche il prefisso di comando. Se hai bisogno che anche queste chiavi siano libere, allora correggi "escape^||" di conseguenza.

+0

Come '^ [x' essere trasferito a' Alt-x', dove '^' significa 'Ctrl' (non sono sicuro)? '[' Significa 'Alt'? Grazie. – Chad