Interface TerminalProvider
-
- All Known Implementing Classes:
DumbTerminalProvider,ExecTerminalProvider,JniTerminalProvider
public interface TerminalProviderService provider interface for terminal implementations.The TerminalProvider interface defines the contract for classes that can create and manage terminal instances on specific platforms. Each provider implements platform-specific terminal functionality, allowing JLine to work across different operating systems and environments.
JLine includes several built-in terminal providers:
- FFM - Foreign Function Memory (Java 22+) based implementation
- JNI - Java Native Interface based implementation
- Jansi - Implementation based on the Jansi library
- JNA - Java Native Access based implementation
- Exec - Implementation using external commands
- Dumb - Fallback implementation with limited capabilities
Terminal providers are loaded dynamically using the
load(String)method, which looks up provider implementations in the classpath based on their name.- See Also:
Terminal,TerminalBuilder
-
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Default Methods Deprecated Methods Modifier and Type Method Description default intgetConsoleCodepage()Returns the Windows console output codepage.booleanisSystemStream(SystemStream stream)Checks if the specified system stream is available on this platform.static TerminalProviderload(java.lang.String name)Loads a terminal provider with the specified name.java.lang.Stringname()Returns the name of this terminal provider.TerminalnewTerminal(java.lang.String name, java.lang.String type, java.io.InputStream masterInput, java.io.OutputStream masterOutput, java.nio.charset.Charset encoding, java.nio.charset.Charset stdinEncoding, java.nio.charset.Charset stdoutEncoding, java.nio.charset.Charset stderrEncoding, Terminal.SignalHandler signalHandler, boolean paused, Attributes attributes, Size size)default TerminalnewTerminal(java.lang.String name, java.lang.String type, java.io.InputStream masterInput, java.io.OutputStream masterOutput, java.nio.charset.Charset encoding, java.nio.charset.Charset inputEncoding, java.nio.charset.Charset outputEncoding, Terminal.SignalHandler signalHandler, boolean paused, Attributes attributes, Size size)Creates a new terminal with custom input and output streams.default TerminalnewTerminal(java.lang.String name, java.lang.String type, java.io.InputStream masterInput, java.io.OutputStream masterOutput, java.nio.charset.Charset encoding, Terminal.SignalHandler signalHandler, boolean paused, Attributes attributes, Size size)java.lang.StringsystemStreamName(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.default TerminalsysTerminal(java.lang.String name, java.lang.String type, boolean ansiPassThrough, java.nio.charset.Charset encoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream)default TerminalsysTerminal(java.lang.String name, java.lang.String type, boolean ansiPassThrough, java.nio.charset.Charset encoding, java.nio.charset.Charset inputEncoding, java.nio.charset.Charset outputEncoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream)Creates a terminal connected to a system stream.TerminalsysTerminal(java.lang.String name, java.lang.String type, boolean ansiPassThrough, java.nio.charset.Charset encoding, java.nio.charset.Charset stdinEncoding, java.nio.charset.Charset stdoutEncoding, java.nio.charset.Charset stderrEncoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream)
-
-
-
Method Detail
-
name
java.lang.String name()
Returns the name of this terminal provider.The provider name is a unique identifier that can be used to request this specific provider when creating terminals. Common provider names include "ffm", "jni", "jansi", "jna", "exec", and "dumb".
- Returns:
- the name of this terminal provider
-
sysTerminal
@Deprecated default Terminal sysTerminal(java.lang.String name, java.lang.String type, boolean ansiPassThrough, java.nio.charset.Charset encoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream) throws java.io.IOException
Deprecated.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). Such terminals typically represent the actual terminal window or console that the application is running in.
- 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:
java.io.IOException- if an I/O error occurs
-
sysTerminal
default Terminal sysTerminal(java.lang.String name, java.lang.String type, boolean ansiPassThrough, java.nio.charset.Charset encoding, java.nio.charset.Charset inputEncoding, java.nio.charset.Charset outputEncoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream) throws java.io.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). Such terminals typically represent the actual terminal window or console that the application is running in.
- Parameters:
name- the name of the terminaltype- the terminal type (e.g., "xterm", "dumb")ansiPassThrough- whether to pass through ANSI escape sequencesencoding- 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 statesystemStream- the system stream to connect to- Returns:
- a new terminal connected to the specified system stream
- Throws:
java.io.IOException- if an I/O error occurs
-
sysTerminal
@Deprecated Terminal sysTerminal(java.lang.String name, java.lang.String type, boolean ansiPassThrough, java.nio.charset.Charset encoding, java.nio.charset.Charset stdinEncoding, java.nio.charset.Charset stdoutEncoding, java.nio.charset.Charset stderrEncoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, boolean paused, SystemStream systemStream) throws java.io.IOException
Deprecated.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). Such terminals typically represent the actual terminal window or console that the application is running in.
- Parameters:
name- the name of the terminaltype- the terminal type (e.g., "xterm", "dumb")ansiPassThrough- whether to pass through ANSI escape sequencesencoding- the general character encoding to usestdinEncoding- the character encoding to use for standard inputstdoutEncoding- the character encoding to use for standard outputstderrEncoding- the character encoding to use for standard errornativeSignals- 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:
java.io.IOException- if an I/O error occurs
-
newTerminal
@Deprecated default Terminal newTerminal(java.lang.String name, java.lang.String type, java.io.InputStream masterInput, java.io.OutputStream masterOutput, java.nio.charset.Charset encoding, Terminal.SignalHandler signalHandler, boolean paused, Attributes attributes, Size size) throws java.io.IOException
Deprecated.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. Such terminals can be used for various purposes, such as connecting to remote terminals over network connections or creating virtual terminals for testing.
- Parameters:
name- the name of the terminaltype- the terminal type (e.g., "xterm", "dumb")masterInput- the input stream to read frommasterOutput- 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:
java.io.IOException- if an I/O error occurs
-
newTerminal
default Terminal newTerminal(java.lang.String name, java.lang.String type, java.io.InputStream masterInput, java.io.OutputStream masterOutput, java.nio.charset.Charset encoding, java.nio.charset.Charset inputEncoding, java.nio.charset.Charset outputEncoding, Terminal.SignalHandler signalHandler, boolean paused, Attributes attributes, Size size) throws java.io.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. Such terminals can be used for various purposes, such as connecting to remote terminals over network connections or creating virtual terminals for testing.
- Parameters:
name- the name of the terminaltype- the terminal type (e.g., "xterm", "dumb")masterInput- the input stream to read frommasterOutput- the output stream to write toencoding- the general 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:
java.io.IOException- if an I/O error occurs
-
newTerminal
@Deprecated Terminal newTerminal(java.lang.String name, java.lang.String type, java.io.InputStream masterInput, java.io.OutputStream masterOutput, java.nio.charset.Charset encoding, java.nio.charset.Charset stdinEncoding, java.nio.charset.Charset stdoutEncoding, java.nio.charset.Charset stderrEncoding, Terminal.SignalHandler signalHandler, boolean paused, Attributes attributes, Size size) throws java.io.IOException
Deprecated.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. Such terminals can be used for various purposes, such as connecting to remote terminals over network connections or creating virtual terminals for testing.
- Parameters:
name- the name of the terminaltype- the terminal type (e.g., "xterm", "dumb")masterInput- the input stream to read frommasterOutput- the output stream to write toencoding- the general character encoding to usestdinEncoding- the character encoding to use for standard inputstdoutEncoding- the character encoding to use for standard outputstderrEncoding- the character encoding to use for standard errorsignalHandler- 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:
java.io.IOException- if an I/O error occurs
-
isSystemStream
boolean isSystemStream(SystemStream stream)
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. Some platforms or environments may restrict access to certain system streams.
- Parameters:
stream- the system stream to check- Returns:
trueif the system stream is available,falseotherwise
-
systemStreamName
java.lang.String systemStreamName(SystemStream stream)
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.
- Parameters:
stream- the system stream- Returns:
- the name of the system stream on this platform
-
systemStreamWidth
int systemStreamWidth(SystemStream stream)
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.
- Parameters:
stream- the system stream- Returns:
- the width of the system stream in character columns
-
getConsoleCodepage
default int getConsoleCodepage()
Returns the Windows console output codepage.On Windows, this method returns the console output codepage (equivalent to
GetConsoleOutputCP()). On non-Windows platforms, or if the codepage cannot be determined, this method returns-1.- Returns:
- the console output codepage, or
-1if not available
-
load
static TerminalProvider load(java.lang.String name) throws java.io.IOException
Loads a terminal provider with the specified name.Provider Discovery Mechanism
This method loads a terminal provider implementation based on its name by reading a provider-specific resource file at
META-INF/jline/providers/[name]which contains the fully qualified class name of the provider implementation.This on-demand loading approach is used instead of
ServiceLoaderbecause it allows loading a specific provider by name without instantiating all available providers. This is critical for providers that may fail to initialize due to missing native libraries (JNI, FFM) or other platform-specific dependencies.Dual-Purpose Service Files
JLine maintains two types of service registration files:
META-INF/services/org.jline.terminal.spi.TerminalProvider- Standard Java SPI files required by jlink and JPMS module tools to discover service implementations and establish proper module dependencies. These files are not used at runtime by JLine.META-INF/jline/providers/[name]- Provider-specific files used by this method for efficient runtime loading. Each file contains the class name of a single provider and allows loading by provider name without scanning all available providers.
File Format
The provider file format follows standard Java SPI conventions:
- One fully qualified class name per line
- Comments start with
#and extend to end of line - Blank lines and whitespace are ignored
Example:
META-INF/jline/providers/ffm# JLine FFM Terminal Provider org.jline.terminal.impl.ffm.FfmTerminalProvider
- Parameters:
name- the name of the provider to load (e.g., "ffm", "jni", "exec", "dumb")- Returns:
- the loaded terminal provider
- Throws:
java.io.IOException- if the provider cannot be loaded or is not found
-
-