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 ;
@@ -453,7 +453,8 @@ protected void launch(Builder contextBuilder) {
453
453
contextBuilder .option ("python.UnbufferedIO" , Boolean .toString (unbufferedIO ));
454
454
455
455
ConsoleHandler consoleHandler = createConsoleHandler (System .in , System .out );
456
- contextBuilder .arguments (getLanguageId (), programArgs .toArray (new String [0 ])).in (consoleHandler .createInputStream ());
456
+ contextBuilder .arguments (getLanguageId (), programArgs .toArray (new String [programArgs .size ()]));
457
+ contextBuilder .in (consoleHandler .createInputStream ());
457
458
contextBuilder .option ("python.TerminalIsInteractive" , Boolean .toString (stdinIsInteractive ));
458
459
contextBuilder .option ("python.TerminalWidth" , Integer .toString (consoleHandler .getTerminalWidth ()));
459
460
contextBuilder .option ("python.TerminalHeight" , Integer .toString (consoleHandler .getTerminalHeight ()));
@@ -681,11 +682,12 @@ protected void collectArguments(Set<String> options) {
681
682
options .add ("--show-version" );
682
683
}
683
684
684
- public ConsoleHandler createConsoleHandler (InputStream inStream , OutputStream outStream ) {
685
- if (inputFile != null || commandString != null ) {
686
- return new DefaultConsoleHandler (inStream , outStream );
685
+ private ConsoleHandler createConsoleHandler (InputStream inStream , OutputStream outStream ) {
686
+ if (!stdinIsInteractive ) {
687
+ return new DefaultConsoleHandler (inStream );
688
+ } else {
689
+ return new JLineConsoleHandler (inStream , outStream , false );
687
690
}
688
- return new JLineConsoleHandler (inStream , outStream , false );
689
691
}
690
692
691
693
/**
@@ -796,34 +798,37 @@ private void setupREPL(Context context, ConsoleHandler consoleHandler) {
796
798
// history feature
797
799
evalInternal (context , "import sys\n getattr(sys, '__interactivehook__', lambda: None)()\n " );
798
800
final Value readline = evalInternal (context , "import readline; readline" );
799
- final Value completer = readline .getMember ("get_completer" ).execute ();
801
+ final Value getCompleter = readline .getMember ("get_completer" ).execute ();
800
802
final Value shouldRecord = readline .getMember ("get_auto_history" );
801
803
final Value addHistory = readline .getMember ("add_history" );
802
804
final Value getHistoryItem = readline .getMember ("get_history_item" );
803
805
final Value setHistoryItem = readline .getMember ("replace_history_item" );
804
806
final Value deleteHistoryItem = readline .getMember ("remove_history_item" );
805
807
final Value clearHistory = readline .getMember ("clear_history" );
806
808
final Value getHistorySize = readline .getMember ("get_current_history_length" );
807
- consoleHandler .setHistory (
808
- () -> shouldRecord .execute ().asBoolean (),
809
- () -> getHistorySize .execute ().asInt (),
810
- (item ) -> addHistory .execute (item ),
811
- (pos ) -> getHistoryItem .execute (pos ).asString (),
812
- (pos , item ) -> setHistoryItem .execute (pos , item ),
813
- (pos ) -> deleteHistoryItem .execute (pos ),
814
- () -> clearHistory .execute ());
815
809
816
- if (completer .canExecute ()) {
817
- consoleHandler .addCompleter ((buffer ) -> {
810
+ Function <String , List <String >> completer = null ;
811
+ if (getCompleter .canExecute ()) {
812
+ completer = (buffer ) -> {
818
813
List <String > candidates = new ArrayList <>();
819
- Value candidate = completer .execute (buffer , candidates .size ());
814
+ Value candidate = getCompleter .execute (buffer , candidates .size ());
820
815
while (candidate .isString ()) {
821
816
candidates .add (candidate .asString ());
822
- candidate = completer .execute (buffer , candidates .size ());
817
+ candidate = getCompleter .execute (buffer , candidates .size ());
823
818
}
824
819
return candidates ;
825
- }) ;
820
+ };
826
821
}
822
+ consoleHandler .setupReader (
823
+ () -> shouldRecord .execute ().asBoolean (),
824
+ () -> getHistorySize .execute ().asInt (),
825
+ (item ) -> addHistory .execute (item ),
826
+ (pos ) -> getHistoryItem .execute (pos ).asString (),
827
+ (pos , item ) -> setHistoryItem .execute (pos , item ),
828
+ (pos ) -> deleteHistoryItem .execute (pos ),
829
+ () -> clearHistory .execute (),
830
+ completer );
831
+
827
832
}
828
833
829
834
/**
0 commit comments