stty
我可以使用或获取总行数和总列数tput
,但是如何获取可用的行数(未使用)或 bash 或任何其他 shell 中当前行/行的索引/编号?
例子:
$ 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