是否有变量或函数,可以告诉我光标的实际位置?
#!/usr/bin/env perl
use warnings;
use 5.012;
use Term::ReadKey;
use Term::Cap;
use POSIX;
my( $col, $row ) = GetTerminalSize();
my $termios = new POSIX::Termios;
$termios->getattr;
my $ospeed = $termios->getospeed;
my $terminal = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed };
# some movement ...
# at which position (x/y) is the cursor now?
答案 0 :(得分:4)
您可以使用curses
代替。它有getcurx()
和getcurx()
。它有CPAN module(以及Debian或Ubuntu中的libcurses-perl
包)。
答案 1 :(得分:3)
我认为您无法使用termcap
确定光标位置。
如果计划在应用程序中使用相对光标运动命令,则必须知道起始光标位置是什么。为此,您必须跟踪光标位置并在每次输出到终端时更新记录,包括图形字符。
答案 2 :(得分:1)
某些终端可能支持查询该位置,如CSI 6 n
。如果支持,该职位将报告为CSI Pl;Pc R
。例如
$ echo -e "\e[6n"; xxd
^[[4;1R
0000000: 1b5b 343b 3152 0a .[4;1R.
这会将光标报告为第4行的第1列(从1开始计算)。
然而,这可能不应该依赖,因为没有很多终端真正支持这一点。
答案 3 :(得分:0)
打印ESC [6n在ANSI兼容终端将为您提供当前光标位置为ESC [n; mR,其中n是行,m是列
所以尝试用终端转义字符读取它。这样的事情:
perl -e '$/ = "R";' -e 'print "\033[6n";my $x=<STDIN>;my($n, $m)=$x=~m/(\d+)\;(\d+)/;print "Current position: $m, $n\n";'