jexer/README.md

255 lines
9.8 KiB
Markdown
Raw Normal View History

2015-03-08 04:57:55 -06:00
Jexer - Java Text User Interface library
========================================
2019-02-14 08:26:30 -07:00
This library implements a text-based windowing system loosely
2019-03-08 19:25:38 -07:00
reminiscent of Borland's [Turbo
Vision](http://en.wikipedia.org/wiki/Turbo_Vision) system. It looks
like this:
2015-03-16 13:53:34 -06:00
2019-08-14 18:41:07 -06:00
![Terminal, Image, Table](/screenshots/new_demo1.png?raw=true "Terminal, Image, Table")
2015-03-15 21:03:55 -06:00
2019-03-08 19:25:38 -07:00
Jexer works on both Xterm-like terminals and Swing, and supports
images in both Xterm and Swing. On Swing, images are true color:
2019-03-08 19:25:38 -07:00
![Swing Snake Image](/screenshots/snake_swing.png?raw=true "Swing Snake Image")
2015-03-15 21:03:55 -06:00
2019-03-08 19:25:38 -07:00
On Xterm, images are dithered to a common palette:
2015-03-15 21:03:55 -06:00
2019-03-08 19:25:38 -07:00
![Xterm Snake Image](/screenshots/snake_xterm.png?raw=true "Xterm Snake Image")
2017-03-19 14:07:11 -06:00
2021-12-30 11:29:58 -07:00
Support for pixel-based operations was introduced in version 1.5.0.
If the terminal supports mouse mode 1016 (SGR-Pixel), one can now get
smooth(er) mouse motion with custom bitmap overlaid mouse. Below is
stock xterm, with a custom mouse icon, and SGR-Pixel mode active:
2021-12-24 14:47:13 -07:00
![Xterm SGR-Pixel Mouse](/screenshots/xterm_pixel_mouse.gif?raw=true "Xterm SGR-Pixel Mouse")
2022-01-03 13:17:21 -07:00
A new sixel encoder is in the works for Xterm, which should look a lot
better:
![Xterm Snake Image](/screenshots/snake_xterm_hq.png?raw=true "Xterm Snake Image - HQ Encoder")
2015-03-15 21:03:55 -06:00
2015-03-08 04:57:55 -06:00
License
-------
2019-03-08 19:25:38 -07:00
Jexer is available to all under the MIT License. See the file LICENSE
2016-01-28 06:00:14 -07:00
for the full license text.
2015-03-08 04:57:55 -06:00
2019-03-08 19:25:38 -07:00
Obtaining Jexer
---------------
2019-02-21 19:37:43 -07:00
Jexer is available on Maven Central:
```xml
<dependency>
<groupId>com.gitlab.klamonte</groupId>
<artifactId>jexer</artifactId>
2021-12-30 11:29:58 -07:00
<version>1.5.0</version>
2019-02-21 19:37:43 -07:00
</dependency>
```
2019-03-08 19:25:38 -07:00
Binary releases are available on SourceForge:
https://sourceforge.net/projects/jexer/files/jexer/
2019-02-21 19:37:43 -07:00
2019-03-08 19:25:38 -07:00
The Jexer source code is hosted at: https://gitlab.com/klamonte/jexer
2015-03-16 13:53:34 -06:00
2015-03-08 04:57:55 -06:00
2015-04-02 07:19:13 -06:00
2019-03-08 19:25:38 -07:00
Documentation
-------------
2015-04-02 07:19:13 -06:00
2019-03-08 19:25:38 -07:00
* [Java API Docs](https://jexer.sourceforge.io/apidocs/api/index.html)
2015-04-02 07:19:13 -06:00
2019-03-08 19:25:38 -07:00
* [Wiki](https://gitlab.com/klamonte/jexer/wikis/home)
2015-04-02 07:19:13 -06:00
2019-08-24 08:11:02 -06:00
* [Jexer web page](https://jexer.sourceforge.io/)
2019-12-23 06:42:52 -07:00
* [Development Standards](https://gitlab.com/klamonte/jexer/wikis/dev-standards)
2019-02-23 09:46:43 -07:00
2019-03-08 19:25:38 -07:00
Programming Examples
--------------------
2019-02-23 09:46:43 -07:00
2020-06-07 17:24:47 -06:00
See [Xterm Window Manager](https://xtermwm.sourceforge.io) for a more
comprehensive demonstration of what Jexer can accomplish. Here one
can see a floating terminal window over tiled terminals, two of which
are showing images:
![Floating terminal over tiled terminals](/screenshots/floating_terminal.png?raw=true "Floating terminal over tiled terminals")
Jexer's examples/ folder currently contains:
2019-02-23 09:46:43 -07:00
* A [prototype tiling window
2019-02-23 09:47:29 -07:00
manager](/examples/JexerTilingWindowManager.java) in less than 250
2019-02-23 09:46:43 -07:00
lines of code.
2019-08-22 07:05:16 -06:00
* A much slicker [prototype tiling window
manager](/examples/JexerTilingWindowManager2.java) in less than 200
lines of code.
2019-02-23 14:27:33 -07:00
* A [prototype image thumbnail
viewer](/examples/JexerImageViewer.java) in less than 350 lines of
code.
2019-02-23 09:46:43 -07:00
jexer.demos contains official demos showing all of the existing UI
controls. The demos can be run as follows:
2015-04-02 07:19:13 -06:00
* 'java -jar jexer.jar' . This will use System.in/out with
2019-03-08 19:25:38 -07:00
Xterm-like sequences on non-Windows non-Mac platforms. On Windows
and Mac it will use a Swing JFrame.
2015-04-02 07:19:13 -06:00
* 'java -Djexer.Swing=true -jar jexer.jar' . This will always use
Swing on any platform.
* 'java -cp jexer.jar jexer.demos.Demo2 PORT' (where PORT is a
2019-03-08 19:25:38 -07:00
number to run the TCP daemon on). This will use the Xterm backend
on a telnet server that will update with screen size changes.
2015-04-02 07:19:13 -06:00
* 'java -cp jexer.jar jexer.demos.Demo3' . This will use
2019-03-08 19:25:38 -07:00
System.in/out with Xterm-like sequences. One can see in the code
how to pass a different InputReader and OutputReader to
TApplication, permitting a different encoding than UTF-8.
* 'java -cp jexer.jar jexer.demos.Demo4' . This demonstrates hidden
windows and a custom TDesktop.
2017-08-07 17:36:42 -06:00
* 'java -cp jexer.jar jexer.demos.Demo5' . This demonstrates two
demo applications using different fonts in the same Swing frame.
2019-02-18 10:45:25 -07:00
* 'java -cp jexer.jar jexer.demos.Demo6' . This demonstrates two
2019-03-08 19:25:38 -07:00
applications performing I/O across three screens: an Xterm screen
2019-02-18 10:45:25 -07:00
and Swing screen, monitored from a third Swing screen.
2017-08-07 17:36:42 -06:00
2019-08-17 19:34:41 -06:00
* 'java -cp jexer.jar jexer.demos.Demo7' . This demonstrates the
BoxLayoutManager, achieving a similar result as the
javax.swing.BoxLayout apidocs example.
2015-04-02 07:19:13 -06:00
More Screenshots
----------------
2019-08-24 08:11:02 -06:00
Jexer can be run inside its own terminal window, with support for all
of its features including images and mouse, and more terminals:
2019-08-04 13:57:38 -06:00
![Yo Dawg...](/screenshots/jexer_sixel_in_sixel.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.")
2015-04-02 07:19:13 -06:00
2019-08-24 08:11:02 -06:00
Sixel output uses a single palette which works OK for a variety of
real-world images:
2019-02-14 08:26:30 -07:00
![Sixel Pictures Of Cliffs Of Moher And Buoy](/screenshots/sixel_images.png?raw=true "Sixel Pictures Of Cliffs Of Moher And Buoy")
2019-08-24 08:11:02 -06:00
The color wheel with that palette is shown below:
2019-02-14 08:26:30 -07:00
![Sixel Color Wheel](/screenshots/sixel_color_wheel.png?raw=true "Sixel Color Wheel")
2021-12-29 12:40:37 -07:00
There is now support for rendering the text underneath images
2021-12-22 07:51:19 -07:00
(jexer.ECMA48.imagesOverText and jexer.Swing.imagesOverText). This is
2021-12-29 12:40:37 -07:00
readily visible in terminal windows with sixel and PNG images. (If
you like this, then you need to go check out
2021-12-22 07:41:11 -07:00
[notcurses](https://github.com/dankamongmen/notcurses) poste haste.)
2021-12-29 12:40:37 -07:00
![PNG with transparency over text](/screenshots/for_nick.png?raw=true "PNG with transparency over text")
2019-03-08 19:25:38 -07:00
2021-12-29 12:40:37 -07:00
On the ECMA48 backend the internal font is used for rendering if
2021-12-24 14:47:13 -07:00
jexer.ECMA48.imagesOverText=true because terminals are extremely
2021-12-29 12:40:37 -07:00
finicky when putting text over sixel images, and this was the most
2021-12-31 09:02:07 -07:00
simple way to get something going. The default is
jexer.ECMA48.imagesOverText=false; in this mode images that would
overlap text in the same cell are rendered against the (assumed)
background color, omitting the text glyph. Here is an example of
multihead, and the xterm windows on the right is covering up
partially-obscured text cells, and it is still quite usable:
2021-12-22 07:41:11 -07:00
![Trans Heart Multihead](/screenshots/overlapping_multihead.png?raw=true "Trans Heart Multihead")
2021-12-24 14:47:13 -07:00
2019-02-26 06:38:16 -07:00
Terminal Support
----------------
2019-03-08 19:25:38 -07:00
The table below lists terminals tested against Jexer's Xterm backend:
2019-02-26 06:38:16 -07:00
| Terminal | Environment | Mouse Click | Mouse Cursor | Images |
| -------------- | ------------------ | ----------- | ------------ | ------ |
| xterm | X11 | yes | yes | yes |
2019-08-24 08:11:02 -06:00
| jexer | CLI, X11, Windows | yes | yes | yes |
2020-06-22 10:12:30 -06:00
| mintty | Windows | yes | yes | yes |
2019-08-05 06:51:56 -06:00
| mlterm | X11 | yes | yes | yes |
2019-09-03 11:55:10 -06:00
| RLogin | Windows | yes | yes | yes |
| alacritty(3b) | X11 | yes | yes | yes |
| contour(3) | X11 | yes | yes | yes |
| foot(3) | Wayland | yes | yes | yes |
2021-06-19 11:27:59 -06:00
| wezterm | X11, Windows | yes | yes | yes(7) |
2019-02-26 06:38:16 -07:00
| gnome-terminal | X11 | yes | yes | no |
2019-09-03 04:34:10 -06:00
| iTerm2 | Mac | yes | yes | no(5) |
| kitty(3) | X11 | yes | yes | no |
2020-06-20 04:20:07 -06:00
| lcxterm | CLI, Linux console | yes | yes | no |
2019-08-24 08:11:02 -06:00
| rxvt-unicode | X11 | yes | yes | no(2) |
2019-02-26 06:38:16 -07:00
| xfce4-terminal | X11 | yes | yes | no |
| Windows Terminal(6) | Windows | yes | yes | no |
2020-06-20 04:20:07 -06:00
| DomTerm(3) | Web | yes | no | yes |
2019-02-26 06:38:16 -07:00
| aminal(3) | X11 | yes | no | no |
| konsole | X11 | yes | no | no |
| yakuake | X11 | yes | no | no |
2019-02-26 17:37:55 -07:00
| screen | CLI | yes(1) | yes(1) | no(2) |
| tmux | CLI | yes(1) | yes(1) | no |
2019-02-26 06:38:16 -07:00
| putty | X11, Windows | yes | no | no(2) |
| qodem(3) | CLI, Linux console | yes | yes(4) | no |
2019-02-26 06:46:15 -07:00
| qodem-x11(3) | X11 | yes | no | no |
2019-08-04 14:05:08 -06:00
| yaft | Linux console (FB) | no | no | yes |
2020-06-09 08:43:35 -06:00
| Linux | Linux console | no | no | no(2) |
2020-06-20 11:25:46 -06:00
| MacTerm | Mac | no | no | no(2) |
2019-02-26 06:38:16 -07:00
2019-02-26 17:37:55 -07:00
1 - Requires mouse support from host terminal.
2019-02-26 06:38:16 -07:00
2 - Also fails to filter out sixel data, leaving garbage on screen.
3 - Latest in repository.
3b - Latest in repository, using graphics PR branch.
2019-02-26 06:38:16 -07:00
4 - Requires TERM=xterm-1003 before starting.
2019-09-03 04:34:10 -06:00
5 - Sixel images can crash terminal.
2019-08-27 20:07:31 -06:00
6 - Version 1.4.3243.0, on Windows 10.0.19041.1. Tested against
2019-09-01 12:34:18 -06:00
WSL-1 Debian instance.
2021-06-19 11:27:59 -06:00
7 - Both sixel and iTerm2 images.
2020-06-09 08:43:35 -06:00
2019-02-26 06:38:16 -07:00
2015-04-02 07:19:13 -06:00
2019-03-08 19:25:38 -07:00
See Also
--------
2015-03-22 06:56:11 -06:00
2020-05-21 02:01:26 -06:00
* [Xterm Window Manager](https://gitlab.com/klamonte/xtermwm) is a
text-based window manager. It has virtual desktops, tiled terminals
with draggable resizing, cascading terminal windows, and a plugin
system for adding functionality. Add LCXterm and one can have a
mouse-supporting X11-like text-based "GUI" on the raw Linux console.
2015-03-22 06:56:11 -06:00
2019-03-08 19:25:38 -07:00
* [LCXterm](https://lcxterm.sourceforge.io) is a curses-based terminal
emulator that allows one to use Jexer with full support on the raw
Linux console.
2019-03-08 19:25:38 -07:00
* [ptypipe](https://gitlab.com/klamonte/ptypipe) is a small C utility
that permits a Jexer TTerminalWindow to resize the running shell
when its window is resized.
2015-03-22 06:56:11 -06:00
2020-05-21 02:01:26 -06:00
* [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.
2015-03-22 06:56:11 -06:00
2015-03-08 04:57:55 -06:00
2019-03-08 19:25:38 -07:00
Acknowledgements
----------------
2019-02-14 08:26:30 -07:00
2019-03-08 19:25:38 -07:00
Jexer makes use of the Terminus TrueType font [made available
here](http://files.ax86.net/terminus-ttf/) .