1

当我输出时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文件并找到它。

4

1 回答 1

1

正确的路

所有 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>;
};

这仍然需要启动另一个过程,但效果很好。如果有人知道如何以正确的方式做到这一点,我不会接受这个答案。

于 2020-05-10T17:02:07.140 回答