From: Jonathan Stowe Date: Mon, 13 Mar 2006 16:09:44 +0000 (+0000) Subject: Re: [cpan #17773] Bug in Term::ReadKey being trigger by a bug in Term::ReadLine X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=3b2be7b35137c72736bf3f9305f26b39b783dd74;p=p5sagit%2Fp5-mst-13.2.git Re: [cpan #17773] Bug in Term::ReadKey being trigger by a bug in Term::ReadLine Message-Id: <1142266184.5811.141.camel@orpheus.gellyfish.com> p4raw-id: //depot/perl@27619 --- diff --git a/lib/Term/ReadLine.pm b/lib/Term/ReadLine.pm index 48eb991..0b25379 100644 --- a/lib/Term/ReadLine.pm +++ b/lib/Term/ReadLine.pm @@ -209,13 +209,15 @@ sub addhistory {} sub findConsole { my $console; + my $consoleOUT; if ($^O eq 'MacOS') { $console = "Dev:Console"; } elsif (-e "/dev/tty") { $console = "/dev/tty"; } elsif (-e "con" or $^O eq 'MSWin32') { - $console = "con"; + $console = 'CONIN$'; + $consoleOUT = 'CONOUT$'; } else { $console = "sys\$command"; } @@ -231,10 +233,10 @@ sub findConsole { } } - my $consoleOUT = $console; + $consoleOUT = $console unless defined $consoleOUT; $console = "&STDIN" unless defined $console; if (!defined $consoleOUT) { - $consoleOUT = defined fileno(STDERR) ? "&STDERR" : "&STDOUT"; + $consoleOUT = defined fileno(STDERR) && $^O ne 'MSWin32' ? "&STDERR" : "&STDOUT"; } ($console,$consoleOUT); } @@ -247,8 +249,13 @@ sub new { if (@_==2) { my($console, $consoleOUT) = $_[0]->findConsole; - open(FIN, "<$console"); - open(FOUT,">$consoleOUT"); + + # the Windows CONIN$ needs GENERIC_WRITE mode to allow + # a SetConsoleMode() if we end up using Term::ReadKey + open FIN, ( $^O eq 'MSWin32' && $console eq 'CONIN$' ) ? "+<$console" : + "<$console"; + open FOUT,">$consoleOUT"; + #OUT->autoflush(1); # Conflicts with debugger? my $sel = select(FOUT); $| = 1; # for DB::OUT