stty
総行数と総列数を使用または取得できますが、tput
使用可能な行数(使用されていない)またはbashまたは他のシェルから現在の行/行のインデックス/番号をどのように取得しますか?
例:
$ ls
foo bar baz
$ (cursor is here)
.
.
ターミナルには5本の路線があります。 「現在の行」は 3 で、カーソルの後ろの使用可能/空行数は 2 です。
答え1
この試み:
#!/bin/bash
if ! termios="$(stty -g 2>/dev/null)"
then
echo "ERROR: Not running in a terminal"
exit 1
fi
# Get max rows and columns
maxrows=$(tput lines)
maxcols=$(tput cols)
# Disable ICANON ECHO
stty -icanon -echo
# Get cursor position
tput u7
read -d "R" rowcol
# Revert to original settings
stty "$termios"
# clean up response
rowcol="${rowcol//[^0-9;]/}"
rowcol="${rowcol//;/ }"
printf 'maxrows: %d maxcols: %d currow: %d curcol: %d\n' $maxrows $maxcols ${rowcol[0]} ${rowcol[1]}
exit 0