Warum scrollt Esc-[ in „less“ nicht nach links?

Warum scrollt Esc-[ in „less“ nicht nach links?

Entsprechend dermanpagefür lesskeysind 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[

~/.lesskeyAls 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 lessoder 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 lessein 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 6und eingeben ~und das scrollt nach unten.

Wenn Sie TERM=vt100 lessanstelle von ausführen less, wo die vt100Terminfo-Seite keinen Eintrag für Homeoder End... hat, sehen Sie ESC [, dass es funktioniert.

Wenn Sie jedoch \e[ left-scrollzu Ihrem hinzufügen ~/.lesskey(und lesskeyes 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 ~/.lessBefehlstabelle istzuletzt hinzugefügt, Aberam Kopf eingesetzt, sodass die Einträge verarbeitet werdenVordie eingebauten.

Wenn bei einer ESC [Eingabe der Eintrag für \e[ left-scrollzuerst 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, Undlesswartet 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-scrollright-scroll

verwandte Informationen