From cb1762621fe919744ada14c9a21ce4bf53c4dfff Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 11 Oct 2023 09:55:43 +0200 Subject: [PATCH] Clean a bit TerminalBuilder --- .../impl/ffm/FfmTerminalProvider.java | 3 +- .../impl/jansi/JansiTerminalProvider.java | 3 +- .../impl/jna/JnaTerminalProvider.java | 3 +- .../org/jline/terminal/TerminalBuilder.java | 375 +++++++++--------- .../org/jline/terminal/impl/DumbTerminal.java | 15 +- .../terminal/impl/DumbTerminalProvider.java | 84 ++++ .../impl/exec/ExecTerminalProvider.java | 3 +- 7 files changed, 292 insertions(+), 194 deletions(-) create mode 100644 terminal/src/main/java/org/jline/terminal/impl/DumbTerminalProvider.java diff --git a/terminal-ffm/src/main/java/org/jline/terminal/impl/ffm/FfmTerminalProvider.java b/terminal-ffm/src/main/java/org/jline/terminal/impl/ffm/FfmTerminalProvider.java index ac13d1e1a..52fd200fb 100644 --- a/terminal-ffm/src/main/java/org/jline/terminal/impl/ffm/FfmTerminalProvider.java +++ b/terminal-ffm/src/main/java/org/jline/terminal/impl/ffm/FfmTerminalProvider.java @@ -17,6 +17,7 @@ import org.jline.terminal.Attributes; import org.jline.terminal.Size; import org.jline.terminal.Terminal; +import org.jline.terminal.TerminalBuilder; import org.jline.terminal.impl.PosixPtyTerminal; import org.jline.terminal.impl.PosixSysTerminal; import org.jline.terminal.spi.Pty; @@ -35,7 +36,7 @@ public FfmTerminalProvider() { @Override public String name() { - return "ffm"; + return TerminalBuilder.PROP_PROVIDER_FFM; } @Override diff --git a/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/JansiTerminalProvider.java b/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/JansiTerminalProvider.java index 4d01ba644..2d0c56409 100644 --- a/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/JansiTerminalProvider.java +++ b/terminal-jansi/src/main/java/org/jline/terminal/impl/jansi/JansiTerminalProvider.java @@ -20,6 +20,7 @@ import org.jline.terminal.Attributes; import org.jline.terminal.Size; import org.jline.terminal.Terminal; +import org.jline.terminal.TerminalBuilder; import org.jline.terminal.impl.PosixPtyTerminal; import org.jline.terminal.impl.PosixSysTerminal; import org.jline.terminal.impl.jansi.freebsd.FreeBsdNativePty; @@ -80,7 +81,7 @@ public static boolean isAtLeast(int major, int minor) { @Override public String name() { - return "jansi"; + return TerminalBuilder.PROP_PROVIDER_JANSI; } public Pty current(SystemStream systemStream) throws IOException { diff --git a/terminal-jna/src/main/java/org/jline/terminal/impl/jna/JnaTerminalProvider.java b/terminal-jna/src/main/java/org/jline/terminal/impl/jna/JnaTerminalProvider.java index 7dc64e4dd..2b219a817 100644 --- a/terminal-jna/src/main/java/org/jline/terminal/impl/jna/JnaTerminalProvider.java +++ b/terminal-jna/src/main/java/org/jline/terminal/impl/jna/JnaTerminalProvider.java @@ -16,6 +16,7 @@ import org.jline.terminal.Attributes; import org.jline.terminal.Size; import org.jline.terminal.Terminal; +import org.jline.terminal.TerminalBuilder; import org.jline.terminal.impl.PosixPtyTerminal; import org.jline.terminal.impl.PosixSysTerminal; import org.jline.terminal.impl.jna.win.JnaWinSysTerminal; @@ -27,7 +28,7 @@ public class JnaTerminalProvider implements TerminalProvider { @Override public String name() { - return "jna"; + return TerminalBuilder.PROP_PROVIDER_JNA; } public Pty current(SystemStream systemStream) throws IOException { diff --git a/terminal/src/main/java/org/jline/terminal/TerminalBuilder.java b/terminal/src/main/java/org/jline/terminal/TerminalBuilder.java index 32993ba98..1f7fb8fe1 100644 --- a/terminal/src/main/java/org/jline/terminal/TerminalBuilder.java +++ b/terminal/src/main/java/org/jline/terminal/TerminalBuilder.java @@ -8,9 +8,6 @@ */ package org.jline.terminal; -import java.io.FileDescriptor; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -32,7 +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; import org.jline.utils.Log; @@ -51,12 +48,18 @@ public final class TerminalBuilder { 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_PROVIDERS = "org.jline.terminal.providers"; - public static final String PROP_PROVIDERS_DEFAULT = "ffm,jansi,jna,exec"; - public static final String PROP_JNA = "org.jline.terminal.jna"; - public static final String PROP_JANSI = "org.jline.terminal.jansi"; - public static final String PROP_EXEC = "org.jline.terminal.exec"; - public static final String PROP_FFM = "org.jline.terminal.ffm"; - public static final String PROP_DUMB = "org.jline.terminal.dumb"; + public static final String PROP_PROVIDER_FFM = "ffm"; + public static final String PROP_PROVIDER_JANSI = "jansi"; + public static final String PROP_PROVIDER_JNA = "jna"; + public static final String PROP_PROVIDER_EXEC = "exec"; + public static final String PROP_PROVIDER_DUMB = "dumb"; + public static final String PROP_PROVIDERS_DEFAULT = + String.join(",", PROP_PROVIDER_FFM, PROP_PROVIDER_JANSI, PROP_PROVIDER_JNA, PROP_PROVIDER_EXEC); + public static final String PROP_FFM = "org.jline.terminal." + PROP_PROVIDER_FFM; + public static final String PROP_JANSI = "org.jline.terminal." + PROP_PROVIDER_JANSI; + public static final String PROP_JNA = "org.jline.terminal." + PROP_PROVIDER_JNA; + public static final String PROP_EXEC = "org.jline.terminal." + PROP_PROVIDER_EXEC; + public static final String PROP_DUMB = "org.jline.terminal." + PROP_PROVIDER_DUMB; public static final String PROP_DUMB_COLOR = "org.jline.terminal.dumb.color"; public static final String PROP_OUTPUT = "org.jline.terminal.output"; public static final String PROP_OUTPUT_OUT = "out"; @@ -79,7 +82,8 @@ public final class TerminalBuilder { public static final String PROP_FILE_DESCRIPTOR_CREATION_MODE = "org.jline.terminal.pty.fileDescriptorCreationMode"; public static final String PROP_FILE_DESCRIPTOR_CREATION_MODE_NATIVE = "native"; public static final String PROP_FILE_DESCRIPTOR_CREATION_MODE_REFLECTION = "reflection"; - public static final String PROP_FILE_DESCRIPTOR_CREATION_MODE_DEFAULT = "reflection,native"; + public static final String PROP_FILE_DESCRIPTOR_CREATION_MODE_DEFAULT = + String.join(",", PROP_FILE_DESCRIPTOR_CREATION_MODE_REFLECTION, PROP_FILE_DESCRIPTOR_CREATION_MODE_NATIVE); // // System properties controlling how RedirectPipe are created. @@ -88,7 +92,8 @@ public final class TerminalBuilder { public static final String PROP_REDIRECT_PIPE_CREATION_MODE = "org.jline.terminal.exec.redirectPipeCreationMode"; public static final String PROP_REDIRECT_PIPE_CREATION_MODE_NATIVE = "native"; public static final String PROP_REDIRECT_PIPE_CREATION_MODE_REFLECTION = "reflection"; - public static final String PROP_REDIRECT_PIPE_CREATION_MODE_DEFAULT = "reflection,native"; + public static final String PROP_REDIRECT_PIPE_CREATION_MODE_DEFAULT = + String.join(",", PROP_REDIRECT_PIPE_CREATION_MODE_REFLECTION, PROP_REDIRECT_PIPE_CREATION_MODE_NATIVE); // // Terminal output control @@ -351,103 +356,15 @@ private Terminal doBuild() throws IOException { if (name == null) { name = "JLine terminal"; } - Charset encoding = this.encoding; - if (encoding == null) { - String charsetName = System.getProperty(PROP_ENCODING); - if (charsetName != null && Charset.isSupported(charsetName)) { - encoding = Charset.forName(charsetName); - } - } - if (encoding == null) { - int codepage = this.codepage; - if (codepage <= 0) { - String str = System.getProperty(PROP_CODEPAGE); - if (str != null) { - codepage = Integer.parseInt(str); - } - } - if (codepage >= 0) { - encoding = getCodepageCharset(codepage); - } else { - encoding = StandardCharsets.UTF_8; - } - } - String type = this.type; - if (type == null) { - type = System.getProperty(PROP_TYPE); - } - if (type == null) { - type = System.getenv("TERM"); - } - Boolean jna = this.jna; - if (jna == null) { - jna = getBoolean(PROP_JNA, true); - } - Boolean jansi = this.jansi; - if (jansi == null) { - jansi = getBoolean(PROP_JANSI, true); - } - Boolean exec = this.exec; - if (exec == null) { - exec = getBoolean(PROP_EXEC, true); - } - Boolean ffm = this.ffm; - if (ffm == null) { - ffm = getBoolean(PROP_FFM, true); - } + Charset encoding = computeEncoding(); + String type = computeType(); + Boolean dumb = this.dumb; if (dumb == null) { dumb = getBoolean(PROP_DUMB, null); } IllegalStateException exception = new IllegalStateException("Unable to create a terminal"); - List providers = new ArrayList<>(); - if (ffm) { - try { - TerminalProvider provider = TerminalProvider.load("ffm"); - provider.isSystemStream(SystemStream.Output); - providers.add(provider); - } catch (Throwable t) { - Log.debug("Unable to load FFM support: ", t); - exception.addSuppressed(t); - } - } - if (jna) { - try { - TerminalProvider provider = TerminalProvider.load("jna"); - provider.isSystemStream(SystemStream.Output); - providers.add(provider); - } catch (Throwable t) { - Log.debug("Unable to load JNA support: ", t); - exception.addSuppressed(t); - } - } - if (jansi) { - try { - TerminalProvider provider = TerminalProvider.load("jansi"); - provider.isSystemStream(SystemStream.Output); - providers.add(provider); - } catch (Throwable t) { - Log.debug("Unable to load JANSI support: ", t); - exception.addSuppressed(t); - } - } - if (exec) { - try { - TerminalProvider provider = TerminalProvider.load("exec"); - providers.add(provider); - } catch (Throwable t) { - Log.debug("Unable to load EXEC support: ", t); - exception.addSuppressed(t); - } - } - List order = Arrays.asList( - (this.providers != null ? this.providers : System.getProperty(PROP_PROVIDERS, PROP_PROVIDERS_DEFAULT)) - .split(",")); - providers.sort(Comparator.comparing(l -> { - int idx = order.indexOf(l.name()); - return idx >= 0 ? idx : Integer.MAX_VALUE; - })); - + List providers = getProviders(exception); Terminal terminal = null; if ((system != null && system) || (system == null && in == null && out == null)) { if (system != null @@ -458,44 +375,7 @@ private Terminal doBuild() throws IOException { if (attributes != null || size != null) { Log.warn("Attributes and size fields are ignored when creating a system terminal"); } - if (out != null) { - if (out.equals(System.out)) { - systemOutput = SystemOutput.SysOut; - } else if (out.equals(System.err)) { - systemOutput = SystemOutput.SysErr; - } - } - if (systemOutput == null) { - String str = System.getProperty(PROP_OUTPUT); - if (str != null) { - switch (str.trim().toLowerCase(Locale.ROOT)) { - case PROP_OUTPUT_OUT: - systemOutput = SystemOutput.SysOut; - break; - case PROP_OUTPUT_ERR: - systemOutput = SystemOutput.SysErr; - break; - case PROP_OUTPUT_OUT_ERR: - systemOutput = SystemOutput.SysOutOrSysErr; - break; - case PROP_OUTPUT_ERR_OUT: - systemOutput = SystemOutput.SysErrOrSysOut; - break; - default: - Log.debug("Unsupported value for " + PROP_OUTPUT + ": " + str + ". Supported values are: " - + String.join( - ", ", - PROP_OUTPUT_OUT, - PROP_OUTPUT_ERR, - PROP_OUTPUT_OUT_ERR, - PROP_OUTPUT_ERR_OUT) - + "."); - } - } - } - if (systemOutput == null) { - systemOutput = SystemOutput.SysOutOrSysErr; - } + SystemOutput systemOutput = computeSystemOutput(); Map system = Stream.of(SystemStream.values()) .collect(Collectors.toMap( stream -> stream, stream -> providers.stream().anyMatch(p -> p.isSystemStream(stream)))); @@ -550,36 +430,7 @@ private Terminal doBuild() throws IOException { } } if (terminal == null && (dumb == null || dumb)) { - // forced colored dumb terminal - Boolean color = this.color; - if (color == null) { - color = getBoolean(PROP_DUMB_COLOR, null); - } if (dumb == null) { - // detect emacs using the env variable - if (color == null) { - String emacs = System.getenv("INSIDE_EMACS"); - if (emacs != null && emacs.contains("comint")) { - color = true; - } - } - // detect Intellij Idea - if (color == null) { - // using the env variable on windows - String ideHome = System.getenv("IDE_HOME"); - if (ideHome != null) { - color = true; - } else { - // using the parent process command on unix/mac - String command = getParentProcessCommand(); - if (command != null && command.endsWith("/idea")) { - color = true; - } - } - } - if (color == null) { - color = systemStream != null && System.getenv("TERM") != null; - } if (Log.isDebugEnabled()) { Log.warn("input is tty: {}", system.get(SystemStream.Input)); Log.warn("output is tty: {}", system.get(SystemStream.Output)); @@ -589,20 +440,10 @@ private Terminal doBuild() throws IOException { Log.warn( "Unable to create a system terminal, creating a dumb terminal (enable debug logging for more information)"); } - } else { - if (color == null) { - color = false; - } } - terminal = new DumbTerminal( - name, - color ? Terminal.TYPE_DUMB_COLOR : Terminal.TYPE_DUMB, - new FileInputStream(FileDescriptor.in), - new FileOutputStream( - systemStream == SystemStream.Error ? FileDescriptor.err : FileDescriptor.out), - encoding, - signalHandler, - systemStream); + type = getDumbTerminalType(dumb, systemStream); + terminal = new DumbTerminalProvider() + .sysTerminal(name, type, false, encoding, nativeSignals, signalHandler, paused, systemStream); } } else { for (TerminalProvider provider : providers) { @@ -623,6 +464,172 @@ private Terminal doBuild() throws IOException { return terminal; } + private String getDumbTerminalType(Boolean dumb, SystemStream systemStream) { + // forced colored dumb terminal + Boolean color = this.color; + if (color == null) { + color = getBoolean(PROP_DUMB_COLOR, null); + } + if (dumb == null) { + // detect emacs using the env variable + if (color == null) { + String emacs = System.getenv("INSIDE_EMACS"); + if (emacs != null && emacs.contains("comint")) { + color = true; + } + } + // detect Intellij Idea + if (color == null) { + // using the env variable on windows + String ideHome = System.getenv("IDE_HOME"); + if (ideHome != null) { + color = true; + } else { + // using the parent process command on unix/mac + String command = getParentProcessCommand(); + if (command != null && command.endsWith("/idea")) { + color = true; + } + } + } + if (color == null) { + color = systemStream != null && System.getenv("TERM") != null; + } + } else { + if (color == null) { + color = false; + } + } + return color ? Terminal.TYPE_DUMB_COLOR : Terminal.TYPE_DUMB; + } + + public SystemOutput computeSystemOutput() { + SystemOutput systemOutput = null; + if (out != null) { + if (out.equals(System.out)) { + systemOutput = SystemOutput.SysOut; + } else if (out.equals(System.err)) { + systemOutput = SystemOutput.SysErr; + } + } + if (systemOutput == null) { + systemOutput = this.systemOutput; + } + if (systemOutput == null) { + String str = System.getProperty(PROP_OUTPUT); + if (str != null) { + switch (str.trim().toLowerCase(Locale.ROOT)) { + case PROP_OUTPUT_OUT: + systemOutput = SystemOutput.SysOut; + break; + case PROP_OUTPUT_ERR: + systemOutput = SystemOutput.SysErr; + break; + case PROP_OUTPUT_OUT_ERR: + systemOutput = SystemOutput.SysOutOrSysErr; + break; + case PROP_OUTPUT_ERR_OUT: + systemOutput = SystemOutput.SysErrOrSysOut; + break; + default: + Log.debug("Unsupported value for " + PROP_OUTPUT + ": " + str + ". Supported values are: " + + String.join( + ", ", + PROP_OUTPUT_OUT, + PROP_OUTPUT_ERR, + PROP_OUTPUT_OUT_ERR, + PROP_OUTPUT_ERR_OUT) + + "."); + } + } + } + if (systemOutput == null) { + systemOutput = SystemOutput.SysOutOrSysErr; + } + return systemOutput; + } + + public String computeType() { + String type = this.type; + if (type == null) { + type = System.getProperty(PROP_TYPE); + } + if (type == null) { + type = System.getenv("TERM"); + } + return type; + } + + public Charset computeEncoding() { + Charset encoding = this.encoding; + if (encoding == null) { + String charsetName = System.getProperty(PROP_ENCODING); + if (charsetName != null && Charset.isSupported(charsetName)) { + encoding = Charset.forName(charsetName); + } + } + if (encoding == null) { + int codepage = this.codepage; + if (codepage <= 0) { + String str = System.getProperty(PROP_CODEPAGE); + if (str != null) { + codepage = Integer.parseInt(str); + } + } + if (codepage >= 0) { + encoding = getCodepageCharset(codepage); + } else { + encoding = StandardCharsets.UTF_8; + } + } + return encoding; + } + + public List getProviders(IllegalStateException exception) { + List providers = new ArrayList<>(); + // Check ffm provider + checkProvider(exception, providers, ffm, PROP_FFM, PROP_PROVIDER_FFM); + // Check jansi provider + checkProvider(exception, providers, jansi, PROP_JANSI, PROP_PROVIDER_JANSI); + // Check jna provider + checkProvider(exception, providers, jna, PROP_JNA, PROP_PROVIDER_JNA); + // Check exec provider + checkProvider(exception, providers, exec, PROP_EXEC, PROP_PROVIDER_EXEC); + // Order providers + List order = Arrays.asList( + (this.providers != null ? this.providers : System.getProperty(PROP_PROVIDERS, PROP_PROVIDERS_DEFAULT)) + .split(",")); + providers.sort(Comparator.comparing(l -> { + int idx = order.indexOf(l.name()); + return idx >= 0 ? idx : Integer.MAX_VALUE; + })); + String names = providers.stream().map(TerminalProvider::name).collect(Collectors.joining(", ")); + Log.debug("Available providers: " + names); + return providers; + } + + private void checkProvider( + IllegalStateException exception, + List providers, + Boolean load, + String property, + String name) { + Boolean doLoad = load; + if (doLoad == null) { + doLoad = getBoolean(property, true); + } + if (doLoad) { + try { + TerminalProvider provider = TerminalProvider.load(name); + provider.isSystemStream(SystemStream.Output); + providers.add(provider); + } catch (Throwable t) { + Log.debug("Unable to load " + name + " provider: ", t); + exception.addSuppressed(t); + } + } + } + private SystemStream select(Map system, SystemOutput systemOutput) { switch (systemOutput) { case SysOut: diff --git a/terminal/src/main/java/org/jline/terminal/impl/DumbTerminal.java b/terminal/src/main/java/org/jline/terminal/impl/DumbTerminal.java index 354e167ad..34984a25f 100644 --- a/terminal/src/main/java/org/jline/terminal/impl/DumbTerminal.java +++ b/terminal/src/main/java/org/jline/terminal/impl/DumbTerminal.java @@ -26,13 +26,14 @@ public class DumbTerminal extends AbstractTerminal { + private final TerminalProvider provider; + private final SystemStream systemStream; private final NonBlockingInputStream input; private final OutputStream output; private final NonBlockingReader reader; private final PrintWriter writer; private final Attributes attributes; private final Size size; - private final SystemStream systemStream; public DumbTerminal(InputStream in, OutputStream out) throws IOException { this(TYPE_DUMB, TYPE_DUMB, in, out, null); @@ -40,20 +41,23 @@ public DumbTerminal(InputStream in, OutputStream out) throws IOException { public DumbTerminal(String name, String type, InputStream in, OutputStream out, Charset encoding) throws IOException { - this(name, type, in, out, encoding, SignalHandler.SIG_DFL, null); + this(null, null, name, type, in, out, encoding, SignalHandler.SIG_DFL); } @SuppressWarnings("this-escape") public DumbTerminal( + TerminalProvider provider, + SystemStream systemStream, String name, String type, InputStream in, OutputStream out, Charset encoding, - SignalHandler signalHandler, - SystemStream systemStream) + SignalHandler signalHandler) throws IOException { super(name, type, encoding, signalHandler); + this.provider = provider; + this.systemStream = systemStream; NonBlockingInputStream nbis = NonBlocking.nonBlocking(getName(), in); this.input = new NonBlockingInputStream() { @Override @@ -98,7 +102,6 @@ public int read(long timeout, boolean isPeek) throws IOException { this.attributes.setControlChar(ControlChar.VKILL, (char) 21); this.attributes.setControlChar(ControlChar.VLNEXT, (char) 22); this.size = new Size(); - this.systemStream = systemStream; parseInfoCmp(); } @@ -140,7 +143,7 @@ public void setSize(Size sz) { @Override public TerminalProvider getProvider() { - return null; + return provider; } @Override diff --git a/terminal/src/main/java/org/jline/terminal/impl/DumbTerminalProvider.java b/terminal/src/main/java/org/jline/terminal/impl/DumbTerminalProvider.java new file mode 100644 index 000000000..c5facb312 --- /dev/null +++ b/terminal/src/main/java/org/jline/terminal/impl/DumbTerminalProvider.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2023, the original author(s). + * + * This software is distributable under the BSD license. See the terms of the + * BSD license in the documentation provided with this software. + * + * https://opensource.org/licenses/BSD-3-Clause + */ +package org.jline.terminal.impl; + +import java.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.Charset; + +import org.jline.terminal.Attributes; +import org.jline.terminal.Size; +import org.jline.terminal.Terminal; +import org.jline.terminal.TerminalBuilder; +import org.jline.terminal.spi.SystemStream; +import org.jline.terminal.spi.TerminalProvider; + +public class DumbTerminalProvider implements TerminalProvider { + + @Override + public String name() { + return TerminalBuilder.PROP_PROVIDER_DUMB; + } + + @Override + public Terminal sysTerminal( + String name, + String type, + boolean ansiPassThrough, + Charset encoding, + boolean nativeSignals, + Terminal.SignalHandler signalHandler, + boolean paused, + SystemStream systemStream) + throws IOException { + return new DumbTerminal( + this, + systemStream, + name, + type, + new FileInputStream(FileDescriptor.in), + new FileOutputStream(systemStream == SystemStream.Error ? FileDescriptor.err : FileDescriptor.out), + encoding, + signalHandler); + } + + @Override + public Terminal newTerminal( + String name, + String type, + InputStream masterInput, + OutputStream masterOutput, + Charset encoding, + Terminal.SignalHandler signalHandler, + boolean paused, + Attributes attributes, + Size size) + throws IOException { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isSystemStream(SystemStream stream) { + return false; + } + + @Override + public String systemStreamName(SystemStream stream) { + return null; + } + + @Override + public int systemStreamWidth(SystemStream stream) { + return 0; + } +} diff --git a/terminal/src/main/java/org/jline/terminal/impl/exec/ExecTerminalProvider.java b/terminal/src/main/java/org/jline/terminal/impl/exec/ExecTerminalProvider.java index 35c1e3e3a..580a761b3 100644 --- a/terminal/src/main/java/org/jline/terminal/impl/exec/ExecTerminalProvider.java +++ b/terminal/src/main/java/org/jline/terminal/impl/exec/ExecTerminalProvider.java @@ -21,6 +21,7 @@ import org.jline.terminal.Attributes; import org.jline.terminal.Size; import org.jline.terminal.Terminal; +import org.jline.terminal.TerminalBuilder; import org.jline.terminal.impl.ExternalTerminal; import org.jline.terminal.impl.PosixSysTerminal; import org.jline.terminal.spi.Pty; @@ -40,7 +41,7 @@ public class ExecTerminalProvider implements TerminalProvider { private static boolean warned; public String name() { - return "exec"; + return TerminalBuilder.PROP_PROVIDER_EXEC; } public Pty current(SystemStream systemStream) throws IOException {