App-sersh
view release on metacpan or search on metacpan
}
my $hist_file = $cfg_dir->file('.sersh_history');
my @histfile_lines = $hist_file->slurp();
if (@histfile_lines > $HISTSIZE_MAX) {
splice(@histfile_lines, 0, (@histfile_lines - $HISTSIZE_MAX));
$hist_file->spew(\@histfile_lines);
}
@histfile_lines = map {chomp($_); $_;} @histfile_lines;
my $run_cv = AnyEvent->condvar;
my $prompt_prefix = $serial_fn . "> ";
my $serial_ae = AnyEvent::SerialPort->new(
serial_port => [
$serial_fn,
[baudrate => $baudrate],
[parity => $parity],
[databits => $databits],
[stopbits => $stopbits],
[handshake => $handshake],
],
# print data from serial
$serial_ae->on_read(
sub {
my ($hdl) = @_;
AnyEvent::ReadLine::Gnu->print($hdl->rbuf);
$hdl->rbuf = '';
}
);
my $term_rl = AnyEvent::ReadLine::Gnu->new(
prompt => $prompt_prefix,
on_line => sub {
my ($line) = @_;
# EOF
if (!defined($line)) {
AnyEvent::ReadLine::Gnu->print("\n");
$run_cv->send;
return;
}
my $wt = AE::signal TERM => $term_cb;
my $wh = AE::signal HUP => $term_cb;
# on Ctrl-C cancel current command
my $wi = AE::signal INT => sub {
my $old_text = $term_rl->Attribs->{line_buffer};
$term_rl->modifying;
$term_rl->delete_text;
$term_rl->Attribs->{point} = $term_rl->Attribs->{end} = 0;
$term_rl->redisplay;
AnyEvent::ReadLine::Gnu->print($prompt_prefix . $old_text . "^C\n");
};
AnyEvent::ReadLine::Gnu->print(
'connected to ', $serial_fn, ', baudrate: ', $baudrate, ', databits: ', $databits,
', parity: ', $parity, ', stobits: ', $stopbits, ', handshake: ', $handshake,
"\n"
);
$run_cv->recv;
return 0;
( run in 1.569 second using v1.01-cache-2.11-cpan-6aa56a78535 )