Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into i861
Browse files Browse the repository at this point in the history
  • Loading branch information
gnodet committed Oct 24, 2023
2 parents fe7d716 + 2c8891a commit be9a4e2
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 16 deletions.
30 changes: 19 additions & 11 deletions terminal/src/main/java/org/jline/terminal/TerminalBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@

import org.jline.terminal.impl.AbstractPosixTerminal;
import org.jline.terminal.impl.AbstractTerminal;
import org.jline.terminal.impl.DumbTerminal;
import org.jline.terminal.impl.DumbTerminalProvider;
import org.jline.terminal.spi.SystemStream;
import org.jline.terminal.spi.TerminalProvider;
Expand All @@ -47,6 +48,7 @@ public final class TerminalBuilder {
public static final String PROP_ENCODING = "org.jline.terminal.encoding";
public static final String PROP_CODEPAGE = "org.jline.terminal.codepage";
public static final String PROP_TYPE = "org.jline.terminal.type";
public static final String PROP_PROVIDER = "org.jline.terminal.provider";
public static final String PROP_PROVIDERS = "org.jline.terminal.providers";
public static final String PROP_PROVIDER_FFM = "ffm";
public static final String PROP_PROVIDER_JNI = "jni";
Expand Down Expand Up @@ -367,12 +369,17 @@ private Terminal doBuild() throws IOException {
Charset encoding = computeEncoding();
String type = computeType();

String forcedProvider = System.getProperty(PROP_PROVIDER, null);

boolean forceDumb =
(DumbTerminal.TYPE_DUMB.equals(type) || type != null && type.startsWith(DumbTerminal.TYPE_DUMB_COLOR))
|| (forcedProvider != null && forcedProvider.equals(PROP_PROVIDER_DUMB));
Boolean dumb = this.dumb;
if (dumb == null) {
dumb = getBoolean(PROP_DUMB, null);
}
IllegalStateException exception = new IllegalStateException("Unable to create a terminal");
List<TerminalProvider> providers = getProviders(exception);
List<TerminalProvider> providers = getProviders(forcedProvider, exception);
Terminal terminal = null;
if ((system != null && system) || (system == null && in == null && out == null)) {
if (system != null
Expand All @@ -389,7 +396,7 @@ private Terminal doBuild() throws IOException {
stream -> stream, stream -> providers.stream().anyMatch(p -> p.isSystemStream(stream))));
SystemStream systemStream = select(system, systemOutput);

if (system.get(SystemStream.Input) && systemStream != null) {
if (!forceDumb && system.get(SystemStream.Input) && systemStream != null) {
if (attributes != null || size != null) {
Log.warn("Attributes and size fields are ignored when creating a system terminal");
}
Expand Down Expand Up @@ -437,8 +444,8 @@ private Terminal doBuild() throws IOException {
terminal = null;
}
}
if (terminal == null && (dumb == null || dumb)) {
if (dumb == null) {
if (terminal == null && (forceDumb || dumb == null || dumb)) {
if (!forceDumb && dumb == null) {
if (Log.isDebugEnabled()) {
Log.warn("input is tty: {}", system.get(SystemStream.Input));
Log.warn("output is tty: {}", system.get(SystemStream.Output));
Expand Down Expand Up @@ -593,18 +600,18 @@ public Charset computeEncoding() {
return encoding;
}

public List<TerminalProvider> getProviders(IllegalStateException exception) {
public List<TerminalProvider> getProviders(String forcedProvider, IllegalStateException exception) {
List<TerminalProvider> providers = new ArrayList<>();
// Check ffm provider
checkProvider(exception, providers, ffm, PROP_FFM, PROP_PROVIDER_FFM);
checkProvider(forcedProvider, exception, providers, ffm, PROP_FFM, PROP_PROVIDER_FFM);
// Check jni provider
checkProvider(exception, providers, jni, PROP_JNI, PROP_PROVIDER_JNI);
checkProvider(forcedProvider, exception, providers, jni, PROP_JNI, PROP_PROVIDER_JNI);
// Check jansi provider
checkProvider(exception, providers, jansi, PROP_JANSI, PROP_PROVIDER_JANSI);
checkProvider(forcedProvider, exception, providers, jansi, PROP_JANSI, PROP_PROVIDER_JANSI);
// Check jna provider
checkProvider(exception, providers, jna, PROP_JNA, PROP_PROVIDER_JNA);
checkProvider(forcedProvider, exception, providers, jna, PROP_JNA, PROP_PROVIDER_JNA);
// Check exec provider
checkProvider(exception, providers, exec, PROP_EXEC, PROP_PROVIDER_EXEC);
checkProvider(forcedProvider, exception, providers, exec, PROP_EXEC, PROP_PROVIDER_EXEC);
// Order providers
List<String> order = Arrays.asList(
(this.providers != null ? this.providers : System.getProperty(PROP_PROVIDERS, PROP_PROVIDERS_DEFAULT))
Expand All @@ -619,12 +626,13 @@ public List<TerminalProvider> getProviders(IllegalStateException exception) {
}

private void checkProvider(
String forcedProvider,
IllegalStateException exception,
List<TerminalProvider> providers,
Boolean load,
String property,
String name) {
Boolean doLoad = load;
Boolean doLoad = forcedProvider != null ? (Boolean) name.equals(forcedProvider) : load;
if (doLoad == null) {
doLoad = getBoolean(property, true);
}
Expand Down
2 changes: 1 addition & 1 deletion terminal/src/main/java/org/jline/utils/PumpReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ public int read() throws IOException {
return EOF;
}

return buffer.get();
return buffer.get() & 0xFF;
}

private boolean readUsingBuffer() throws IOException {
Expand Down
8 changes: 4 additions & 4 deletions terminal/src/test/java/org/jline/utils/PumpReaderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -101,10 +101,10 @@ public void testSplitSurrogatePair() throws IOException {
InputStream inputStream = pump.createInputStream(StandardCharsets.UTF_8);
byte[] expectedEncoded = "\uD83D\uDE0A".getBytes(StandardCharsets.UTF_8);
assertEquals(4, expectedEncoded.length); // verify that test is correctly implemented
assertEquals(expectedEncoded[0], inputStream.read());
assertEquals(expectedEncoded[1], inputStream.read());
assertEquals(expectedEncoded[2], inputStream.read());
assertEquals(expectedEncoded[3], inputStream.read());
assertEquals(expectedEncoded[0] & 0xff, inputStream.read());
assertEquals(expectedEncoded[1] & 0xff, inputStream.read());
assertEquals(expectedEncoded[2] & 0xff, inputStream.read());
assertEquals(expectedEncoded[3] & 0xff, inputStream.read());
assertEquals(-1, inputStream.read());
}

Expand Down

0 comments on commit be9a4e2

Please sign in to comment.