如何获取终端中光标的位置?
- 2024-11-04 08:42:00
- admin 原创
- 36
问题描述:
我知道我可以使用 保存位置tput sc
,但我如何将其位置读入变量?我需要行数。我不想使用 curses/ncurses。
解决方案 1:
在 ANSI 兼容终端上,打印序列ESC[6n
将向应用程序报告光标位置(就像在键盘上键入的那样)ESC[n;mR
,其中n
是行,m
是列。
例子:
~$ echo -e "[6n"
編輯:
您应该确保正在读取键盘输入。终端将仅“输入”序列ESC[n;mR
(无 ENTER 键)。bash
您可以使用类似以下内容:
echo -ne "[6n" # ask the terminal for the position
read -s -d[ garbage # discard the first part of the response
read -s -d R foo # store the position in bash variable 'foo'
echo -n "Current position: "
echo "$foo" # print the position
解释:(-d R
分隔符)参数将使read
停止在字符处,R
而不是默认的记录分隔符(ENTER
)。这将存储ESC[n;m
在中$foo
。剪切使用[
分隔符并选择第二个字段,让n;m
(行;列)。
我不知道其他 shell 的情况。最好的办法是使用 Perl、Python 或其他语言编写一些单行代码。在 Perl 中,你可以从以下(未经测试的)代码片段开始:
~$ perl -e '$/ = "R";' -e 'print "[6n";my $x=<STDIN>;my($n, $m)=$x=~m/(d+);(d+)/;print "Current position: $m, $n
";'
例如,如果您输入:
~$ echo -e "z033[6n"; cat > foo.txt
按几次 [ENTER],然后按 [CRTL]+[D]。然后尝试:
~$ cat -v foo.txt
^[[47;1R
n
和值m
分别为 47 和 1。有关更多信息,请查看维基百科上的 ANSI 转义代码文章。
在互联网出现之前,在BBS的黄金时代,像我这样的老家伙用这些代码获得了很多乐趣。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD