57
57
import org .graalvm .polyglot .Value ;
58
58
59
59
import com .oracle .truffle .llvm .toolchain .launchers .common .Driver ;
60
-
61
- import jline .console .UserInterruptException ;
60
+ import java . util . function . Function ;
61
+ import org . graalvm . shadowed . org . jline .reader .UserInterruptException ;
62
62
63
63
public class GraalPythonMain extends AbstractLanguageLauncher {
64
64
public static void main (String [] args ) {
@@ -81,7 +81,7 @@ public static void main(String[] args) {
81
81
private boolean quietFlag = false ;
82
82
private boolean noUserSite = false ;
83
83
private boolean noSite = false ;
84
- private boolean stdinIsInteractive = System .console () != null ;
84
+ private final boolean stdinIsInteractive = System .console () != null ;
85
85
private boolean unbufferedIO = false ;
86
86
private boolean multiContext = false ;
87
87
private VersionAction versionAction = VersionAction .None ;
@@ -458,7 +458,8 @@ protected void launch(Builder contextBuilder) {
458
458
contextBuilder .option ("python.UnbufferedIO" , Boolean .toString (unbufferedIO ));
459
459
460
460
ConsoleHandler consoleHandler = createConsoleHandler (System .in , System .out );
461
- contextBuilder .arguments (getLanguageId (), programArgs .toArray (new String [0 ])).in (consoleHandler .createInputStream ());
461
+ contextBuilder .arguments (getLanguageId (), programArgs .toArray (new String [programArgs .size ()]));
462
+ contextBuilder .in (consoleHandler .createInputStream ());
462
463
contextBuilder .option ("python.TerminalIsInteractive" , Boolean .toString (stdinIsInteractive ));
463
464
contextBuilder .option ("python.TerminalWidth" , Integer .toString (consoleHandler .getTerminalWidth ()));
464
465
contextBuilder .option ("python.TerminalHeight" , Integer .toString (consoleHandler .getTerminalHeight ()));
@@ -684,11 +685,12 @@ protected void collectArguments(Set<String> options) {
684
685
options .add ("--show-version" );
685
686
}
686
687
687
- public ConsoleHandler createConsoleHandler (InputStream inStream , OutputStream outStream ) {
688
- if (inputFile != null || commandString != null ) {
689
- return new DefaultConsoleHandler (inStream , outStream );
688
+ private ConsoleHandler createConsoleHandler (InputStream inStream , OutputStream outStream ) {
689
+ if (!stdinIsInteractive ) {
690
+ return new DefaultConsoleHandler (inStream );
691
+ } else {
692
+ return new JLineConsoleHandler (inStream , outStream , false );
690
693
}
691
- return new JLineConsoleHandler (inStream , outStream , false );
692
694
}
693
695
694
696
/**
@@ -799,34 +801,37 @@ private void setupREPL(Context context, ConsoleHandler consoleHandler) {
799
801
// history feature
800
802
evalInternal (context , "import sys\n getattr(sys, '__interactivehook__', lambda: None)()\n " );
801
803
final Value readline = evalInternal (context , "import readline; readline" );
802
- final Value completer = readline .getMember ("get_completer" ).execute ();
804
+ final Value getCompleter = readline .getMember ("get_completer" ).execute ();
803
805
final Value shouldRecord = readline .getMember ("get_auto_history" );
804
806
final Value addHistory = readline .getMember ("add_history" );
805
807
final Value getHistoryItem = readline .getMember ("get_history_item" );
806
808
final Value setHistoryItem = readline .getMember ("replace_history_item" );
807
809
final Value deleteHistoryItem = readline .getMember ("remove_history_item" );
808
810
final Value clearHistory = readline .getMember ("clear_history" );
809
811
final Value getHistorySize = readline .getMember ("get_current_history_length" );
810
- consoleHandler .setHistory (
811
- () -> shouldRecord .execute ().asBoolean (),
812
- () -> getHistorySize .execute ().asInt (),
813
- (item ) -> addHistory .execute (item ),
814
- (pos ) -> getHistoryItem .execute (pos ).asString (),
815
- (pos , item ) -> setHistoryItem .execute (pos , item ),
816
- (pos ) -> deleteHistoryItem .execute (pos ),
817
- () -> clearHistory .execute ());
818
812
819
- if (completer .canExecute ()) {
820
- consoleHandler .addCompleter ((buffer ) -> {
813
+ Function <String , List <String >> completer = null ;
814
+ if (getCompleter .canExecute ()) {
815
+ completer = (buffer ) -> {
821
816
List <String > candidates = new ArrayList <>();
822
- Value candidate = completer .execute (buffer , candidates .size ());
817
+ Value candidate = getCompleter .execute (buffer , candidates .size ());
823
818
while (candidate .isString ()) {
824
819
candidates .add (candidate .asString ());
825
- candidate = completer .execute (buffer , candidates .size ());
820
+ candidate = getCompleter .execute (buffer , candidates .size ());
826
821
}
827
822
return candidates ;
828
- }) ;
823
+ };
829
824
}
825
+ consoleHandler .setupReader (
826
+ () -> shouldRecord .execute ().asBoolean (),
827
+ () -> getHistorySize .execute ().asInt (),
828
+ (item ) -> addHistory .execute (item ),
829
+ (pos ) -> getHistoryItem .execute (pos ).asString (),
830
+ (pos , item ) -> setHistoryItem .execute (pos , item ),
831
+ (pos ) -> deleteHistoryItem .execute (pos ),
832
+ () -> clearHistory .execute (),
833
+ completer );
834
+
830
835
}
831
836
832
837
/**
0 commit comments