File: lineeditor.pl

package info (click to toggle)
libterm-termkey-perl 0.19-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 232 kB
  • sloc: perl: 370; makefile: 5
file content (43 lines) | stat: -rw-r--r-- 877 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/perl

use v5.14;
use warnings;

use Term::TermKey qw( FLAG_UTF8 RES_EOF FORMAT_LONGMOD );

my $tk = Term::TermKey->new(\*STDIN);

# ensure perl and libtermkey agree on Unicode handling
binmode( STDOUT, ":encoding(UTF-8)" ) if $tk->get_flags & FLAG_UTF8;

my $line = "";

$| = 1;

my %key_handlers = (
   "Enter"  => sub { 
     print "\nThe line is: $line\n";
     $line = "";
  },

   "Backspace" => sub {
      return unless length $line;
      substr( $line, -1, 1 ) = "";
      print "\cH \cH"; # erase it
   },

   # other handlers ...
);

while( ( my $ret = $tk->waitkey( my $key ) ) != RES_EOF ) {
   my $handler = $key_handlers{ $tk->format_key( $key, FORMAT_LONGMOD ) };
   if( $handler ) {
      $handler->( $key );
   }
   elsif( $key->type_is_unicode and !$key->modifiers ) {
      my $char = $key->utf8;

      $line .= $char;
      print $char;
   }
}