* System.in/out to a command-line ECMA-48 / ANSI X3.64 type terminal
(tested on Linux + xterm). I/O is handled through terminal escape
sequences generated by the library itself: ncurses is not required
- or linked to. xterm mouse tracking using UTF8 coordinates is
- supported. For the demo application, this is the default backend on
- non-Windows platforms.
+ or linked to. xterm mouse tracking using UTF8 and SGR coordinates
+ are supported. For the demo application, this is the default
+ backend on non-Windows platforms.
* Java Swing UI. This backend can be selected by setting
jexer.Swing=true. The default window size for Swing is 132x40,
input (see the ENABLE_LINE_INPUT flag for GetConsoleMode() and
SetConsoleMode()).
+ - TTerminalWindow launches 'script -fqe /dev/null' on non-Windows
+ platforms. This is a workaround for the C library behavior of
+ checking for a tty: script launches $SHELL in a pseudo-tty. This
+ works on Linux but might not on other Posix-y platforms.
+
ECMA48 Backend
--------------
-
- - Mouse support for BackendType.ECMA48/XTERM currently requires UTF-8
- coordinates (1005 mode). Terminals that support UTF-8 mouse coordinates
- include xterm, rxvt-unicode, gnome-terminal, and konsole. Due to Java's
- InputStreamReader requirement of a valid UTF-8 stream, one must assume
- the terminal will always generate correct UTF-8 bytes. Mode 1006 (SGR)
- will be supported in a future release.
+
+ - Java's InputStreamReader requires a valid UTF-8 stream. The
+ default X10 encoding for mouse coordinates outside (160,94) can
+ corrupt that stream, at best putting garbage keyboard events in
+ the input queue but at worst causing the backend reader thread to
+ throw an Exception and exit and make the entire UI unusable.
+ Mouse support therefore requires a terminal that can deliver
+ either UTF-8 coordinates (1005 mode) or SGR coordinates (1006
+ mode). Most modern terminals can do this.
+
+ Use of 'stty'
+ -------------
+
+ - jexer.session.TTYSession calls 'stty size' once every second to
+ check the current window size, performing the same function as
+ ioctl(TIOCGWINSZ) but without requiring a native library.
+
+ - jexer.io.ECMA48Terminal calls 'stty' to perform the equivalent of
+ cfmakeraw(). The terminal is (blindly!) put back in 'stty sane
+ cooked' mode when exiting.
+
+
+System Properties
+-----------------
+
+The following properties control features of Jexer:
+
+ jexer.Swing
+ -----------
+
+ Used only by jexer.demos.Demo1. If true, use the Swing interface
+ for the demo application. Default: true on Windows platforms
+ (os.name starts with "Windows"), false on non-Windows platforms.
+
+ jexer.Swing.cursorStyle
+ -----------------------
+
+ Used by jexer.io.SwingScreen. Selects the cursor style to draw.
+ Valid values are: underline, block, outline. Default: underline.
0.0.2: STABILIZE EXISTING
-- TTerminalWindow
- - Expose shell commands as properties
-- Swing:
- - Blinking cursor
- - Block cursor
- ECMA48Backend running on socket
-- TFileOpen
-- Document any properties used
- - Expose use of 'stty'
0.0.3: FINISH PORTING
- Also add keyboard navigation
- TDirectoryList
- Also add keyboard navigation
+- TFileOpen
0.0.4: NEW STUFF
0.0.5: BUG HUNT
- TSubMenu keyboard mnemonic not working
-- ECMA48Terminal
- - Mode 1006 mouse coordinates
0.1.0: BETA RELEASE
![Several Windows Open Including A Terminal](/screenshots/screenshot1.png?raw=true "Several Windows Open Including A Terminal")
![Yo Dawg...](/screenshots/yodawg.png?raw=true "Yo Dawg, I heard you like text windowing systems, so I ran a text windowing system inside your text windowing system so you can have a terminal in your terminal.")
-