Термин::Cap: "ключ вверх" не работает
#!/usr/bin/env perl
use warnings;
use 5.014;
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->Trequire("ku"); # move cursor up
my $UP = $terminal->Tputs("ku");
my $t = 500;
while ($t > 0) {
printf "Hour: %d \n", $t/3600;
printf "Minute: %d \n", ($t/60)%60;
printf "Second: %d \n", $t%60;
print $UP,$UP,$UP;
sleep 5;
$t -= 5;
}
Когда я пытаюсь это (нашел здесь: Как я могу обновить значения на экране, не очищая его в Perl?), Я получаю этот вывод:
Hour: 0
Minute: 8
Second: 20
AAAHour: 0
Minute: 8
Second: 15
AAAHour: 0
Minute: 8
Second: 10
AAAHour: 0
Minute: 8
Second: 5
Значит ли это, что key-up
не работает с моим терминалом?
1 ответ
Решение
Вы неправильно поняли ku
возможность. Это последовательность символов, генерируемая, когда пользователь нажимает клавишу со стрелкой вверх на терминале. Чтобы на самом деле переместить курсор вверх на экране, вы печатаете up
возможность. (Кроме того, лучше избегать синтаксиса косвенных объектов, хотя это не имеет никакого отношения к вашей проблеме.)
Вот исправленная версия:
#!/usr/bin/env perl
use warnings;
use 5.014;
use Term::Cap;
use POSIX;
my $termios = POSIX::Termios->new;
$termios->getattr;
my $ospeed = $termios->getospeed;
my $terminal = Term::Cap->Tgetent({ TERM => undef, OSPEED => $ospeed });
$terminal->Trequire("up"); # move cursor up
my $UP = $terminal->Tputs("up");
my $t = 500;
while ($t > 0) {
printf "Hour: %d \n", $t/3600;
printf "Minute: %d \n", ($t/60)%60;
printf "Second: %d \n", $t%60;
print $UP,$UP,$UP;
sleep 5;
$t -= 5;
}
Вы можете найти руководство Termcap полезным. Это объясняет, что означают все возможности.