0
印刷する代わりに、行と列を変数に取り込む方法はありますか(ここでは^[[12;1R
)?端末制御のエスケープシーケンス: " e [6n"で行と列をキャッチする方法は?
#!/usr/bin/env perl
use warnings;
use 5.012;
print "\n" x 10;
say "\e[6n";
印刷する代わりに、行と列を変数に取り込む方法はありますか(ここでは^[[12;1R
)?端末制御のエスケープシーケンス: " e [6n"で行と列をキャッチする方法は?
#!/usr/bin/env perl
use warnings;
use 5.012;
print "\n" x 10;
say "\e[6n";
私はこれを見つけた:それはしばらく時間がかかった
#!/usr/bin/env perl
use warnings;
use 5.012;
use Term::ReadKey;
ReadMode 4;
system('clear') == 0 or die $?;
print "\e[6n";
my ($x, $y) = getch();
say "Col: $x - Row: $y";
print "Hello world\n" x 6;
print "\e[6n";
($x, $y) = getch();
say "Col: $x - Row: $y";
print "String\n" x 5;
print "go to column 21 -> |";
print "\e[6n";
($x, $y) = getch();
say "Col: $x - Row: $y";
ReadMode 0;
sub getch {
my $c = ReadKey 0;
if ($c eq "\e") {
my $c = ReadKey 0.10;
if ($c eq '[') {
my $c = ReadKey 0;
if ($c =~ /\A\d/) {
my $c1 = ReadKey 0;
if ($c1 ne '~') {
my $y = 0 + $c;
while (1) {
last if $c1 eq ';';
$y = 10 * $y + $c1;
$c1 = ReadKey 0;
}
my $x = 0;
while (1) {
$c1 = ReadKey 0;
last if $c1 eq 'R';
$x = 10 * $x + $c1;
}
return $x, $y;
}
}
}
}
}
は申し訳ありませんが、私は質問を更新するのを忘れ、その後とっくの昔、この機能を追加;)
use Term::TermKey;
my $termkey = Term::TermKey->new(\*STDIN);
STDOUT->autoflush(1);
print "\e[6n";
while($termkey->waitkey(my $key) == RES_KEY) {
if($key->type_is_position) {
printf "Position is %d, %d\n", $key->col, $key->line;
last;
}
}
私がしようとしていましたTerm :: TermKey'を使うことを提案していますが、実際にはまだそれをサポートしていないことに気付きました。 Hrmmm .. 私はこれを機能の要点の要点と考え、私が思いつくものを見ていきます – LeoNerd