我的(两个)版本相同...
作为一个函数,设置特定变量,使用 ncurses 的用户定义命令:
getCPos () {
local v=() t=$(stty -g)
stty -echo
tput u7
IFS='[;' read -rd R -a v
stty $t
CPos=(${v[@]:1})
}
比现在:
getCPos
echo $CPos
21
echo ${CPos[1]}
1
echo ${CPos[@]}
21 1
declare -p CPos
declare -a CPos=([0]="48" [1]="1")
注意:我使用ncurses
command: tput u7
at line#4
希望这将比通过命令使用字符串更便携: ...不确定:无论如何这将适用于其中任何一个:VT220
printf "\033[6n"
getCPos () {
local v=() t=$(stty -g)
stty -echo
printf "\033[6n"
IFS='[;' read -ra v -d R
stty $t
CPos=(${v[@]:1})
}
在VT220兼容 TERM下工作时完全相同。
更多信息
您可能会在那里找到一些文档:
VT220 程序员参考手册 - 第 4 章
4.17.2 设备状态报告(DSR)
...
Host to VT220 (Req 4 cur pos) CSI 6 n "Please report your cursor position using a CPR (not DSR) control sequence."
VT220 to host (CPR response) CSI Pv; Ph R "My cursor is positioned at _____ (Pv); _____ (Ph)."
Pv = vertical position (row)
Ph = horizontal position (column)