2011-01-11 7 views
13

Me estoy conectando a un escritorio que ejecuta cygwin a través de SSH desde la aplicación de terminal en Mac OS X. Ya he iniciado la pantalla en el lado de cygwin y puedo conectarme a ella en la sesión de SSH. Por otra parte, tengo el siguiente en el archivo .screenrc:¿Cómo obtengo las teclas F1-F12 para cambiar pantallas en la pantalla gnu en cygwin cuando me conecto a través de SSH?

bindkey -k k1 select 1 # F1 = screen 1 
bindkey -k k2 select 2 # F2 = screen 2 
bindkey -k k3 select 3 # F3 = screen 3 
bindkey -k k4 select 4 # F4 = screen 4 
bindkey -k k5 select 5 # F5 = screen 5 
bindkey -k k6 select 6 # F6 = screen 6 
bindkey -k k7 select 7 # F7 = screen 7 
bindkey -k k8 select 8 # F8 = screen 8 
bindkey -k k9 select 9 # F9 = screen 9 
bindkey -k F1 prev  # F11 = prev 
bindkey -k F2 next  # F12 = next 

Sin embargo, cuando comienzo a múltiples ventanas en pantalla e intento de cambiar entre ellos a través de las teclas de función, lo único que consigue es un pitido.

He intentado varias configuraciones por $ TERM (por ejemplo, ansi, cygwin, xterm-color, vt100) y realmente no parecen afectar nada.

He verificado que la aplicación del terminal está enviando la secuencia de escape para la tecla de función que estoy esperando y que mi shell bash (ejecutándose dentro de la pantalla) la está recibiendo. Por ejemplo, para la F1, envía el siguiente (hexdump es un script en Perl que escribí que lleva STDIN en binmode y la envía como un hexadecimal/volcado ASCII):

% hexdump 
[press F1 and then hit ^D to terminate input] 
00000000: 1b4f50        .OP 

Si las cosas funcionaban correctamente, I don' Creo que bash debería recibir la secuencia de escape porque la pantalla debería haberla atrapado y haberla convertido en un comando.

¿Cómo consigo que funcionen las teclas de función?

+1

No programando. – leppie

+5

La pregunta frecuente dice: "herramientas de software comúnmente utilizadas por los programadores". Las herramientas que describí parecen relevantes para mí. – Mikey

Respuesta

4

Con una gran cantidad de experimentación, yo era capaz de conseguir que funcione añadiendo las siguientes líneas a mi .screenrc:

terminfo * k1=\EOP 
terminfo * k2=\EOQ 
terminfo * k3=\EOR 
terminfo * k4=\EOS 
terminfo * k5=\E[15~ 
terminfo * k6=\E[17~ 
terminfo * k7=\E[18~ 
terminfo * k8=\E[19~ 
terminfo * k9=\E[20~ 
terminfo * F1=\E[23~ 
terminfo * F2=\E[24~ 
+0

Sería bueno si mostró el método que utilizó para llegar a esta solución. No funciona para mi – PonyEars

+1

No lo recuerdo claramente como lo era hace un par de años. Parte de esto tenía que ver con conocer los nombres de los terminales para las teclas (por ejemplo, k1, k2, etc.) y parte de saber qué transmite tu terminal cuando presionas F1, F2, etc. Pude para averiguar esto último ejecutando "leer" en el shell bash y luego presionando F1, F2, etc. Por ejemplo, cuando ejecuto leer y presiono F1, esto es lo que vi: '% leer ^ [OP ' – Mikey

+0

En bash, si presiona Ctrl-V seguido de la tecla de función de interés, entonces verá visualmente los códigos anteriores impresos en la línea de comando. Así es como encuentras los códigos. Tal vez es una característica 'readline' –

16

Si tiene una configuración más extraño (por ejemplo, Windows -> PuTTY - > Linux), donde la solución estándar bindkey -k no acaba de funcionar bien, puede utilizar el comando showkey:

showkey -a 

podrá encontrar la asignación de teclas para los códigos de teclas. En mi caso particular, poniendo estos en ~/.screenrc hizo el truco:

bindkey "^[[11~" select 1 
bindkey "^[[12~" select 2 
bindkey "^[[13~" select 3 
bindkey "^[[14~" select 4 
bindkey "^[[15~" select 5 
bindkey "^[[17~" select 6 
bindkey "^[[18~" select 7 
bindkey "^[[19~" select 8 
bindkey "^[[20~" select 9 
bindkey "^[[21~" select 10 
bindkey "^[[23~" select 11 
bindkey "^[[24~" select 12 
+0

Tengo una configuración similar "extraña" usando mobaxterm. Primero deshabilité el atajo de mobaxterm para f11 y luego todavía tenía F10 que no funcionaba con bindkey -k Fx (F1 es F11, F2 es F12 pero F0 no funciona, tal vez es hexadecimal). De todos modos, utilicé su solución para obtener el valor de bindkey correcto para F10. Gracias. – th3penguinwhisperer

0

estoy usando iTerm en MacOS. Esto funciona para mí:

terminfo * F1=^[OP 
terminfo * F2=^[OQ 

bindkey -k F1 prev 
bindkey -k F2 next 

Coloque estas 4 líneas en su .screenrc.

Respuesta inspirada en la respuesta de Mikey.

Cuestiones relacionadas