jexer/README.md

240 lines
9.1 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
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-03-02 13:48:31 -07:00
<version>1.0.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-22 07:41:11 -07:00
There is experimental 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-22 07:41:11 -07:00
currently poorly optimized -- cells must check for transparency
frequently -- but it is very cool looking. (And if you like this,
then you need to go check out
[notcurses](https://github.com/dankamongmen/notcurses) poste haste.)
This is most visible in terminal windows with sixel and PNG images.
![Hello notcurses! 🤘](/screenshots/for_nick.png?raw=true "Hello notcurses! 🤘🙂")
2019-03-08 19:25:38 -07:00
2021-12-22 07:43:33 -07:00
Performance of transparent images-over-text is still _very_ bad on
multihead, and crashes lie in wait. (Also, on the ECMA48 backend the
internal font is used for rendering because terminals are extremely
finicky when putting text over sixel images and this was the most
simple way to get something going.) But hey:
2021-12-22 07:41:11 -07:00
![Trans Heart Multihead](/screenshots/overlapping_multihead.png?raw=true "Trans Heart Multihead")
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/) .