Pfeiltasten funktionieren in htop unter OS X im Terminal nicht

Pfeiltasten funktionieren in htop unter OS X im Terminal nicht

Ich weiß nicht genau, wann es passiert ist oder was ich getan habe (falls überhaupt etwas), aber meine Pfeiltasten zum Scrollen in htop funktionieren nicht mehr. Früher funktionierten sie allerdings.

Sie sollten in der Lage sein, mit den Tasten oben und unten in der Prozessliste nach oben und unten zu blättern, aber das funktioniert nicht. Manche Tasten entsprechen eher „Zurück“ oder so etwas. Wenn ich auf dem Einstellungsbildschirm bin, kehren alle Tasten links, oben und unten zum Hauptbildschirm zurück.

htop scheint das einzige betroffene Programm zu sein.

  • TERM ist xterm-color
  • weniger ist nicht betroffen (kann nach oben und unten scrollen)
  • htop kam vonselbstgebrautes, das diehtop-osxRepo auf GitHub, das sich seit Mitte 2009 nicht geändert hat
  • TERMINFO ist leer

Meine cat -v-Ausgabe

% cat -v
^[[A^[[B^[[C^[[D
^[[A^[[B^[[C^[[D
%
  • Sowohl less als auch htop verwenden das System (und daher das gleiche) ncurses
  • Gleiches Problem für Root-Benutzer

Ausgabe aus dem sh-Skript

Type <Up> <Down> <Right> <Left> <Control-D> <Control-D>
(no output until after the first <Control-D>, please type "blindly")
    ^[OA^[OB^[OC^[OD
Expected:
    ^[OA^[OB^[OC^[OD

Ich habe auch versucht,iTermund es gibt die gleichen Ergebnisse, es ist also nicht speziell Terminal.app

Folge 6: Die Rückkehr der Jedi-Ritter

Es wollte gegen libncurses verknüpft werden, aber Homebrew ncurses kompiliert mit Wide Char-Modus, sodass alle Bibliotheken, die Sie erhalten, libncursesw sind. Ich habe die Flags zum Kompilieren mit Wide Char im Brew entfernt, Homebrew ncurses installiert und htop von ncurses installiert, und jetzt funktioniert es.

Antwort1

Nachtrag: Anscheinend ist ncurses in 10.6.3 kaputt

Eine Antwort auf SOLinks zuein Blogeintragdarin werden einige andere Untersuchungen des Problems beschrieben. Eine gemeldete Problemumgehung besteht darin, die ncurses-Bibliothek von 10.6.2 zu kopieren, dies kann jedoch unbeabsichtigte Nebenwirkungen haben.


ESC ist normalerweise das erste Zeichen der „Steuersequenz“, die von einem Terminal (oder einem Terminalemulationsprogramm wieTerminal) für Sondertasten (wie die Pfeiltasten, F1, Home, Page Up, usw.).

ESCdient auch als 'Zurück'-Taste inhtop(normalerweise erst nach einer Verzögerung, damit langsame Verbindungen genug Zeit haben, eine vollständige Steuersequenz zu senden, die zufällig mit ESC beginnt).

Bitte aktualisieren Sie Ihre Frage mit den Antworten auf die folgenden Fragen:

Was ist TERM?

Vielleicht hat Ihre TERM-Umgebungsvariable einen seltsamen Wert? Was echo $TERMmeldet in einem Fenster, in demhtopverhält sich wie von Dir beschrieben? TERMmüsste wohl sein xterm-color, oder so ähnlich.

woher hast duhtop? MacPorts? Fink? Andere?

Mit dem vom System bereitgestellten ncurses kompilierten Programm verwenden Einträge aus /usr/share/terminfo/. MacPorts verwendet normalerweise /opt/local/als Präfix, daher verwenden Anwendungen, die ncurses von MacPorts verwenden, Einträge aus /opt/local/share/terminfo/. Fink verwendet normalerweise /sw/als Präfix, daher verwenden Anwendungen, die ncurses von Fink verwenden, Einträge aus /sw/share/terminfo/.

Hat die TERMINFOUmgebungsvariable einen Wert? Wenn ja, sucht ncurses (unabhängig von der Quelle) im darin angegebenen Verzeichnis.

Es könnte sein, dass Sie eine teilweise beschädigte Terminfo-Definition für das in TERM angegebene Terminal haben („teilweise beschädigt“, weil die Ausgabesteuersequenzen in Ordnung sein müssen, da es sonst zu offensichtlichen Anzeigeanomalien kommen würde).

Was sind einige Beispiele für Programme, die nicht betroffen sind?

Wenn Sie ncurses-basierte Programme haben, die die Pfeiltasten richtig verarbeiten (vielleicht mit einer anderen Installation von ncurses), können Sie versuchen, die anderen Terminfo-Einträge mithtopund umgekehrt (durch Festlegen TERMINFOdes Speicherorts der Einträge aus der anderen Ncurses-Installation).

Welche Codes sendet Ihr Terminal eigentlich?

Verwenden Sie cat -vdiese Option, um zu überprüfen, welche Codes gesendet werden, wenn Sie die Pfeiltasten verwenden. Folgendes wird angezeigt, wenn ich nach dem Starten von Up, Down, Right, Left, , Enter, Control- drücke :Dcat -v

% cat -v
^[[A^[[B^[[D^[[C
^[[A^[[B^[[D^[[C
% 

Der erste Codesatz ist ein Echo, das vom TTY-Gerät erzeugt wird. Der zweite Codesatz wird erzeugt vonKatzeund kann sich, abhängig von den vorhandenen genauen Codes, vom zuerst gesendeten unterscheiden.

Dieser Code kann konfiguriert werden inTerminal, aber das ist normalerweise nicht nötig, da es spezielle Modi gibt, die die Codes ändern (manchmal sendet Up ESC [ A, manchmal sendet es ESC O A).

Das Problem ist letztlich, dasshtoperkennt die gesendeten Codes nicht als Codes für die Pfeiltasten. Daher kann es hilfreich sein zu wissen, dass tatsächlich Codes gesendet werden.


Nachtrag:htopvon Homebrew;wenigerist in Ordnung

Gegen die ncurses isthtopverknüpft?

Es scheint, dass diehtop'Formel'WarEnde 2009 geändert, um nicht von der Homebrew-Version von ncurses abhängig zu sein. Dies bedeutet vermutlich, dass Versionen vonhtopdie nach dieser neuen Formel erstellt wurden, verwenden das System ncurses. Welches ncurses ist also IhrhtopBinär verwenden?

ls -l "$(which htop)"
otool -L "$(which htop)"

Wenn deinhtopist älter als 2009-12-18 oder es ist mit Ihrem Homebrew ncurses verknüpft (wahrscheinlich /usr/local/lib/libncurses.5.dylib), dann sollten Sie erwägen, dashtopFormel ( brew remove htop; brew install htop?). Alternativ, wenn Ihre bestehendenhtopWenn die Binärdatei eine Homebrew-Version von ncurses verwendet (oder die neu erstellte Version auch noch Homebrew ncurses verwendet), können Sie versuchen, die ncurses-Formel neu zu erstellen.

Sie erwähnen, dasswenigerfunktioniert OK. Es scheint, dass es keine Homebrew-Formel für gibtweniger, Sie verwenden also wahrscheinlich die vom System bereitgestellteweniger. Es ist erwähnenswert, welche ncurses Ihrewenigerverwendet zum Vergleich mithtop.

otool -L "$(which less)"

Nachtrag:htopUndwenigerbenutze das System ncurses

Wenn das Problem durch eine benutzerspezifische Konfiguration verursacht wird, sollte es behoben sein, wenn Sie eineBrandneuBenutzer und versuchen Sie es, während Sie als dieser angemeldet sind. Wenn das Problem unter dem brandneuen Benutzer weiterhin besteht, wissen Sie, dass es sich um ein systemweites Problem handelt (oder das Problem liegt in der grundlegenden, anfänglichen Konfiguration, die allen neuen Benutzern zugewiesen wird!). Wenn Sie mit dem Testen fertig sind, löschen Sie einfach den Benutzer, um eine Überlastung der Anmeldeauswahl usw. zu vermeiden.

Terminalund andere VT100-artige Terminals und Terminalemulatoren verfügen über einen „Anwendungscursortasten“-Modus, in dem die Cursortasten verschiedene Steuersequenzen an die Anwendung senden. Im „Anwendungs“-Modus sendet das Terminal ^[OA^[OB^[OC^[ODanstelle von ^[[A^[[B^[[C^[[D(für Auf, Ab, Rechts, Links bzw. beide). Die Sequenzen im Nicht-„Anwendungs“-Modus, die das Terminal sendet, sind identisch mit den Codes, die das Terminal erwarten würdeerhaltenals Cursor-Steuercodes.

Es könnte sein, dass IhrTerminalsendet nicht die richtigen Cursortastencodes der Anwendung. Dies scheint unwahrscheinlich, da Sie sagen, dasswenigerfunktioniert (es verwendet auch den „Anwendungsmodus“). Vermutlich meinst du, dass die Pfeiltasten funktionieren, um inweniger. Aufgrund des „Muskelgedächtnisses“ verwende ich fast immer dievi-Stil-Tasten ( kjlh) zum Navigieren inweniger.

Was „Anwendungscursortasten“ Codes sindTerminalsenden?

Sie können das überprüfenTerminalsendet die erwarteten „Anwendungscursortasten“-Sequenzen in etwa wie folgt:

sh -c "$(cat <<\EOF
noecho_appmode() {
  stty -echo
  printf '\033[?1h'
}
modes="$(stty -g)"
restore_echo_and_appmode() {
  stty "$modes"
  printf '\033[?1l'
}
printf '\nType <Up> <Down> <Right> <Left> <Control-D> <Control-D>\n'
printf '(no output until after the first <Control-D>, please type "blindly")\n\t'
noecho_appmode             ; trap 'restore_echo_and_appmode' 0
cat -v
restore_echo_and_appmode   ; trap ''                         0
printf '\nExpected:\n\t'
printf 'kcu%c1\n' u d f b | /usr/bin/tput -S | cat -v
printf '\n\n'
EOF
)"

Die mit „Erwartet:“ gekennzeichnete Ausgabe basiert auf den System-Terminfo-Einträgen für Ihr TERMund sollte daher das wiedergeben, was Ncurses-basierte Programme erwarten.

Wenn die tatsächlichen Codes von den erwarteten Codes abweichen, sollten Sie die Konfiguration vonTerminalum herauszufinden, wo die falschen Codes konfiguriert wurden.

Wenn dies kein Problem anzeigt (die Codes vonTerminalden erwarteten Codes entsprechen), würde ich eine nicht-setuid-Kopie vonhtopunterktrace(oder vielleicht ein bisschen DTrace?), um die I/O vor Ort zu sehen. Die Art der I/O könnte jemandem einen Hinweis auf die Ursache des Problems geben. Die vollständige Ausgabe vonkdumpwird sehr groß sein, da die Details zum Laden von gemeinsam genutzten Bibliotheken und unterstützenden Datendateien gemeldet werden, aber selbst wenn ich diese Dinge herausnehme, erhalte ich immer noch fast 2000 Zeilen und 100 kB Ausgabe vonkdump. Das ist wahrscheinlich zu viel, um es hier zu posten.

Antwort2

Dies scheint in der Version 10.6.4 vom 15. Juni 2010 behoben worden zu sein. Ich habe gerade meinen iMac aktualisiert, auf dem die Version 10.6.3 lief, und die Curses-Tasten (einschließlich der Pfeiltasten) reagieren in meinen Apps ordnungsgemäß.

Antwort3

Vielen Dank für die Hilfe beim Debuggen. Ich habe das gleiche Problem und habe die Bibliotheksliste bei einer Standardinstallation von OSX 10.6 erhalten, die wie Daniel auch mit Homebrew erstellt wurde. Hier ist der Bildschirmauszug, für mich sieht es nach denselben Versionen aus:

marvin:~ sheldon$ otool -L "$(which htop)"
/usr/local/bin/htop:
    /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)
marvin:~ sheldon$ otool -L "$(which less)"
/usr/bin/less:
    /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)

Antwort4

Ich habe die kleine Bluetooth-Tastatur von Apple, die keine Bild-auf- und Bild-ab-Tasten hat. Um diese Funktionen in htop zum Laufen zu bringen, verwende ich diese Tastenkombinationen:

Bild auf: Umschalttaste → Funktionstaste → Pfeiltaste nach oben
Bild ab: Umschalttaste → Funktionstaste → Pfeiltaste nach unten

Ich habe gesehen, dass dies in anderen Apps funktioniert, bei denen dasselbe Problem besteht.

verwandte Informationen