jline
Class WindowsTerminal

java.lang.Object
  extended byjline.Terminal
      extended byjline.WindowsTerminal
All Implemented Interfaces:
ConsoleOperations

public class WindowsTerminal
extends Terminal

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(java.io.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.

Author:
Marc Prud'hommeaux

Field Summary
static int DELETE_KEY
          When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR this character indicates that the delete key was pressed.
static int DOWN_ARROW_KEY
          When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR this character indicates an down arrow key press.
static char END_KEY
          When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR this character indicates that the end key was pressed.
static char ESCAPE_KEY
          When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR, this character indicates that the escape key was pressed.
static int HOME_KEY
          When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR this character indicates that the home key was pressed.
static char INSERT_KEY
          When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR this character indicates that the insert key was pressed.
static int LEFT_ARROW_KEY
          When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR, this character indicates an left arrow key press.
static int NUMPAD_KEY_INDICATOR
          On windows terminals, this character indicates that a special key on the number pad has been pressed.
static char PAGE_DOWN_KEY
          When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR this character indicates that the page down key was pressed.
static char PAGE_UP_KEY
          When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR this character indicates that the page up key was pressed.
static int RIGHT_ARROW_KEY
          When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR this character indicates an right arrow key press.
static int SPECIAL_KEY_INDICATOR
          On windows terminals, this character indicates that a 'special' key has been pressed.
static int UP_ARROW_KEY
          When following the SPECIAL_KEY_INDICATOR or NUMPAD_KEY_INDICATOR this character indicates an up arrow key press.
 
Fields inherited from interface jline.ConsoleOperations
ADD, BACKSPACE, CHANGE_CASE, CHANGE_META, CLEAR_LINE, CLEAR_SCREEN, COMPLETE, CR, CTRL_A, CTRL_B, CTRL_C, CTRL_D, CTRL_E, CTRL_F, CTRL_K, CTRL_L, CTRL_N, CTRL_OB, CTRL_P, CTRL_QM, DELETE, DELETE_META, DELETE_NEXT_CHAR, DELETE_PREV_CHAR, DELETE_PREV_WORD, END_OF_HISTORY, END_WORD, EXIT, INSERT, KEYBOARD_BELL, KILL_LINE, KILL_LINE_PREV, MOVE_TO_BEG, MOVE_TO_END, NEWLINE, NEXT_CHAR, NEXT_HISTORY, NEXT_SPACE_WORD, NEXT_WORD, PASTE, PASTE_NEXT, PASTE_PREV, PREV_CHAR, PREV_HISTORY, PREV_SPACE_WORD, PREV_WORD, REDISPLAY, REPEAT_NEXT_CHAR, REPEAT_PREV_CHAR, REPEAT_SEARCH_NEXT, REPEAT_SEARCH_PREV, REPLACE_CHAR, REPLACE_MODE, RESET_LINE, SEARCH_NEXT, SEARCH_PREV, START_OF_HISTORY, SUBSTITUTE_CHAR, SUBSTITUTE_LINE, TO_END_WORD, TO_NEXT_CHAR, TO_PREV_CHAR, UNDO, UNKNOWN
 
Constructor Summary
WindowsTerminal()
           
 
Method Summary
 void disableEcho()
          Disable character echoing.
 void enableEcho()
          Enable character echoing.
 InputStream getDefaultBindings()
           
 Boolean getDirectConsole()
          Whether or not to allow the use of the JNI console interaction.
 boolean getEcho()
          Returns true if the terminal will echo all characters type.
 int getTerminalHeight()
          Unsupported; return the default.
 int getTerminalWidth()
          Unsupported; return the default.
 void initializeTerminal()
          Initialize any system settings that are required for the console to be able to handle input correctly, such as setting tabtop, buffered input, and character echo.
 boolean isANSISupported()
          Windows doesn't support ANSI codes by default; disable them.
 boolean isEchoEnabled()
          Returns false if character echoing is disabled.
 boolean isSupported()
          Returns true if this terminal is capable of initializing the terminal to use jline.
 int readCharacter(InputStream in)
          Read a single character from the input stream.
 int readVirtualKey(InputStream in)
          Reads a virtual key from the console.
 void setDirectConsole(Boolean directConsole)
          Whether or not to allow the use of the JNI console interaction.
 
Methods inherited from class jline.Terminal
afterReadLine, beforeReadLine, getTerminal, resetTerminal, setupTerminal
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

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.

See Also:
Constant Field Values

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.

See Also:
Constant Field Values

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.

See Also:
Constant Field Values

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.

See Also:
Constant Field Values

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.

See Also:
Constant Field Values

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.

See Also:
Constant Field Values

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.

See Also:
Constant Field Values

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.

See Also:
Constant Field Values

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.

See Also:
Constant Field Values

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.

See Also:
Constant Field Values

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.

See Also:
Constant Field Values

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.

See Also:
Constant Field Values

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.

See Also:
Constant Field Values
Constructor Detail

WindowsTerminal

public WindowsTerminal()
Method Detail

readCharacter

public int readCharacter(InputStream in)
                  throws IOException
Description copied from class: Terminal
Read a single character from the input stream. This might enable a terminal implementation to better handle nuances of the console.

Overrides:
readCharacter in class Terminal
Throws:
IOException

initializeTerminal

public void initializeTerminal()
                        throws Exception
Description copied from class: Terminal
Initialize any system settings that are required for the console to be able to handle input correctly, such as setting tabtop, buffered input, and character echo.

Specified by:
initializeTerminal in class Terminal
Throws:
Exception

readVirtualKey

public int readVirtualKey(InputStream in)
                   throws IOException
Description copied from class: Terminal
Reads a virtual key from the console. Typically, this will just be the raw character that was entered, but in some cases, multiple input keys will need to be translated into a single virtual key.

Overrides:
readVirtualKey in class Terminal
Parameters:
in - the InputStream to read from
Returns:
the virtual key (e.g., ConsoleOperations#VK_UP)
Throws:
IOException

isSupported

public boolean isSupported()
Description copied from class: Terminal
Returns true if this terminal is capable of initializing the terminal to use jline.

Specified by:
isSupported in class Terminal

isANSISupported

public boolean isANSISupported()
Windows doesn't support ANSI codes by default; disable them.

Overrides:
isANSISupported in class Terminal

getEcho

public boolean getEcho()
Description copied from class: Terminal
Returns true if the terminal will echo all characters type.

Specified by:
getEcho in class Terminal

getTerminalWidth

public int getTerminalWidth()
Unsupported; return the default.

Specified by:
getTerminalWidth in class Terminal
See Also:
Terminal.getTerminalWidth()

getTerminalHeight

public int getTerminalHeight()
Unsupported; return the default.

Specified by:
getTerminalHeight in class Terminal
See Also:
Terminal.getTerminalHeight()

setDirectConsole

public void setDirectConsole(Boolean directConsole)
Whether or not to allow the use of the JNI console interaction.


getDirectConsole

public Boolean getDirectConsole()
Whether or not to allow the use of the JNI console interaction.


isEchoEnabled

public boolean isEchoEnabled()
Description copied from class: Terminal
Returns false if character echoing is disabled.

Specified by:
isEchoEnabled in class Terminal

enableEcho

public void enableEcho()
Description copied from class: Terminal
Enable character echoing. This can be used to re-enable character if the ConsoleReader is no longer being used.

Specified by:
enableEcho in class Terminal

disableEcho

public void disableEcho()
Description copied from class: Terminal
Disable character echoing. This can be used to manually re-enable character if the ConsoleReader has been disabled.

Specified by:
disableEcho in class Terminal

getDefaultBindings

public InputStream getDefaultBindings()
Overrides:
getDefaultBindings in class Terminal


Copyright 2002-2008. All Rights Reserved.