D2021.winsize.sh (1128B)
1 #!/bin/bash 2 3 ( 4 winsz1() { local sz; ble/util/assign-words sz 'stty size'; LINES=${sz[0]} COLUMNS=${sz[1]}; } 5 winsz2() { local sc; ble/util/assign sc 'resize'; builtin eval -- "$sc"; } 6 winsz3() { local sz; ble/util/assign-words sz 'tput lines cols'; LINES=${sz[0]} COLUMNS=${sz[1]}; } 7 ble-measure winsz1 8 ble-measure winsz2 9 ble-measure winsz3 10 11 # (:) で LINES, COLUMNS が更新されるのは bash >= 4.3 のみ。今回は 12 # bash-5.2 に対する wa を考えているので気にしなくて良い。 13 winsz4() { local sz; ble/util/assign-words sz '"$BASH" -O checkwinsize -c "(:);echo \"\$LINES \$COLUMNS\""'; LINES=${sz[0]} COLUMNS=${sz[1]}; } 14 winsz4b() { local sz; ble/util/assign sz '"$BASH" -O checkwinsize -c "(:);echo \"LINES=\$LINES COLUMNS=\$COLUMNS\""'; builtin eval -- "$sz"; } 15 ble-measure winsz4 16 ble-measure winsz4b 17 18 # winsz4b() { local sz; ble/util/assign sz '"$BASH" -O checkwinsize -c "(:);echo \"LINES=\$LINES COLUMNS=\$COLUMNS\""'; builtin eval -- "$sz"; declare -p sz LINES COLUMNS; } 19 # LINES= COLUMNS= winsz4b 20 21 22 # winsz3 > winsz1 > winsz2 > winsz4 > winsz4b の順に速い。 23 )