Package org.jline.terminal.impl
Class AbstractWindowsTerminal<Console>
java.lang.Object
org.jline.terminal.impl.AbstractTerminal
org.jline.terminal.impl.AbstractWindowsTerminal<Console>
- All Implemented Interfaces:
Closeable,Flushable,AutoCloseable,TerminalExt,Terminal
The AbstractWindowsTerminal is used as the base class for windows terminal.
Due to windows limitations, mostly the missing support for ansi sequences,
the only way to create a correct terminal is to use the windows api to set
character attributes, move the cursor, erasing, etc...
UTF-8 support is also lacking in windows and the code page supposed to
emulate UTF-8 is a bit broken. In order to work around this broken
code page, windows api WriteConsoleW is used directly. This means that
the writer() becomes the primary output, while the output() is bridged
to the writer() using a WriterOutputStream wrapper.
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.jline.terminal.Terminal
Terminal.MouseTracking, Terminal.Signal, Terminal.SignalHandler -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final Attributesprotected final ShutdownHooks.Taskprotected static final intprotected static final intprotected static final intprotected static final intprotected static final intprotected static final intprotected static final intstatic final intprotected static final intprotected booleanprotected final Consoleprotected final NonBlockingInputStreamprotected final Objectprotected final Map<Terminal.Signal, Object> protected final intprotected final intprotected final Consoleprotected final OutputStreamprotected booleanprotected Threadprotected final NonBlockingReaderprotected booleanprotected final Writerprotected Terminal.MouseTrackingstatic final Stringstatic final Stringstatic final Stringstatic final Stringprotected final PrintWriterFields inherited from class org.jline.terminal.impl.AbstractTerminal
bools, encoding, handlers, ints, name, onClose, palette, status, strings, typeFields inherited from interface org.jline.terminal.Terminal
TYPE_DUMB, TYPE_DUMB_COLOR -
Constructor Summary
ConstructorsConstructorDescriptionAbstractWindowsTerminal(TerminalProvider provider, SystemStream systemStream, Writer writer, String name, String type, Charset encoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, Console inConsole, int inConsoleMode, Console outConsole, int outConsoleMode) -
Method Summary
Modifier and TypeMethodDescriptionbooleanWhether this terminal supportsTerminal.pause()andTerminal.resume()calls.protected intctrl(char key) protected voiddoClose()Returns the terminal attributes.protected abstract intgetConsoleMode(Console console) protected StringgetEscapeSequence(short keyCode, int keyState) Returns theTerminalProviderthat created this terminal ornullif the terminal was created with no provider.protected StringThe underlying system stream, may beSystemStream.Output,SystemStream.Error, ornullif this terminal is not bound to a system stream.handle(Terminal.Signal signal, Terminal.SignalHandler handler) Registers a handler for the givenTerminal.Signal.booleanReturnstrueif the terminal has support for focus tracking.input()Retrieve the input stream for this terminal.output()Retrieve the output stream for this terminal.voidpause()Stop reading the input stream.voidpause(boolean wait) Stop reading the input stream and optionally wait for the underlying threads to finish.booleanpaused()Check whether the terminal is currently reading the input stream or not.protected abstract booleanRead a single input event from the input buffer and process it.voidprocessInputChar(char c) protected voidprocessKeyEvent(boolean isKeyDown, short virtualKeyCode, char ch, int controlKeyState) protected voidpump()reader()Retrieve theReaderfor this terminal.voidresume()Resume reading the input stream.voidsetAttributes(Attributes attr) Set the terminal attributes.protected abstract voidsetConsoleMode(Console console, int mode) voidbooleantrackFocus(boolean tracking) Enable or disable focus tracking mode.booleantrackMouse(Terminal.MouseTracking tracking) Change the mouse tracking mouse.protected voidwriter()Retrieve theWriterfor this terminal.Methods inherited from class org.jline.terminal.impl.AbstractTerminal
checkInterrupted, close, echo, echo, echoSignal, encoding, enterRawMode, flush, getBooleanCapability, getCursorPosition, getKind, getName, getNumericCapability, getPalette, getStatus, getStatus, getStringCapability, getType, hasMouseSupport, parseInfoCmp, puts, raise, readMouseEvent, readMouseEvent, setOnClose, toStringMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.jline.terminal.Terminal
getBufferSize, getHeight, getSize, getWidth
-
Field Details
-
TYPE_WINDOWS
- See Also:
-
TYPE_WINDOWS_256_COLOR
- See Also:
-
TYPE_WINDOWS_CONEMU
- See Also:
-
TYPE_WINDOWS_VTP
- See Also:
-
ENABLE_VIRTUAL_TERMINAL_PROCESSING
public static final int ENABLE_VIRTUAL_TERMINAL_PROCESSING- See Also:
-
ENABLE_PROCESSED_INPUT
protected static final int ENABLE_PROCESSED_INPUT- See Also:
-
ENABLE_LINE_INPUT
protected static final int ENABLE_LINE_INPUT- See Also:
-
ENABLE_ECHO_INPUT
protected static final int ENABLE_ECHO_INPUT- See Also:
-
ENABLE_WINDOW_INPUT
protected static final int ENABLE_WINDOW_INPUT- See Also:
-
ENABLE_MOUSE_INPUT
protected static final int ENABLE_MOUSE_INPUT- See Also:
-
ENABLE_INSERT_MODE
protected static final int ENABLE_INSERT_MODE- See Also:
-
ENABLE_QUICK_EDIT_MODE
protected static final int ENABLE_QUICK_EDIT_MODE- See Also:
-
ENABLE_EXTENDED_FLAGS
protected static final int ENABLE_EXTENDED_FLAGS- See Also:
-
slaveInputPipe
-
input
-
output
-
reader
-
writer
-
nativeHandlers
-
closer
-
attributes
-
inConsole
-
outConsole
-
originalInConsoleMode
protected final int originalInConsoleMode -
originalOutConsoleMode
protected final int originalOutConsoleMode -
lock
-
paused
protected boolean paused -
pump
-
tracking
-
focusTracking
protected boolean focusTracking -
skipNextLf
protected boolean skipNextLf
-
-
Constructor Details
-
AbstractWindowsTerminal
public AbstractWindowsTerminal(TerminalProvider provider, SystemStream systemStream, Writer writer, String name, String type, Charset encoding, boolean nativeSignals, Terminal.SignalHandler signalHandler, Console inConsole, int inConsoleMode, Console outConsole, int outConsoleMode) throws IOException - Throws:
IOException
-
-
Method Details
-
handle
Description copied from interface:TerminalRegisters a handler for the givenTerminal.Signal.Note that the JVM does not easily allow catching the
Terminal.Signal.QUITsignal, which causes a thread dump to be displayed. This signal is mainly used when connecting through an SSH socket to a virtual terminal.- Specified by:
handlein interfaceTerminal- Overrides:
handlein classAbstractTerminal- Parameters:
signal- the signal to register a handler forhandler- the handler- Returns:
- the previous signal handler
-
reader
Description copied from interface:TerminalRetrieve theReaderfor this terminal. This is the standard way to read input from this terminal. The reader is non blocking.- Returns:
- The non blocking reader
-
writer
Description copied from interface:TerminalRetrieve theWriterfor this terminal. This is the standard way to write to this terminal.- Returns:
- The writer
-
input
Description copied from interface:TerminalRetrieve 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 theTerminal.reader()instead.- Returns:
- The input stream
- See Also:
-
output
Description copied from interface:TerminalRetrieve 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 theTerminal.writer()instead.- Returns:
- The output stream
- See Also:
-
getAttributes
Description copied from interface:TerminalReturns the terminal attributes. The returned object can be safely modified further used in a call toTerminal.setAttributes(Attributes).- Returns:
- the terminal attributes.
-
setAttributes
Description copied from interface:TerminalSet the terminal attributes. The terminal will perform a copy of the given attributes.- Parameters:
attr- the new attributes
-
updateConsoleMode
protected void updateConsoleMode() -
ctrl
protected int ctrl(char key) -
setSize
-
doClose
- Overrides:
doClosein classAbstractTerminal- Throws:
IOException
-
processKeyEvent
protected void processKeyEvent(boolean isKeyDown, short virtualKeyCode, char ch, int controlKeyState) throws IOException - Throws:
IOException
-
getEscapeSequence
-
getRawSequence
-
hasFocusSupport
public boolean hasFocusSupport()Description copied from interface:TerminalReturnstrueif the terminal has support for focus tracking.- Specified by:
hasFocusSupportin interfaceTerminal- Overrides:
hasFocusSupportin classAbstractTerminal- Returns:
- whether focus tracking is supported by the terminal
- See Also:
-
trackFocus
public boolean trackFocus(boolean tracking) Description copied from interface:TerminalEnable or disable focus tracking mode. When focus tracking has been activated, each time the terminal grabs the focus, the string "\33[I" will be sent to the input stream and each time the focus is lost, the string "\33[O" will be sent to the input stream.- Specified by:
trackFocusin interfaceTerminal- Overrides:
trackFocusin classAbstractTerminal- Parameters:
tracking- whether the focus tracking mode should be enabled or not- Returns:
trueif focus tracking is supported
-
canPauseResume
public boolean canPauseResume()Description copied from interface:TerminalWhether this terminal supportsTerminal.pause()andTerminal.resume()calls.- Specified by:
canPauseResumein interfaceTerminal- Overrides:
canPauseResumein classAbstractTerminal- Returns:
- whether this terminal supports
Terminal.pause()andTerminal.resume()calls. - See Also:
-
pause
public void pause()Description copied from interface:TerminalStop reading the input stream.- Specified by:
pausein interfaceTerminal- Overrides:
pausein classAbstractTerminal- See Also:
-
pause
Description copied from interface:TerminalStop reading the input stream and optionally wait for the underlying threads to finish.- Specified by:
pausein interfaceTerminal- Overrides:
pausein classAbstractTerminal- Parameters:
wait-trueto wait until the terminal is actually paused- Throws:
InterruptedException- if the call has been interrupted
-
resume
public void resume()Description copied from interface:TerminalResume reading the input stream.- Specified by:
resumein interfaceTerminal- Overrides:
resumein classAbstractTerminal- See Also:
-
paused
public boolean paused()Description copied from interface:TerminalCheck whether the terminal is currently reading the input stream or not. In order to process signal as quickly as possible, the terminal need to read the input stream and buffer it internally so that it can detect specific characters in the input stream (Ctrl+C, Ctrl+D, etc...) and raise the appropriate signals. However, there are some cases where this processing should be disabled, for example when handing the terminal control to a subprocess.- Specified by:
pausedin interfaceTerminal- Overrides:
pausedin classAbstractTerminal- Returns:
- whether the terminal is currently reading the input stream or not
- See Also:
-
pump
protected void pump() -
processInputChar
- Throws:
IOException
-
trackMouse
Description copied from interface:TerminalChange the mouse tracking mouse. To start mouse tracking, this method must be called with a valid mouse tracking mode. Mouse events will be reported by writing theInfoCmp.Capability.key_mouseto the input stream. When this character sequence is detected, theTerminal.readMouseEvent()method can be called to actually read the corresponding mouse event.- Specified by:
trackMousein interfaceTerminal- Overrides:
trackMousein classAbstractTerminal- Parameters:
tracking- the mouse tracking mode- Returns:
trueif mouse tracking is supported
-
getConsoleMode
-
setConsoleMode
-
processConsoleInput
Read a single input event from the input buffer and process it.- Returns:
- true if new input was generated from the event
- Throws:
IOException- if anything wrong happens
-
getProvider
Description copied from interface:TerminalExtReturns theTerminalProviderthat created this terminal ornullif the terminal was created with no provider. -
getSystemStream
Description copied from interface:TerminalExtThe underlying system stream, may beSystemStream.Output,SystemStream.Error, ornullif this terminal is not bound to a system stream.
-