Interface TerminalProvider

  • All Known Implementing Classes:
    DumbTerminalProvider, ExecTerminalProvider, JniTerminalProvider

    public interface TerminalProvider
    Service 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 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
        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 terminal
        type - the terminal type (e.g., "xterm", "dumb")
        ansiPassThrough - whether to pass through ANSI escape sequences
        encoding - the character encoding to use
        nativeSignals - whether to use native signal handling
        signalHandler - the signal handler to use
        paused - whether the terminal should start in a paused state
        systemStream - 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

        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
        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 terminal
        type - the terminal type (e.g., "xterm", "dumb")
        ansiPassThrough - whether to pass through ANSI escape sequences
        encoding - the general character encoding to use
        stdinEncoding - the character encoding to use for standard input
        stdoutEncoding - the character encoding to use for standard output
        stderrEncoding - the character encoding to use for standard error
        nativeSignals - whether to use native signal handling
        signalHandler - the signal handler to use
        paused - whether the terminal should start in a paused state
        systemStream - 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
        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 terminal
        type - the terminal type (e.g., "xterm", "dumb")
        masterInput - the input stream to read from
        masterOutput - the output stream to write to
        encoding - the character encoding to use
        signalHandler - the signal handler to use
        paused - whether the terminal should start in a paused state
        attributes - the initial terminal attributes
        size - the initial terminal size
        Returns:
        a new terminal connected to the specified streams
        Throws:
        java.io.IOException - if an I/O error occurs
      • newTerminal

        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
        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 terminal
        type - the terminal type (e.g., "xterm", "dumb")
        masterInput - the input stream to read from
        masterOutput - the output stream to write to
        encoding - the general character encoding to use
        stdinEncoding - the character encoding to use for standard input
        stdoutEncoding - the character encoding to use for standard output
        stderrEncoding - the character encoding to use for standard error
        signalHandler - the signal handler to use
        paused - whether the terminal should start in a paused state
        attributes - the initial terminal attributes
        size - 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:
        true if the system stream is available, false otherwise
      • 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
      • load

        static TerminalProvider load​(java.lang.String name)
                              throws java.io.IOException
        Loads a terminal provider with the specified name.

        This method loads a terminal provider implementation based on its name. Provider implementations are discovered through the Java ServiceLoader mechanism, looking for resource files in the classpath at META-INF/services/org/jline/terminal/provider/[name].

        Each provider resource file should contain a class property that specifies the fully qualified name of the provider implementation class.

        Parameters:
        name - the name of the provider to load
        Returns:
        the loaded terminal provider
        Throws:
        java.io.IOException - if the provider cannot be loaded