I am using the Perl 6 module Term::termios.
#!/usr/bin/env perl6
use v6;
use Term::termios;
my $saved_termios := Term::termios.new(fd => 1).getattr;
my $termios := Term::termios.new(fd => 1).getattr;
$termios.makeraw;
$termios.setattr(:DRAIN);
loop {
my $c = $*IN.getc;
print "got: " ~ $c.ord ~ "\r\n";
last if $c eq 'q';
}
$saved_termios.setattr(:DRAIN);
When I run this script and press the keys up-arrow, down-arrow, right-arrow, left-arrow and q this is the output:
#after arrow-up:
got: 27
got: 91
#after arrow-down:
got: 65
got: 27
got: 91
#after arrow-right:
got: 66
got: 27
got: 91
#after arrow-left:
got: 67
got: 27
got: 91
#after q:
got: 68
#after another q:
got: 113
But I would have expected:
#after arrow-up:
got: 27
got: 91
got: 65
#after arrow-down:
got: 27
got: 91
got: 66
#after arrow-right:
got: 27
got: 91
got: 67
#after arrow-left:
got: 27
got: 91
got: 68
#after q:
got: 113
How do I have to modify the script to get the desired output?
$*IN.getc
, have you tried using$*IN.read(1)
(and modifying your code to take a Buf instead of a String)? – Cardinread()
it worked. Could you change your comment to an answer? – Larkin