Skip to content

Commit b8084cf

Browse files
committed
Add a field / setter for the forced provider
1 parent 9a216ca commit b8084cf

File tree

1 file changed

+29
-20
lines changed

1 file changed

+29
-20
lines changed

terminal/src/main/java/org/jline/terminal/TerminalBuilder.java

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ public static TerminalBuilder builder() {
146146
private int codepage;
147147
private Boolean system;
148148
private SystemOutput systemOutput;
149+
private String provider;
149150
private String providers;
150151
private Boolean jna;
151152
private Boolean jansi;
@@ -192,6 +193,11 @@ public TerminalBuilder systemOutput(SystemOutput systemOutput) {
192193
return this;
193194
}
194195

196+
public TerminalBuilder provider(String provider) {
197+
this.provider = provider;
198+
return this;
199+
}
200+
195201
public TerminalBuilder providers(String providers) {
196202
this.providers = providers;
197203
return this;
@@ -369,17 +375,20 @@ private Terminal doBuild() throws IOException {
369375
Charset encoding = computeEncoding();
370376
String type = computeType();
371377

372-
String forcedProvider = System.getProperty(PROP_PROVIDER, null);
378+
String provider = this.provider;
379+
if (provider == null) {
380+
provider = System.getProperty(PROP_PROVIDER, null);
381+
}
373382

374383
boolean forceDumb =
375384
(DumbTerminal.TYPE_DUMB.equals(type) || type != null && type.startsWith(DumbTerminal.TYPE_DUMB_COLOR))
376-
|| (forcedProvider != null && forcedProvider.equals(PROP_PROVIDER_DUMB));
385+
|| (provider != null && provider.equals(PROP_PROVIDER_DUMB));
377386
Boolean dumb = this.dumb;
378387
if (dumb == null) {
379388
dumb = getBoolean(PROP_DUMB, null);
380389
}
381390
IllegalStateException exception = new IllegalStateException("Unable to create a terminal");
382-
List<TerminalProvider> providers = getProviders(forcedProvider, exception);
391+
List<TerminalProvider> providers = getProviders(provider, exception);
383392
Terminal terminal = null;
384393
if ((system != null && system) || (system == null && in == null && out == null)) {
385394
if (system != null
@@ -409,10 +418,10 @@ private Terminal doBuild() throws IOException {
409418
&& System.getProperty(PROP_TYPE) == null) {
410419
type = "xterm-256color";
411420
}
412-
for (TerminalProvider provider : providers) {
421+
for (TerminalProvider prov : providers) {
413422
if (terminal == null) {
414423
try {
415-
terminal = provider.sysTerminal(
424+
terminal = prov.sysTerminal(
416425
name,
417426
type,
418427
ansiPassThrough,
@@ -422,7 +431,7 @@ private Terminal doBuild() throws IOException {
422431
paused,
423432
systemStream);
424433
} catch (Throwable t) {
425-
Log.debug("Error creating " + provider.name() + " based terminal: ", t.getMessage(), t);
434+
Log.debug("Error creating " + prov.name() + " based terminal: ", t.getMessage(), t);
426435
exception.addSuppressed(t);
427436
}
428437
}
@@ -466,13 +475,13 @@ private Terminal doBuild() throws IOException {
466475
}
467476
}
468477
} else {
469-
for (TerminalProvider provider : providers) {
478+
for (TerminalProvider prov : providers) {
470479
if (terminal == null) {
471480
try {
472-
terminal = provider.newTerminal(
481+
terminal = prov.newTerminal(
473482
name, type, in, out, encoding, signalHandler, paused, attributes, size);
474483
} catch (Throwable t) {
475-
Log.debug("Error creating " + provider.name() + " based terminal: ", t.getMessage(), t);
484+
Log.debug("Error creating " + prov.name() + " based terminal: ", t.getMessage(), t);
476485
exception.addSuppressed(t);
477486
}
478487
}
@@ -605,18 +614,18 @@ public Charset computeEncoding() {
605614
return encoding;
606615
}
607616

608-
public List<TerminalProvider> getProviders(String forcedProvider, IllegalStateException exception) {
617+
public List<TerminalProvider> getProviders(String provider, IllegalStateException exception) {
609618
List<TerminalProvider> providers = new ArrayList<>();
610619
// Check ffm provider
611-
checkProvider(forcedProvider, exception, providers, ffm, PROP_FFM, PROP_PROVIDER_FFM);
620+
checkProvider(provider, exception, providers, ffm, PROP_FFM, PROP_PROVIDER_FFM);
612621
// Check jni provider
613-
checkProvider(forcedProvider, exception, providers, jni, PROP_JNI, PROP_PROVIDER_JNI);
622+
checkProvider(provider, exception, providers, jni, PROP_JNI, PROP_PROVIDER_JNI);
614623
// Check jansi provider
615-
checkProvider(forcedProvider, exception, providers, jansi, PROP_JANSI, PROP_PROVIDER_JANSI);
624+
checkProvider(provider, exception, providers, jansi, PROP_JANSI, PROP_PROVIDER_JANSI);
616625
// Check jna provider
617-
checkProvider(forcedProvider, exception, providers, jna, PROP_JNA, PROP_PROVIDER_JNA);
626+
checkProvider(provider, exception, providers, jna, PROP_JNA, PROP_PROVIDER_JNA);
618627
// Check exec provider
619-
checkProvider(forcedProvider, exception, providers, exec, PROP_EXEC, PROP_PROVIDER_EXEC);
628+
checkProvider(provider, exception, providers, exec, PROP_EXEC, PROP_PROVIDER_EXEC);
620629
// Order providers
621630
List<String> order = Arrays.asList(
622631
(this.providers != null ? this.providers : System.getProperty(PROP_PROVIDERS, PROP_PROVIDERS_DEFAULT))
@@ -631,21 +640,21 @@ public List<TerminalProvider> getProviders(String forcedProvider, IllegalStateEx
631640
}
632641

633642
private void checkProvider(
634-
String forcedProvider,
643+
String provider,
635644
IllegalStateException exception,
636645
List<TerminalProvider> providers,
637646
Boolean load,
638647
String property,
639648
String name) {
640-
Boolean doLoad = forcedProvider != null ? (Boolean) name.equals(forcedProvider) : load;
649+
Boolean doLoad = provider != null ? (Boolean) name.equals(provider) : load;
641650
if (doLoad == null) {
642651
doLoad = getBoolean(property, true);
643652
}
644653
if (doLoad) {
645654
try {
646-
TerminalProvider provider = TerminalProvider.load(name);
647-
provider.isSystemStream(SystemStream.Output);
648-
providers.add(provider);
655+
TerminalProvider prov = TerminalProvider.load(name);
656+
prov.isSystemStream(SystemStream.Output);
657+
providers.add(prov);
649658
} catch (Throwable t) {
650659
Log.debug("Unable to load " + name + " provider: ", t);
651660
exception.addSuppressed(t);

0 commit comments

Comments
 (0)