Verwenden von Scrollbereichen in xterm mit weniger

Verwenden von Scrollbereichen in xterm mit weniger

Ich habe mit der Escape-Sequenz DECSTBM in xterm (v353) experimentiert. Obwohl sie im Allgemeinen funktionierte, hatte ich ein Problem:

Ich würde den Scrollbereich auf eine Zeile weniger als die Fensterhöhe einstellen. Beim Anzeigen von Dateien mit „less“ (oder „man“) würden Zeilen innerhalb des Scrollbereichs gedruckt, aber eine Zeile mehr generiert, als passen würde. Beim Zurückscrollen nach oben rutscht die Statuszeile aus dem Scrollbereich heraus und das Scrollen scheint generell zu brechen.
Ein weiteres Beispiel ist die „more“-Abschlussaufforderung von readline (bash), die so viele Zeilen druckt, wie die Fenstergröße angibt, wobei in meinem Fall die erste Zeile aus dem Bildschirm gescrollt wird.

Beim Durchforsten des Codes habe ich festgestellt, dass Less das System anscheinend direkt nach der Fenstergröße fragt (mit ioctl) und daher die durch die Umgebungsvariablen COLUMNS oder LINES vorgegebene Größe umgeht. Gibt es eine Möglichkeit, Programmen, die die Terminalgröße abfragen, den verfügbaren Scrollbereich anstelle der Fenstergröße mitzuteilen?

Antwort1

Gibt es eine Möglichkeit, Programmen, die die Terminalgröße abfragen, den verfügbaren Bildlaufbereich anstelle der Fenstergröße mitzuteilen?

Versuchen Sie es ; dadurch wird der vom Kernel zurückgegebene Wert stty rows <lines>(über ) an die Programme gesendet, die ihn anfordern.ioctl(TIOCSWINSZ)ioctl(TIOCGWINSZ)

Ihr Terminalemulator aktualisiert es, wenn Sie die Fenstergröße ändern.

Das hat bei mir funktioniert (nach nicht sehr gründlichen Tests):

winch(){
    [ "$LINES" = "$winch_l" ] && return
    winch_l=$((LINES-1));
    stty rows "$winch_l"
    printf '\033[S\033[A'     # scroll 1 up, cursor 1 up
    printf '\0337'            # save cursor (DECSC)
    printf '\033[1;%dr' "$winch_l"  # set scroll region (DECSTBM)
    printf '\0338'            # restore cursor (DECRC)
    kill -WINCH "$$"          # force prompt redraw; ymmv
}
trap winch WINCH
winch

verwandte Informationen