jexer/README.md

249 lines
9.5 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-24 14:47:13 -07:00
Experimental support for pixel-based operations is now present in git
head. 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:
![Xterm SGR-Pixel Mouse](/screenshots/xterm_pixel_mouse.gif?raw=true "Xterm SGR-Pixel Mouse")
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-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-24 14:47:13 -07:00
simple way to get something going. Here is an example of multihead,
and the xterm windows on the right is using a rendered font that is
clearly different from the terminal's font:
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/) .