Hi All, With the help of Geekosaur over on the chat line, I fixed my Pause.pm6 module. I came across a computer where the module froze the terminal. Now it is fixed. I stood on the shoulders of giants! Love the chat line!
Geekosaur found and reported a bug in the example of Term::termios https://github.com/krunen/term-termios/issues/10 To get my module and test program without the annoying eMail line breaks: http://vpaste.net/y37Pe -T <code Pause.pm6> #!/usr/bin/env perl6 # Pause.pm6 #`{ References: https://github.com/krunen/term-termios https://github.com/ab5tract/Terminal-Print/blob/master/lib/Terminal/Print/RawInput.pm6#L17 https://linux.die.net/man/3/termios # zef install Term::termios (as root) # zef install Terminal::Print::RawInput (as root) } use Term::termios; use Terminal::Print::RawInput; sub Pause ( $PauseMessage) is export { #`{ This sub will 1) dump (flush) the keyboard buffer 2) print out $PauseMessage 3) wait for a new (fresh) keyboard stroke 4) return the ASCII equivalent key that was pressed Note: the GUI (Xfce, ec.) has precedence over reading unusual keys, such as the "F" keys, etc. } my $c; my $char; my $saved_termios; my $termios; # Save the previous attrs $saved_termios := Term::termios.new(fd => 1).getattr; # Get the existing attrs in order to modify them $termios := Term::termios.new(fd => 1).getattr; # Set the tty to raw mode $termios.makeraw; # You could also do the same in the old-fashioned way $termios.unset_iflags(<BRKINT ICRNL ISTRIP IXON>); $termios.set_oflags(<ONLCR>); $termios.set_cflags(<CS8>); $termios.unset_lflags(<ECHO ICANON IEXTEN ISIG>); # int "\n"; print "$PauseMessage"; $termios.setattr(:DRAIN); $termios.setattr(:FLUSH); # Disable Unicode grapheme processing $*IN.encoding: Nil; $c = $*IN.read(1).decode('latin-1'); $char = $c.ord < 32 ?? '^' ~ ($c.ord + 64).chr !! $c; print "got: " ~ $c.ord ~ " $char\r\n"; #`{ my $in-supply = raw-input-supply; react { whenever $in-supply -> $c { $char = $c.ord < 32 ?? '^' ~ ($c.ord + 64).chr !! $c; # printf "got: %3d %2s %2s\r\n", $c.ord, $c.ord.base(16), $char; # done if $c eq 'q'; done; } } } # Restore the saved, previous attributes before exit $saved_termios.setattr(:DRAIN); # print "$char\n"; return $char } </code> <code Pause.pl6> #!/usr/bin/env perl6 use lib '/home/linuxutil'; use strict; use Pause; # qw[ Pause ]; my @z = qw[z zz zzz zzzz snore]; say "Sleeping for ", @z.elems, " seconds. Press some keys."; for @z { sleep 1; print "$_ " }; print "\n"; my $Key = Pause( 'Press any key to continue... ' ); print "The key that was pressed was <$Key>\n"; </code>