#!/usr/bin/perl use strict; use warnings; use Tk; use Term::ReadLine 1.09; use File::Basename; use lib dirname($0) . '/lib'; use ExampleHelpers qw( initialize_completion update_time print_input ); our $mw = MainWindow->new(-title => ''); $mw->withdraw(); my $w; $w = sub { update_time(); Tk::after($mw, 1000, $w) }; Tk::after($mw, 1000, $w); my $term = Term::ReadLine->new('...'); initialize_completion($term); # set up the event loop callbacks. my $fh; # so we can save it to unhook later. $term->event_loop( sub { my $data = shift; Tk::DoOneEvent(0) until $$data; $$data = 0; }, sub { $fh = shift; my $data; $$data = 0; Tk->fileevent($fh, 'readable', sub { $$data = 1 }); $data; } ); my $input = $term->readline('> '); # when we're completely done, we can do this. Note that this still does not # allow us to create a second T::RL, so only do this when your process # will not use T::RL ever again. Most of the time we shouldn't need this, # though some event loops may require this. Reading AnyEvent::Impl::Tk # seems to imply that not cleaning up may cause crashes, for example. $term->event_loop(undef); # unhook our fileevent: Tk->fileevent($fh, 'readable', ""); print_input($input);