2011-01-11 11 views
13

Ich verbinde über die Terminal-App in Mac OS X eine Verbindung zu einem Desktop, auf dem cygwin über SSH läuft. Ich habe den Bildschirm bereits auf der Cygwin-Seite gestartet und kann mich über die SSH-Sitzung damit verbinden. Darüber hinaus habe ich die folgenden in der .screenrc Datei:Wie bekomme ich die Tasten F1-F12, um Bildschirme in GNU-Bildschirm in Cygwin bei der Verbindung über SSH zu wechseln?

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 

Allerdings, wenn ich mehrere Fenster in Bildschirm und versuchen, zwischen ihnen zu wechseln über die Funktionstasten starten, alles, was ich bekommen ein akustisches Signal ist.

Ich habe verschiedene Einstellungen für $ TERM versucht (z. B. ansi, cygwin, xterm-color, vt100) und sie scheinen nichts wirklich zu beeinflussen.

Ich habe überprüft, dass die Terminal-App in der Tat die Escape-Sequenz für die Funktionstaste sendet, die ich erwarte und dass meine Bash-Shell (im Bildschirm läuft) es empfängt. Zum Beispiel für F1, sendet er das folgende (hexdump ein Perl-Skript ist, schrieb ich, dass STDIN in binmode und gibt es als Hexadezimal/ASCII-Dump nimmt):

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

Wenn die Dinge richtig funktionieren, I don‘ t think bash sollte die Escape-Sequenz erhalten, weil der Bildschirm es hätte fangen und in einen Befehl verwandeln sollen.

Wie bekomme ich die Funktionstasten zu arbeiten?

+1

Nicht programmieren. – leppie

+5

Die FAQ sagt: "Software-Tools, die häufig von Programmierern verwendet werden". Die Tools, die ich beschrieben habe, scheinen mir relevant zu sein. – Mikey

Antwort

4

Mit viel des Experimentierens, konnte ich es, indem die folgenden Zeilen zu meinem .screenrc an die Arbeit:

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

Es wäre schön, wenn Sie die Methode zeigen würden, mit der Sie zu dieser Lösung gelangt sind. Es funktioniert nicht für mich. – PonyEars

+1

Ich erinnere mich nicht so klar wie vor ein paar Jahren. Ein Teil davon hatte mit der Kenntnis der Terminal-Namen für die Schlüssel zu tun (zB k1, k2, etc.) und ein Teil davon hatte damit zu tun, zu wissen, was Ihr Terminal sendet, wenn Sie F1, F2 usw. drücken. konnte ich um letzteres herauszufinden, indem Sie "read" in der Bash Shell ausführen und dann F1, F2 usw. drücken. Zum Beispiel, wenn ich lese und F1 drücke, habe ich Folgendes gesehen: '% read ^ [OP ' – Mikey

+0

In bash, wenn Sie Strg-V gefolgt von der Funktionstaste von Interesse, dann sehen Sie visuell die oben genannten Codes in der Befehlszeile gedruckt. So finden Sie die Codes. Vielleicht ist es eine 'readline'-Funktion? –

16

Wenn Sie eine bizarre Einrichtung (zB Windows haben -> PuTTY - > Linux), wo die Standard-bindkey -k Lösung nicht ganz richtig funktioniert, können Sie den showkey Befehl verwenden:

showkey -a 

die Zuordnung von Tastatureingaben Tastencodes zu finden. In meinem speziellen Fall, diese in ~/.screenrc setzen hat den Trick:

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

Ich habe ein ähnliches "seltsames" Setup mit mobaxterm. Zuerst habe ich die mobaxterm Abkürzung für f11 deaktiviert und dann hatte ich immer noch F10 nicht mit bindkey -k Fx arbeiten (F1 ist F11, F2 ist F12 aber F0 funktioniert nicht, vielleicht ist es hexadezimal). Wie auch immer, ich habe Ihre Lösung verwendet, um den richtigen Bindkey-Wert für F10 zu erhalten. Vielen Dank. – th3penguinwhisperer

0

I iTerm auf macos verwenden. Das funktioniert bei mir:

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

bindkey -k F1 prev 
bindkey -k F2 next 

Setzen Sie diese 4 Zeilen in Ihre .screenrc.

Antwort von Mikey Antwort inspiriert.