Class ExecTerminalProvider
- All Implemented Interfaces:
TerminalProvider
The ExecTerminalProvider class provides a TerminalProvider implementation that uses external commands (such as stty, tput, etc.) to interact with the terminal. This approach allows JLine to work in environments where native libraries are not available or cannot be used, by relying on standard command-line utilities that are typically available on Unix-like systems.
This provider is typically used as a fallback when more direct methods of terminal interaction (such as JNI or JNA) are not available. While it provides good compatibility, it may have higher overhead due to the need to spawn external processes for many operations.
The provider name is "exec", which can be specified in the org.jline.terminal.provider
system property to force the use of this provider.
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptioncurrent(SystemStream systemStream) Creates a Pty for the current terminal.booleanisPosixSystemStream(SystemStream stream) booleanisSystemStream(SystemStream stream) Creates a new terminal with custom input and output streams.booleanisWindowsSystemStream(SystemStream stream) name()Returns the name of this terminal provider.protected static ProcessBuilder.RedirectnewTerminal(String name, String type, InputStream in, OutputStream out, Charset encoding, Charset inputEncoding, Charset outputEncoding, Terminal.SignalHandler signalHandler, boolean paused, Attributes attributes, Size size) Creates a new terminal with custom input and output streams.posixSysTerminal(String name, String type, boolean ansiPassThrough, Charset encoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream) Creates a terminal connected to a system stream on POSIX systems.posixSysTerminal(String name, String type, boolean ansiPassThrough, Charset encoding, Charset stdinEncoding, Charset stdoutEncoding, Charset stderrEncoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream) Create a POSIX system terminal backed by the specified system stream.systemStreamName(SystemStream stream) Returns the name of the specified system stream on this platform.intsystemStreamWidth(SystemStream stream) Returns the width (number of columns) of the specified system stream.sysTerminal(String name, String type, boolean ansiPassThrough, Charset encoding, Charset inputEncoding, Charset outputEncoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused) Creates a terminal connected to a system stream.sysTerminal(String name, String type, boolean ansiPassThrough, Charset encoding, Charset inputEncoding, Charset outputEncoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream) Creates a terminal connected to a system stream.toString()winSysTerminal(String name, String type, boolean ansiPassThrough, Charset encoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream) Creates a terminal connected to a system stream.winSysTerminal(String name, String type, boolean ansiPassThrough, Charset encoding, Charset stdinEncoding, Charset stdoutEncoding, Charset stderrEncoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream) Create a POSIX-style system terminal for Windows environments that provide a POSIX layer (Cygwin/MSYS); returns null on other Windows variants.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.jline.terminal.spi.TerminalProvider
getConsoleCodepage, registerDefaultSignal, registerSignal, unregisterSignal
-
Constructor Details
-
ExecTerminalProvider
public ExecTerminalProvider()Default constructor.
-
-
Method Details
-
name
Returns the name of this terminal provider.This method returns the name of this terminal provider, which is "exec". This name can be specified in the
org.jline.terminal.providersystem property to force the use of this provider.- Specified by:
namein interfaceTerminalProvider- Returns:
- the name of this terminal provider ("exec")
-
current
Creates a Pty for the current terminal.This method creates an ExecPty instance for the current terminal by executing the 'tty' command to determine the terminal device name. It is used to obtain a Pty object that can interact with the current terminal using external commands.
- Parameters:
systemStream- the system stream to associate with the Pty- Returns:
- a new ExecPty instance for the current terminal
- Throws:
IOException- if the current terminal is not a TTY or if an error occurs while executing the 'tty' command
-
sysTerminal
public Terminal sysTerminal(String name, String type, boolean ansiPassThrough, Charset encoding, Charset inputEncoding, Charset outputEncoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused) throws IOException Creates a terminal connected to a system stream.This method creates a terminal that is connected to one of the standard system streams (standard input, standard output, or standard error). It uses the ExecPty implementation to interact with the terminal using external commands.
- Specified by:
sysTerminalin interfaceTerminalProvider- Parameters:
name- the name of the terminaltype- the terminal type (e.g., "xterm", "dumb")ansiPassThrough- whether to pass through ANSI escape sequencesencoding- the character encoding to useinputEncoding- the character encoding to use for inputoutputEncoding- the character encoding to use for outputnativeSignals- whether to use native signal handlingsignalHandler- the signal handler to usepaused- whether the terminal should start in a paused statesystemStream- the system stream to connect to- Returns:
- a new terminal connected to the specified system stream
- Throws:
IOException- if an I/O error occurs
-
sysTerminal
public Terminal sysTerminal(String name, String type, boolean ansiPassThrough, Charset encoding, Charset inputEncoding, Charset outputEncoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream) throws IOException Description copied from interface:TerminalProviderCreates a terminal connected to a system stream.This method creates a terminal that is connected to one of the standard system streams (standard input, standard output, or standard error). Such terminals typically represent the actual terminal window or console that the application is running in.
- Specified by:
sysTerminalin interfaceTerminalProvider- Parameters:
name- the name of the terminaltype- the terminal type (e.g., "xterm", "dumb")ansiPassThrough- whether to pass through ANSI escape sequences (only used on Windows)encoding- the general character encoding to useinputEncoding- the character encoding to use for inputoutputEncoding- the character encoding to use for outputnativeSignals- whether to use native signal handlingsignalHandler- the signal handler to usepaused- whether the terminal should start in a paused state (only used on Windows)systemStream- the system stream to connect to- Returns:
- a new terminal connected to the specified system stream
- Throws:
IOException- if an I/O error occurs
-
winSysTerminal
public Terminal winSysTerminal(String name, String type, boolean ansiPassThrough, Charset encoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream) throws IOException Creates a terminal connected to a system stream.This method creates a terminal that is connected to one of the standard system streams (standard input, standard output, or standard error). It uses the ExecPty implementation to interact with the terminal using external commands.
- Parameters:
name- the name of the terminaltype- the terminal type (e.g., "xterm", "dumb")ansiPassThrough- whether to pass through ANSI escape sequencesencoding- the character encoding to usenativeSignals- whether to use native signal handlingsignalHandler- the signal handler to usepaused- whether the terminal should start in a paused statesystemStream- the system stream to connect toname- the name of the terminaltype- the terminal type (e.g., "xterm", "dumb")ansiPassThrough- whether to pass through ANSI escape sequencesencoding- the character encoding to usenativeSignals- whether to use native signal handlingsignalHandler- the signal handler to usepaused- whether the terminal should start in a paused statesystemStream- the system stream to connect to- Returns:
- a new terminal connected to the specified system stream
- Throws:
IOException- if an I/O error occurs /** Creates a terminal connected to a system stream on Windows.This method creates a terminal that is connected to one of the standard system streams on Windows. It uses the ExecPty implementation to interact with the terminal using external commands.
Note that on Windows, the exec provider has limited functionality and may not work as well as the native providers (JNI, JNA, etc.).
IOException- if an I/O error occurs
-
winSysTerminal
public Terminal winSysTerminal(String name, String type, boolean ansiPassThrough, Charset encoding, Charset stdinEncoding, Charset stdoutEncoding, Charset stderrEncoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream) throws IOException Create a POSIX-style system terminal for Windows environments that provide a POSIX layer (Cygwin/MSYS); returns null on other Windows variants.- Parameters:
name- the terminal nametype- the terminal type (TERM)ansiPassThrough- whether ANSI sequences should be passed through (unused for POSIX path)encoding- the general charset for the terminalstdinEncoding- charset to use for stdinstdoutEncoding- charset to use for stdoutstderrEncoding- charset to use for stderrnativeSignals- whether native signal handling is enabledsignalHandler- handler for terminal signalspaused- whether the terminal should be created in a paused statesystemStream- the system stream to associate with the terminal; determines which output encoding (stdout vs stderr) is selected- Returns:
- a configured
PosixSysTerminalwhen running under Cygwin or MSYS,nullotherwise - Throws:
IOException
-
posixSysTerminal
public Terminal posixSysTerminal(String name, String type, boolean ansiPassThrough, Charset encoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream) throws IOException Creates a terminal connected to a system stream on POSIX systems.This method creates a terminal that is connected to one of the standard system streams on POSIX systems (Linux, macOS, etc.). It uses the ExecPty implementation to interact with the terminal using external commands.
- Parameters:
name- the name of the terminaltype- the terminal type (e.g., "xterm", "dumb")ansiPassThrough- whether to pass through ANSI escape sequencesencoding- the character encoding to usenativeSignals- whether to use native signal handlingsignalHandler- the signal handler to usepaused- whether the terminal should start in a paused statesystemStream- the system stream to connect to- Returns:
- a new terminal connected to the specified system stream
- Throws:
IOException- if an I/O error occurs
-
posixSysTerminal
public Terminal posixSysTerminal(String name, String type, boolean ansiPassThrough, Charset encoding, Charset stdinEncoding, Charset stdoutEncoding, Charset stderrEncoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream) throws IOException Create a POSIX system terminal backed by the specified system stream.- Parameters:
name- the terminal nametype- the terminal typeansiPassThrough- whether ANSI sequences should be passed through (platform-dependent)encoding- the terminal's primary character encodingstdinEncoding- the encoding to use for standard inputstdoutEncoding- the encoding to use for standard output (used whensystemStreamis not Error)stderrEncoding- the encoding to use for standard error (used whensystemStreamis Error)nativeSignals- whether native signal handling is enabledsignalHandler- handler for terminal signalspaused- whether the terminal should be created in a paused statesystemStream- the system stream to back the terminal; selects the output encoding (usesstderrEncodingwhenSystemStream.Error, otherwisestdoutEncoding)- Returns:
- a POSIX-based Terminal instance connected to the chosen system stream
- Throws:
IOException- if obtaining the underlying PTY or creating the terminal fails
-
newTerminal
public Terminal newTerminal(String name, String type, InputStream in, OutputStream out, Charset encoding, Charset inputEncoding, Charset outputEncoding, Terminal.SignalHandler signalHandler, boolean paused, Attributes attributes, Size size) throws IOException Creates a new terminal with custom input and output streams.This method creates a terminal that is connected to the specified input and output streams. It creates an ExternalTerminal that emulates the line discipline functionality typically provided by the operating system's terminal driver.
- Specified by:
newTerminalin interfaceTerminalProvider- Parameters:
name- the name of the terminaltype- the terminal type (e.g., "xterm", "dumb")in- the input stream to read fromout- the output stream to write toencoding- the character encoding to useinputEncoding- the character encoding to use for inputoutputEncoding- the character encoding to use for outputsignalHandler- the signal handler to usepaused- whether the terminal should start in a paused stateattributes- the initial terminal attributessize- the initial terminal size- Returns:
- a new terminal connected to the specified streams
- Throws:
IOException- if an I/O error occurs
-
isSystemStream
Creates a new terminal with custom input and output streams.This method creates a terminal that is connected to the specified input and output streams. It creates an ExternalTerminal that emulates the line discipline functionality typically provided by the operating system's terminal driver.
- Specified by:
isSystemStreamin interfaceTerminalProvider- Parameters:
stream- the system stream to checkname- the name of the terminaltype- the terminal type (e.g., "xterm", "dumb")in- the input stream to read fromout- the output stream to write toencoding- the character encoding to usesignalHandler- the signal handler to usepaused- whether the terminal should start in a paused stateattributes- the initial terminal attributessize- the initial terminal size- Returns:
- a new terminal connected to the specified streams
- Throws:
IOException- if an I/O error occurs /** Checks if the specified system stream is available on this platform.This method determines whether the specified system stream (standard input, standard output, or standard error) is available for use on the current platform. It checks both POSIX and Windows system streams.
-
isWindowsSystemStream
-
isPosixSystemStream
-
systemStreamName
Returns the name of the specified system stream on this platform.This method returns a platform-specific name or identifier for the specified system stream. The name may be used for display purposes or for accessing the stream through platform-specific APIs.
- Specified by:
systemStreamNamein interfaceTerminalProvider- Parameters:
stream- the system stream- Returns:
- the name of the system stream on this platform
-
systemStreamWidth
Returns the width (number of columns) of the specified system stream.This method determines the width of the terminal associated with the specified system stream. The width is measured in character cells and represents the number of columns available for display.
This implementation uses the 'tput cols' command to determine the terminal width. If the command fails or returns an invalid value, a default width of 80 columns is returned.
- Specified by:
systemStreamWidthin interfaceTerminalProvider- Parameters:
stream- the system stream- Returns:
- the width of the system stream in character columns
-
newDescriptor
-
toString
-