如何使用 Term::Cap 发送清除或重置?
How can I send clear or reset with Term::Cap?
当我输出 tput clear | hexdump -c
时,如果我在 kitty
或 xterm
上,我会得到不同的结果。如何使用 Term::Cap
在相应的终端上生成这些终端信号?
我试过的是直接从文档中复制粘贴设置,
use strict;
use warnings;
use Term::Cap;
use POSIX;
my $termios = new POSIX::Termios;
$termios->getattr;
my $ospeed = $termios->getospeed;
my $terminal = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed };
然后我认为这应该可行,
$terminal->Tputs('clear', 1, *STDOUT );
但是,唉,它什么也没做。
如果我为术语提供不同的不存在名称(而不是 undef
,默认为 $ENV{TERM}
,我得到)
Can't find a valid termcap file at ./test.pl line 9.
所以我知道它正在查找 termcap
文件并找到它。
正确的方式
termcap 的所有信号名称都是两个字母。为了清楚起见,您需要 cl
$terminal->Tputs('cl', 1, *STDOUT );
您可以在 man termcap
上找到完整列表,其中有一个完整列表:
ch Move cursor horizontally only to column %1
cl Clear screen and cursor home
cm Cursor move to row %1 and column %2 (on screen)
感谢Thomas Dickey在评论中的回答
走错路
不确定我做错了什么,因为我做了临时工作
use constant CLEAR => do {
open( my $fh, '-|', qw(tput clear) );
scalar <$fh>;
};
这仍然启动了另一个进程,但它运行良好。如果有人知道如何以正确的方式做到这一点,我不会接受这个答案。
当我输出 tput clear | hexdump -c
时,如果我在 kitty
或 xterm
上,我会得到不同的结果。如何使用 Term::Cap
在相应的终端上生成这些终端信号?
我试过的是直接从文档中复制粘贴设置,
use strict;
use warnings;
use Term::Cap;
use POSIX;
my $termios = new POSIX::Termios;
$termios->getattr;
my $ospeed = $termios->getospeed;
my $terminal = Tgetent Term::Cap { TERM => undef, OSPEED => $ospeed };
然后我认为这应该可行,
$terminal->Tputs('clear', 1, *STDOUT );
但是,唉,它什么也没做。
如果我为术语提供不同的不存在名称(而不是 undef
,默认为 $ENV{TERM}
,我得到)
Can't find a valid termcap file at ./test.pl line 9.
所以我知道它正在查找 termcap
文件并找到它。
正确的方式
termcap 的所有信号名称都是两个字母。为了清楚起见,您需要 cl
$terminal->Tputs('cl', 1, *STDOUT );
您可以在 man termcap
上找到完整列表,其中有一个完整列表:
ch Move cursor horizontally only to column %1
cl Clear screen and cursor home
cm Cursor move to row %1 and column %2 (on screen)
感谢Thomas Dickey在评论中的回答
走错路
不确定我做错了什么,因为我做了临时工作
use constant CLEAR => do {
open( my $fh, '-|', qw(tput clear) );
scalar <$fh>;
};
这仍然启动了另一个进程,但它运行良好。如果有人知道如何以正确的方式做到这一点,我不会接受这个答案。