A workaround for using Term::ReadLine in emacs minibuffer
Jarkko Hietaniemi [Sun, 25 Mar 2001 20:37:43 +0000 (20:37 +0000)]
from Wybo Dekker <wybo@servalys.nl> and Johan Vromans;
additional tweaks from Ilya Zakharevich.

p4raw-id: //depot/perl@9344

lib/Term/ReadLine.pm

index 491ce79..5a8c251 100644 (file)
@@ -157,6 +157,22 @@ empty, the best available package is loaded.
 (Note that processing of C<PERL_RL> for ornaments is in the discretion of the 
 particular used C<Term::ReadLine::*> package).
 
+=head1 CAVEATS
+
+It seems that using Term::ReadLine from Emacs minibuffer doesn't work
+quite right and one will get an error message like
+
+    Cannot open /dev/tty for read at ...
+
+One possible workaround for this is to explicitly open /dev/tty like this
+
+    open (FH, "/dev/tty" )
+      or eval 'sub Term::ReadLine::findConsole { ("&STDIN", "&STDERR") }';
+    die $@ if $@;
+    close (FH);
+
+or you can try using the 4-argument form of Term::ReadLine->new().
+
 =cut
 
 use strict;
@@ -225,7 +241,7 @@ sub new {
   #local (*FIN, *FOUT);
   my ($FIN, $FOUT, $ret);
   if (@_==2) {
-    my($console, $consoleOUT) = findConsole;
+    my($console, $consoleOUT) = $_[0]->findConsole;
 
     open(FIN, "<$console"); 
     open(FOUT,">$consoleOUT");