Jexer - Java Text User Interface library
========================================
-This library implements a text-based windowing system reminiscient of
-Borland's [Turbo Vision](http://en.wikipedia.org/wiki/Turbo_Vision)
-system. (For those wishing to use the actual C++ Turbo Vision
-library, see [Sergio Sigala's C++ version based on the sources
-released by Borland,](http://tvision.sourceforge.net/) or consider
-Free Pascal's [Free Vision
-library.](http://wiki.freepascal.org/Free_Vision))
+This library implements a text-based windowing system loosely
+reminiscient of Borland's [Turbo
+Vision](http://en.wikipedia.org/wiki/Turbo_Vision) system. (For those
+wishing to use the actual C++ Turbo Vision library, see [Sergio
+Sigala's C++ version based on the sources released by
+Borland,](http://tvision.sourceforge.net/) or consider Free Pascal's
+[Free Vision library.](http://wiki.freepascal.org/Free_Vision))
Jexer currently supports three backends:
(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 is supported using both UTF8 and
- SGR coordinates. For the demo application, this is the default
- backend on non-Windows/non-Mac platforms.
+ SGR coordinates. Images are optionally rendered via sixel graphics
+ (see jexer.ECMA48.sixel). For the demo application, this is the
+ default backend on non-Windows/non-Mac platforms.
* The same command-line ECMA-48 / ANSI X3.64 type terminal as above,
but to any general InputStream/OutputStream or Reader/Writer. See
the file jexer.demos.Demo2 for an example of running the demo over a
- TCP socket. jexer.demos.Demo3 demonstrates how one might use a
- character encoding than the default UTF-8.
+ TCP (telnet) socket. jexer.demos.Demo3 demonstrates how one might
+ use a character encoding than the default UTF-8.
* Java Swing UI. The default window size for Swing is 80x25 and 20
point font; this can be changed in the TApplication(BackendType)
![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.")
+![Sixel Pictures Of Cliffs Of Moher And Buoy](/screenshots/sixel_images.png?raw=true "Sixel Pictures Of Cliffs Of Moher And Buoy")
+
+![Sixel Color Wheel](/screenshots/sixel_color_wheel.png?raw=true "Sixel Color Wheel")
+
System Properties
resize with the window. ptypipe is a separate C language utility,
available at https://gitlab.com/klamonte/ptypipe. Default: false.
+ jexer.TTerminal.closeOnExit
+ ---------------------------
+
+ Used by jexer.TTerminalWindow. If true, close the window when the
+ spawned shell exits. Default: false.
+
jexer.ECMA48.rgbColor
---------------------
colors for normal system colors. This is expensive in bandwidth,
and potentially terrible looking for non-xterms. Default: false.
+ jexer.ECMA48.sixel
+ ------------------
+
+ Used by jexer.backend.ECMA48Terminal. If true, emit image data
+ using sixel, otherwise show blank cells where images could be. This
+ is expensive in bandwidth, very expensive in CPU (especially for
+ large images), and will leave artifacts on the screen if the
+ terminal does not support sixel. Default: true.
+
Known Issues / Arbitrary Decisions
- Closing a TTerminalWindow without exiting the process inside it
may result in a zombie 'script' process.
+ - When using the Swing backend, and not using 'ptypipe', closing a
+ TTerminalWindow without exiting the process inside it may result
+ in a SIGTERM to the JVM causing it to crash. The root cause is
+ currently unknown, but is potentially a bug in more recent
+ releases of the 'script' utility from the util-linux package.
+
- TTerminalWindow can only notify the child process of changes in
window size if using the 'ptypipe' utility, due to Java's lack of
support for forkpty() and similar. ptypipe is available at
equivalent of cfmakeraw() when using System.in/out. System.out is
also (blindly!) put in 'stty sane cooked' mode when exiting.
+ - jexer.backend.ECMA48Terminal uses a single palette containing
+ MAX_COLOR_REGISTERS colors for all sixel images. These colors are
+ generated in the SixelPalette.makePalette() method with bits for
+ hue, saturation, and luminance, and the two extremes set to pure
+ black and pure white. This provides a reasonable general-purpose
+ palette light on CPU, but at a cost that individual images do not
+ look as good as the terminal is actually capable of.
-Roadmap
--------
-Many tasks remain before calling this version 1.0. See docs/TODO.md
-for the complete list of tasks.
+See Also
+--------
+
+[Tranquil Java IDE](https://tjide.sourceforge.io) is a TUI-based
+integrated development environment for the Java language that was
+built using a very lightly modified GPL version of Jexer. TJ provided
+a real-world use case to shake out numerous bugs and limitations of
+Jexer.