Entsprechend dermanpagefür lesskey
sind die folgenden Tasten an das Links- und Rechts-Scrollen gebunden:
\e[ left-scroll
\e] right-scroll
\e( left-scroll
\e) right-scroll
\kl left-scroll
\kr right-scroll
Die Pfeiltasten und Esc-(
/ Esc -)
funktionieren einwandfrei, ebenso wie Esc-]
das Scrollen nach rechts, aber Esc-[
nicht das Scrollen nach links. Stattdessen wird in der Eingabeaufforderung nur Folgendes angezeigt:
ESC[
~/.lesskey
Als Workaround kann das Hinzufügen dieser Zeile dienen:
\e[ left-scroll
Aber warum funktioniert es nicht standardmäßig?
Ich habe dieses Verhalten in XFCE4 auf Debian Stretch sowie Kubuntu 18.04 und einer Vielzahl von Terminalemulatoren beobachtet.
$ less --version
less 487 (GNU regular expressions)
Copyright (C) 1984-2016 Mark Nudelman
less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less
Ich habe überlegt, einen Fehlerbericht einzureichen, aberdie Liste bekannter Fehler und Funktionsanfragen lässt darauf schließen, dass es sich um ein bekanntes Verhalten handelt:
Verbesserungsvorschläge
[ . . . ]
Referenznummer: 175
Implementiert in Version: 322
Alternativbefehl für ESC-[ hinzufügen.
Handelt es sich hierbei tatsächlich um eine Einschränkung in less
oder ist es eine Eigenart im Umgang der Terminals mit der Escape-Taste?
Antwort1
Dies liegt daran, dass dies ESC [
zufällig auch der Anfang der Zeichenfolge ist, die von mehreren Funktionstasten auf einigen Terminals gesendet wird, z. B. Homeoder Endoder PageUp... Diese sind auch an eine Aktion in gebunden less
.
Wenn also less
ein empfangen wird ESC [
, wartet es auf mehr (ohne Zeitüberschreitung, wie dies bei einigen anderen Anwendungen der Fall ist).
Auf meinem Terminal ESC[6~
ist PageDown. Wenn ich drücke Alt+[, sehe ich ESC [
das Gleiche wie Sie. Aber dann kann ich 6
und eingeben ~
und das scrollt nach unten.
Wenn Sie TERM=vt100 less
anstelle von ausführen less
, wo die vt100
Terminfo-Seite keinen Eintrag für Homeoder End... hat, sehen Sie ESC [
, dass es funktioniert.
Wenn Sie jedoch \e[ left-scroll
zu Ihrem hinzufügen ~/.lesskey
(und lesskey
es zum Kompilieren in ausführen ~/.less
), werden Sie feststellen, dass das ESC [
Scrollen nach links funktioniert, aber alle Home, PageUP… nicht mehr funktionieren, sie scrollen alle nach links und die zusätzlichen Zeichen, die sie senden, verursachen ein Piepen.
Wenn man sich den Code ansieht, geht es um die Reihenfolge, in der die Befehlstabelle verarbeitet wird. Die ~/.less
Befehlstabelle istzuletzt hinzugefügt, Aberam Kopf eingesetzt, sodass die Einträge verarbeitet werdenVordie eingebauten.
Wenn bei einer ESC [
Eingabe der Eintrag für \e[ left-scroll
zuerst gefunden wird, wird dieser verarbeitet, wenn der Eintrag für \kD forw-screen
(was auf vielen Terminals als übersetzt wird \e[6~ forw-screen
) zuerst gefunden wird, dannes ist nur einPräfixübereinstimmen, Undless
wartet auf weitere Eingaben.
Es handelt sich also um eine Art Fehler. Die Lösung wäre, ein Timeout hinzuzufügen. Ein kurzes Timeout würde jedoch bedeuten, dass man auf Mehrtastenbefehle verzichten müsste; ein langes Timeout, das dem Benutzer genügend Zeit gibt, einen Mehrtastenbefehl einzugeben, würde wahrscheinlich ESC [
zu wenig Reaktionsfähigkeit bedeuten.
Nun verfügen Terminals PageUp, die über usw. verfügen, im Allgemeinen auch über die Taste Leftund , die auch an , Rightgebunden sind . Sie können diese also stattdessen zum Scrollen verwenden.left-scroll
right-scroll