Terminal implementation for Microsoft Windows. Terminal initialization in
initializeTerminal()
is accomplished by extracting the
jline_version.dll, saving it to the system temporary
directoy (determined by the setting of the
java.io.tmpdir System
property), loading the library, and then calling the Win32 APIs
SetConsoleMode and
GetConsoleMode to
disable character echoing.
By default, the
readCharacter(InputStream)
method will attempt to test to see if
the specified
InputStream
is
System.in
or a wrapper around
FileDescriptor.in
, and if so, will bypass the character reading to
directly invoke the readc() method in the JNI library. This is so the class
can read special keys (like arrow keys) which are otherwise inaccessible via
the
System.in
stream. Using JNI reading can be bypassed by setting
the
jline.WindowsTerminal.disableDirectConsole
system property
to
true
.
DELETE_KEY
public static final int DELETE_KEY
When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR
this character indicates that
the delete key was pressed.
DOWN_ARROW_KEY
public static final int DOWN_ARROW_KEY
When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR
this character indicates an
down arrow key press.
ENABLE_ECHO_INPUT
private static final int ENABLE_ECHO_INPUT
Characters read by the ReadFile or ReadConsole function are written to
the active screen buffer as they are read. This mode can be used only if
the ENABLE_LINE_INPUT mode is also enabled.
ENABLE_LINE_INPUT
private static final int ENABLE_LINE_INPUT
The ReadFile or ReadConsole function returns only when a carriage return
character is read. If this mode is disable, the functions return when one
or more characters are available.
ENABLE_MOUSE_INPUT
private static final int ENABLE_MOUSE_INPUT
If the mouse pointer is within the borders of the console window and the
window has the keyboard focus, mouse events generated by mouse movement
and button presses are placed in the input buffer. These events are
discarded by ReadFile or ReadConsole, even when this mode is enabled.
ENABLE_PROCESSED_INPUT
private static final int ENABLE_PROCESSED_INPUT
CTRL+C is processed by the system and is not placed in the input buffer.
If the input buffer is being read by ReadFile or ReadConsole, other
control keys are processed by the system and are not returned in the
ReadFile or ReadConsole buffer. If the ENABLE_LINE_INPUT mode is also
enabled, backspace, carriage return, and linefeed characters are handled
by the system.
ENABLE_PROCESSED_OUTPUT
private static final int ENABLE_PROCESSED_OUTPUT
When enabled, text entered in a console window will be inserted at the
current cursor location and all text following that location will not be
overwritten. When disabled, all following text will be overwritten. An OR
operation must be performed with this flag and the ENABLE_EXTENDED_FLAGS
flag to enable this functionality.
ENABLE_WINDOW_INPUT
private static final int ENABLE_WINDOW_INPUT
User interactions that change the size of the console screen buffer are
reported in the console's input buffee. Information about these events
can be read from the input buffer by applications using
theReadConsoleInput function, but not by those using ReadFile
orReadConsole.
ENABLE_WRAP_AT_EOL_OUTPUT
private static final int ENABLE_WRAP_AT_EOL_OUTPUT
This flag enables the user to use the mouse to select and edit text. To
enable this option, use the OR to combine this flag with
ENABLE_EXTENDED_FLAGS.
END_KEY
public static final char END_KEY
When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR
this character indicates that
the end key was pressed.
ESCAPE_KEY
public static final char ESCAPE_KEY
When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR,
this character indicates that the escape key was pressed.
HOME_KEY
public static final int HOME_KEY
When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR
this character indicates that
the home key was pressed.
INSERT_KEY
public static final char INSERT_KEY
When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR
this character indicates that
the insert key was pressed.
LEFT_ARROW_KEY
public static final int LEFT_ARROW_KEY
When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR,
this character indicates an left arrow key press.
NUMPAD_KEY_INDICATOR
public static final int NUMPAD_KEY_INDICATOR
On windows terminals, this character indicates that a special key on the
number pad has been pressed.
PAGE_DOWN_KEY
public static final char PAGE_DOWN_KEY
When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR
this character indicates that
the page down key was pressed.
PAGE_UP_KEY
public static final char PAGE_UP_KEY
When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR
this character indicates that
the page up key was pressed.
RIGHT_ARROW_KEY
public static final int RIGHT_ARROW_KEY
When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR
this character indicates an
right arrow key press.
SPECIAL_KEY_INDICATOR
public static final int SPECIAL_KEY_INDICATOR
On windows terminals, this character indicates that a 'special' key has
been pressed. This means that a key such as an arrow key, or delete, or
home, etc. will be indicated by the next character.
UP_ARROW_KEY
public static final int UP_ARROW_KEY
When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR
this character indicates an up
arrow key press.
directConsole
private Boolean directConsole
echoEnabled
private boolean echoEnabled
encoding
(package private) String encoding
replayReader
(package private) InputStreamReader replayReader
consumeException
private void consumeException(Throwable e)
No-op for exceptions we want to silently consume.
getConsoleMode
private int getConsoleMode()
getDirectConsole
public Boolean getDirectConsole()
Whether or not to allow the use of the JNI console interaction.
getWindowsTerminalHeight
private int getWindowsTerminalHeight()
getWindowsTerminalWidth
private int getWindowsTerminalWidth()
isANSISupported
public boolean isANSISupported()
Windows doesn't support ANSI codes by default; disable them.
- isANSISupported in interface Terminal
loadLibrary
private void loadLibrary(String name)
throws IOException
readByte
private int readByte()
readCharacter
public int readCharacter(InputStream in)
throws IOException
- readCharacter in interface Terminal
readVirtualKey
public int readVirtualKey(InputStream in)
throws IOException
- readVirtualKey in interface Terminal
setConsoleMode
private void setConsoleMode(int mode)
setDirectConsole
public void setDirectConsole(Boolean directConsole)
Whether or not to allow the use of the JNI console interaction.