Использование областей прокрутки в xterm с меньшим количеством строк

Поведение, с которым вы столкнулись, связано с тем, что эта строка автоматически воссоздает элемент массива, который вы удалили ранее:

printf "The value of arr[\"f\"] after deleting = \"%s\"\n", arr["f"]

См. этот небольшой тест:

$ awk 'BEGIN{a[1];delete a[1];for (i in a) print i}'
# nothing is printed
$ awk 'BEGIN{a[1];delete a[1];a[1];for (i in a) print i}'
1
$ awk 'BEGIN{a[1];delete a[1];print "a[1]=",a[1];for (i in a) print "key found:",i}'
a[1]= 
key found: 1
1
07.03.2020, 23:47
1 ответ

Is there a way to communicate the available scroll region instead of the window size to programs querying the terminal size?

Попробуйте stty rows <lines>; он установит (черезioctl(TIOCSWINSZ))значение, возвращаемое ядром через ioctl(TIOCGWINSZ)программам, которые его запрашивают.

Ваш эмулятор терминала обновит его при изменении размера окна.

Это сработало для меня (при не очень тщательном тестировании):

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
0
28.04.2021, 23:21

Теги

Похожие вопросы