Class PosixSysTerminal

  • All Implemented Interfaces:
    java.io.Closeable, java.io.Flushable, java.lang.AutoCloseable, TerminalExt, Terminal

    public class PosixSysTerminal
    extends AbstractPosixTerminal
    Terminal implementation for POSIX systems using system streams.

    The PosixSysTerminal class provides a terminal implementation for POSIX systems (Linux, macOS, etc.) that uses the system standard input and output streams. It extends the AbstractPosixTerminal class and adds functionality specific to system stream-based terminals.

    This implementation is used when connecting to the actual system terminal, such as when running a console application in a terminal window. It provides access to the standard input and output streams, allowing for interaction with the user through the terminal.

    Key features of this implementation include:

    • Direct access to system standard input and output
    • Support for terminal attributes and size changes
    • Support for non-blocking I/O
    • Automatic restoration of terminal state on shutdown
    See Also:
    AbstractPosixTerminal, Pty
    • Constructor Detail

      • PosixSysTerminal

        public PosixSysTerminal​(java.lang.String name,
                                java.lang.String type,
                                Pty pty,
                                java.nio.charset.Charset encoding,
                                boolean nativeSignals,
                                Terminal.SignalHandler signalHandler)
                         throws java.io.IOException
        Throws:
        java.io.IOException
      • PosixSysTerminal

        public PosixSysTerminal​(java.lang.String name,
                                java.lang.String type,
                                Pty pty,
                                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)
                         throws java.io.IOException
        Throws:
        java.io.IOException
    • Method Detail

      • handle

        public Terminal.SignalHandler handle​(Terminal.Signal signal,
                                             Terminal.SignalHandler handler)
        Description copied from interface: Terminal
        Registers a handler for the given Terminal.Signal.

        This method allows the application to specify custom behavior when a particular signal is raised. The handler's Terminal.SignalHandler.handle(Signal) method will be called whenever the specified signal is raised.

        Note that the JVM does not easily allow catching the Terminal.Signal.QUIT signal (Ctrl+\), which typically causes a thread dump to be displayed. This signal handling is mainly effective when connecting through an SSH socket to a virtual terminal.

        Example usage:

         Terminal terminal = TerminalBuilder.terminal();
        
         // Handle window resize events
         terminal.handle(Signal.WINCH, signal -> {
             Size size = terminal.getSize();
             terminal.writer().println("\nTerminal resized to " +
                                      size.getColumns() + "x" + size.getRows());
             terminal.flush();
         });
        
         // Ignore interrupt signal
         terminal.handle(Signal.INT, SignalHandler.SIG_IGN);
         
        Specified by:
        handle in interface Terminal
        Overrides:
        handle in class AbstractTerminal
        Parameters:
        signal - the signal to register a handler for
        handler - the handler to be called when the signal is raised
        Returns:
        the previous signal handler that was registered for this signal
        See Also:
        Terminal.Signal, Terminal.SignalHandler, Terminal.raise(Signal)
      • reader

        public NonBlockingReader reader()
        Description copied from interface: Terminal
        Retrieve the Reader for this terminal. This is the standard way to read input from this terminal. The reader is non blocking.
        Returns:
        The non blocking reader
      • writer

        public java.io.PrintWriter writer()
        Description copied from interface: Terminal
        Retrieve the Writer for this terminal. This is the standard way to write to this terminal.
        Returns:
        The writer
      • input

        public java.io.InputStream input()
        Description copied from interface: Terminal
        Retrieve the input stream for this terminal. In some rare cases, there may be a need to access the terminal input stream directly. In the usual cases, use the Terminal.reader() instead.
        Returns:
        The input stream
        See Also:
        Terminal.reader()
      • output

        public java.io.OutputStream output()
        Description copied from interface: Terminal
        Retrieve the output stream for this terminal. In some rare cases, there may be a need to access the terminal output stream directly. In the usual cases, use the Terminal.writer() instead.
        Returns:
        The output stream
        See Also:
        Terminal.writer()
      • doClose

        protected void doClose()
                        throws java.io.IOException
        Overrides:
        doClose in class AbstractPosixTerminal
        Throws:
        java.io.IOException