InputProvider
, IOSafeTerminal
, Terminal
, ImageObserver
, MenuContainer
, Closeable
, Serializable
, AutoCloseable
, Accessible
public class AWTTerminalFrame extends Frame implements IOSafeTerminal
AWTTerminal
component, but it also
implements the Terminal
interface and delegates all calls to the internal
AWTTerminal
. You can tweak the class a bit to have special behaviours when exiting private mode or when the
user presses ESC key.
Please note that this is the AWT version and there is a Swing counterpart: SwingTerminalFrame
AWTTerminal
,
SwingTerminalFrame
,
Serialized FormComponent.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
Container.AccessibleAWTContainer
Frame.AccessibleAWTFrame
Window.AccessibleAWTWindow, Window.Type
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
Constructor | Description |
---|---|
AWTTerminalFrame(TerminalEmulatorAutoCloseTrigger... autoCloseTriggers) |
Creates a new AWTTerminalFrame with an optional list of auto-close triggers
|
AWTTerminalFrame(String title,
TerminalEmulatorAutoCloseTrigger... autoCloseTriggers) |
Creates a new AWTTerminalFrame with a given window title and an optional list of auto-close triggers
|
AWTTerminalFrame(String title,
TerminalEmulatorDeviceConfiguration deviceConfiguration,
AWTTerminalFontConfiguration fontConfiguration,
TerminalEmulatorColorConfiguration colorConfiguration,
TerminalEmulatorAutoCloseTrigger... autoCloseTriggers) |
Creates a new AWTTerminalFrame using a specified title and a series of AWT terminal configuration objects
|
AWTTerminalFrame(String title,
TerminalSize terminalSize,
TerminalEmulatorDeviceConfiguration deviceConfiguration,
AWTTerminalFontConfiguration fontConfiguration,
TerminalEmulatorColorConfiguration colorConfiguration,
TerminalEmulatorAutoCloseTrigger... autoCloseTriggers) |
Creates a new AWTTerminalFrame using a specified title and a series of AWT terminal configuration objects
|
Modifier and Type | Method | Description |
---|---|---|
void |
addAutoCloseTrigger(TerminalEmulatorAutoCloseTrigger autoCloseTrigger) |
|
void |
addInput(KeyStroke keyStroke) |
Takes a KeyStroke and puts it on the input queue of the terminal emulator.
|
void |
addResizeListener(TerminalResizeListener listener) |
Adds a
TerminalResizeListener to be called when the terminal has changed size. |
void |
bell() |
Prints 0x7 to the terminal, which will make the terminal (emulator) ring a bell (or more likely beep).
|
void |
clearScreen() |
Removes all the characters, colors and graphics from the screen and leaves you with a big empty space.
|
void |
close() |
Closes the terminal, if applicable.
|
void |
disableSGR(SGR sgr) |
Deactivates an
SGR (Selected Graphic Rendition) code which has previously been activated through
enableSGR(..) . |
void |
dispose() |
|
void |
enableSGR(SGR sgr) |
Activates an
SGR (Selected Graphic Rendition) code. |
byte[] |
enquireTerminal(int timeout,
TimeUnit timeoutUnit) |
Retrieves optional information from the terminal by printing the ENQ (\u005) character.
|
void |
enterPrivateMode() |
Calling this method will, where supported, give your terminal a private area to use, separate from what was there
before.
|
void |
exitPrivateMode() |
If you have previously entered private mode, this method will exit this and, depending on implementation, maybe
restore what the terminal looked like before private mode was entered.
|
void |
flush() |
Calls
flush() on the underlying OutputStream object, or whatever other implementation this
terminal is built around. |
Set<TerminalEmulatorAutoCloseTrigger> |
getAutoCloseTrigger() |
Returns the auto-close triggers used by the AWTTerminalFrame
|
TerminalEmulatorColorConfiguration |
getColorConfiguration() |
Returns this terminal emulator's color configuration.
|
TerminalPosition |
getCursorPosition() |
Returns the position of the cursor, as reported by the terminal.
|
TerminalEmulatorDeviceConfiguration |
getDeviceConfiguration() |
Returns this terminal emulator's device configuration.
|
AWTTerminalFontConfiguration |
getFontConfiguration() |
Returns the current font configuration.
|
TerminalSize |
getTerminalSize() |
Returns the size of the terminal, expressed as a
TerminalSize object. |
TextGraphics |
newTextGraphics() |
Creates a new TextGraphics object that uses this Terminal directly when outputting.
|
KeyStroke |
pollInput() |
Returns the next
Key off the input queue or null if there is no more input events available. |
void |
putCharacter(char c) |
Prints one character to the terminal at the current cursor location.
|
KeyStroke |
readInput() |
Returns the next
Key off the input queue or blocks until one is available. |
void |
removeResizeListener(TerminalResizeListener listener) |
Removes a
TerminalResizeListener from the list of listeners to be notified when the terminal has changed
size |
void |
resetColorAndSGR() |
Removes all currently active SGR codes and sets foreground and background colors back to default.
|
void |
setBackgroundColor(TextColor color) |
Changes the background color for all the following characters put to the terminal.
|
void |
setCursorPosition(int x,
int y) |
Moves the text cursor to a new location on the terminal.
|
void |
setCursorPosition(TerminalPosition position) |
Same as calling
setCursorPosition(position.getColumn(), position.getRow()) |
void |
setCursorVisible(boolean visible) |
Hides or shows the text cursor, but not all terminal (-emulators) supports this.
|
void |
setForegroundColor(TextColor color) |
Changes the foreground color for all the following characters put to the terminal.
|
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, requestFocusInWindow, resize, resize, revalidate, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setMaximumSize, setMixingCutoutShape, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
add, add, add, add, add, addContainerListener, addImpl, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, setLayout, transferFocusDownCycle, update, validate, validateTree
addNotify, getAccessibleContext, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, paramString, remove, removeNotify, setBackground, setCursor, setExtendedState, setIconImage, setMaximizedBounds, setMenuBar, setOpacity, setResizable, setShape, setState, setTitle, setUndecorated
getFont, postEvent
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, getBackground, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOpacity, getOwnedWindows, getOwner, getOwnerlessWindows, getShape, getToolkit, getType, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isAutoRequestFocus, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isOpaque, isShowing, isValidateRoot, pack, paint, postEvent, processEvent, processWindowEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setAutoRequestFocus, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocation, setLocation, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setType, setVisible, show, toBack, toFront
public AWTTerminalFrame(TerminalEmulatorAutoCloseTrigger... autoCloseTriggers)
autoCloseTriggers
- What to trigger automatic disposal of the Framepublic AWTTerminalFrame(String title, TerminalEmulatorAutoCloseTrigger... autoCloseTriggers) throws HeadlessException
title
- Title to use for the windowautoCloseTriggers
- What to trigger automatic disposal of the FrameHeadlessException
public AWTTerminalFrame(String title, TerminalEmulatorDeviceConfiguration deviceConfiguration, AWTTerminalFontConfiguration fontConfiguration, TerminalEmulatorColorConfiguration colorConfiguration, TerminalEmulatorAutoCloseTrigger... autoCloseTriggers)
title
- What title to use for the windowdeviceConfiguration
- Device configuration for the embedded AWTTerminalfontConfiguration
- Font configuration for the embedded AWTTerminalcolorConfiguration
- Color configuration for the embedded AWTTerminalautoCloseTriggers
- What to trigger automatic disposal of the Framepublic AWTTerminalFrame(String title, TerminalSize terminalSize, TerminalEmulatorDeviceConfiguration deviceConfiguration, AWTTerminalFontConfiguration fontConfiguration, TerminalEmulatorColorConfiguration colorConfiguration, TerminalEmulatorAutoCloseTrigger... autoCloseTriggers)
title
- What title to use for the windowterminalSize
- Initial size of the terminal, in rows and columns. If null, it will default to 80x25.deviceConfiguration
- Device configuration for the embedded AWTTerminalfontConfiguration
- Font configuration for the embedded AWTTerminalcolorConfiguration
- Color configuration for the embedded AWTTerminalautoCloseTriggers
- What to trigger automatic disposal of the Framepublic AWTTerminalFontConfiguration getFontConfiguration()
AWTTerminalFrame
's current font configurationpublic TerminalEmulatorColorConfiguration getColorConfiguration()
AWTTerminalFrame
's color configurationpublic TerminalEmulatorDeviceConfiguration getDeviceConfiguration()
AWTTerminalFrame
's device configurationpublic Set<TerminalEmulatorAutoCloseTrigger> getAutoCloseTrigger()
public void addAutoCloseTrigger(TerminalEmulatorAutoCloseTrigger autoCloseTrigger)
public void close()
Terminal
close
in interface AutoCloseable
close
in interface Closeable
close
in interface IOSafeTerminal
close
in interface Terminal
public void addInput(KeyStroke keyStroke)
keyStroke
- Key stroke input event to put on the queuepublic KeyStroke pollInput()
InputProvider
Key
off the input queue or null if there is no more input events available. Note, this
method call is not blocking, it returns null immediately if there is nothing on the input stream.pollInput
in interface InputProvider
pollInput
in interface IOSafeTerminal
public KeyStroke readInput()
InputProvider
Key
off the input queue or blocks until one is available. NOTE: In previous
versions of Lanterna, this method was not blocking. From lanterna 3, it is blocking and you can call
pollInput()
for the non-blocking version.readInput
in interface InputProvider
readInput
in interface IOSafeTerminal
public void enterPrivateMode()
Terminal
enterPrivateMode
in interface IOSafeTerminal
enterPrivateMode
in interface Terminal
public void exitPrivateMode()
Terminal
exitPrivateMode
in interface IOSafeTerminal
exitPrivateMode
in interface Terminal
public void clearScreen()
Terminal
moveCursor
next. Some terminal implementations doesn't reset color and modifier state so it's also good
practise to call resetColorAndSGR()
after this.clearScreen
in interface IOSafeTerminal
clearScreen
in interface Terminal
public void setCursorPosition(int x, int y)
Terminal
setCursorPosition
in interface IOSafeTerminal
setCursorPosition
in interface Terminal
x
- The 0-indexed column to place the cursor aty
- The 0-indexed row to place the cursor atpublic void setCursorPosition(TerminalPosition position)
Terminal
setCursorPosition(position.getColumn(), position.getRow())
setCursorPosition
in interface IOSafeTerminal
setCursorPosition
in interface Terminal
position
- Position to place the cursor atpublic TerminalPosition getCursorPosition()
Terminal
getCursorPosition
in interface IOSafeTerminal
getCursorPosition
in interface Terminal
public void setCursorVisible(boolean visible)
Terminal
setCursorVisible
in interface IOSafeTerminal
setCursorVisible
in interface Terminal
visible
- Hides the text cursor if false
and shows it if true
public void putCharacter(char c)
Terminal
putCharacter
will print out a text string without the need
to reposition the text cursor. If you reach the end of the line while putting characters using this method, you
can expect the text cursor to move to the beginning of the next line.
You can output CJK (Chinese, Japanese, Korean) characters (as well as other regional scripts) but remember that
the terminal that the user is using might not have the required font to render it. Also worth noticing is that
CJK (and some others) characters tend to take up 2 columns per character, simply because they are a square in
their construction as opposed to the somewhat rectangular shape we fit latin characters in. As it's very
difficult to create a monospace font for CJK with a 2:1 height-width proportion, it seems like the implementers
back in the days simply gave up and made each character take 2 column. It causes issues for the random terminal
programmer because you can't really trust 1 character = 1 column, but I suppose it's "しょうがない".
If you try to print non-printable control characters, the terminal is likely to ignore them (all Terminal
implementations bundled with Lanterna will).
putCharacter
in interface IOSafeTerminal
putCharacter
in interface Terminal
c
- Character to place on the terminalpublic TextGraphics newTextGraphics()
Terminal
.flush()
after any operation, so you'll need to do that on your own.newTextGraphics
in interface Terminal
public void enableSGR(SGR sgr)
Terminal
SGR
(Selected Graphic Rendition) code. This code modifies a state inside the terminal
that will apply to all characters written afterwards, such as bold, italic, blinking code and so on.enableSGR
in interface IOSafeTerminal
enableSGR
in interface Terminal
sgr
- SGR code to applySGR
,
http://www.vt100.net/docs/vt510-rm/SGRpublic void disableSGR(SGR sgr)
Terminal
SGR
(Selected Graphic Rendition) code which has previously been activated through
enableSGR(..)
.disableSGR
in interface IOSafeTerminal
disableSGR
in interface Terminal
sgr
- SGR code to applySGR
,
http://www.vt100.net/docs/vt510-rm/SGRpublic void resetColorAndSGR()
Terminal
resetColorAndSGR
in interface IOSafeTerminal
resetColorAndSGR
in interface Terminal
SGR
,
http://www.vt100.net/docs/vt510-rm/SGRpublic void setForegroundColor(TextColor color)
Terminal
This overload is using the TextColor class to define a color, which is a layer of abstraction above the three different color formats supported (ANSI, indexed and RGB). The other setForegroundColor(..) overloads gives you direct access to set one of those three.
Note to implementers of this interface, just make this method call color.applyAsForeground(this);
setForegroundColor
in interface IOSafeTerminal
setForegroundColor
in interface Terminal
color
- Color to use for foregroundpublic void setBackgroundColor(TextColor color)
Terminal
This overload is using the TextColor class to define a color, which is a layer of abstraction above the three different color formats supported (ANSI, indexed and RGB). The other setBackgroundColor(..) overloads gives you direct access to set one of those three.
Note to implementers of this interface, just make this method call color.applyAsBackground(this);
setBackgroundColor
in interface IOSafeTerminal
setBackgroundColor
in interface Terminal
color
- Color to use for the backgroundpublic TerminalSize getTerminalSize()
Terminal
TerminalSize
object. Please bear in mind that depending
on the Terminal
implementation, this may or may not be accurate. See the implementing classes for more
information. Most commonly, calling getTerminalSize() will involve some kind of hack to retrieve the size of the
terminal, like moving the cursor to position 5000x5000 and then read back the location, unless the terminal
implementation has a more smooth way of getting this data. Keep this in mind and see if you can avoid calling
this method too often. There is a helper class, SimpleTerminalResizeListener, that you can use to cache the size
and update it only when resize events are received (which depends on if a resize is detectable, which they are not
on all platforms).getTerminalSize
in interface IOSafeTerminal
getTerminalSize
in interface Terminal
public byte[] enquireTerminal(int timeout, TimeUnit timeoutUnit)
Terminal
enquireTerminal
in interface IOSafeTerminal
enquireTerminal
in interface Terminal
timeout
- How long to wait for the talk-back message, if there's nothing immediately available on the input
stream, you should probably set this to a somewhat small value to prevent unnecessary blockage on the input stream
but large enough to accommodate a round-trip to the user's terminal (~300 ms if you are connection across the globe).timeoutUnit
- What unit to use when interpreting the timeout
parameterpublic void bell()
Terminal
bell
in interface IOSafeTerminal
bell
in interface Terminal
public void flush()
Terminal
flush()
on the underlying OutputStream
object, or whatever other implementation this
terminal is built around. Some implementing classes of this interface (like SwingTerminal) doesn't do anything
as it doesn't really apply to them.flush
in interface IOSafeTerminal
flush
in interface Terminal
public void addResizeListener(TerminalResizeListener listener)
Terminal
TerminalResizeListener
to be called when the terminal has changed size. There is no guarantee that
this listener will really be invoked when the terminal has changed size, at all depends on the terminal emulator
implementation. Normally on Unix systems the WINCH signal will be sent to the process and lanterna can intercept
this.
There are no guarantees on what thread the call will be made on, so please be careful with what kind of operation you perform in this callback. You should probably not take too long to return.
addResizeListener
in interface Terminal
listener
- Listener object to be called when the terminal has been changedTerminalResizeListener
public void removeResizeListener(TerminalResizeListener listener)
Terminal
TerminalResizeListener
from the list of listeners to be notified when the terminal has changed
sizeremoveResizeListener
in interface Terminal
listener
- Listener object to removeTerminalResizeListener
Copyright © 2020. All rights reserved.