This project is archived. Its data is read-only. This project is read-only.
Spinoff: text-only Jexer-based new project without java.desktop
Background ---------- Carlos Rafael Ramirez (@crramirez) emailed me describing his recent work in making a AWT/Swing-less (java.desktop-less) version of Jexer 1.7.x that can readily be compiled into a native executable. It is a very interesting idea! https://github.com/crramirez/jexer/pull/1 . While I won't be able to use this exact PR in Jexer mainline for the reasons listed below, I *do* want to support this capability in a meaningful way because I see a lot of great ways to generate ideas and applications that cross-pollinate between Jexer mainline and a java.desktop-less TUI library. :) Alright, so those reasons: * Jexer mainline is going to keep digging into pixel-based operations, because it's just so fun. I want to keep the door open to someday implement an X11 server, run AWT/Swing-within-xterm, or whatever. * My own applications on Windows need the Swing backend, and testing out features even on Linux is sometimes way easier in the Swing backend. * It looks like this PR was AI/LLM generated, and there is enough "legal stuff" still ongoing on about AI/LLM that I don't want there to be any question around copyright/legal/whatever on either Jexer mainline or a java.desktop-less spinoff. * The PR **Key Changes** discussion hits the major stuff, but missed one detail I think is important: for a java.desktop-less Jexer, the XTVERSION response from TTerminal/ECMA48 really should *not* be Jexer because others use that to fingerprint the terminal and would assume it has bitmap image support. **OK, with that out of the way, I really appreciate the key *answer* that Carlos' work provides: if we can get AWT/Swing out of the execution path, then GraalVM AOT binaries will work *now*, rather than in some uncertain future when GraalVM finally supports AWT/Swing fully.** That's a big win worth going after. Let's Do This ------------- So let's do this. :smile: The timing is actually about perfect for a "cruft-less" Jexer-derived-but-*new*-library, much like [lcxterm](https://codeberg.org/AutumnMeowMeow/lcxterm)'s relationship to [qodem](https://gitlab.com/AutumnMeowMeow/qodem). So starting from today's git head, I want to end up here: * A TUI library that is lean-and-mean without AWT/Swing -- not even via reflection -- but still pretty with gradients. * The code dedicated to the public domain, with a CC0 fallback license. Derivatives won't even need to keep the source headers intact if they don't want to, it's fine. Or if someone wants to take theirs to GPL/LGPL/Apache/whatever, they can do so. (Plus it would be one less potential issue for AI/LLM tools in the future: even if those tools are found to be infringing on someone's copyright somewhere, there will be nothing *here* for them to infringe upon because it would be public domain.) * A fresh git history. * Maven-friendly and IDE-friendly. (I don't know Maven or the IDEs honestly, and I know Jexer mainline has suffered a bit for that.) That may mean renaming the "jexer" top-level package i.e. "import a.b.c.TApplication;". * Ideally, a repo owned by someone else on whatever hosting platform they prefer. I would like Jexer mainline www/wiki/README.md to have pointers to it, but want it free to really evolve on its own. As much as I *love* the bitmap images stuff, it's a niche that prevents me from being the right person or leader to take Jexer into places like tui-rs / Ink or wherever the new hotness in TUIs / UIs is going. Action Items ------------ - [x] Hard-fork Jexer git head into a new "thing". I'll need a new top-level project and package name. - [x] Pull the wiki contents into the new code repo. - [x] Change the XTVERSION response to the new name and version. - [x] Relicense *all* of the codebase as public domain / CC0. - [x] Update README.md, build.xml, pom.xml, TApplication, etc. to new name. - [x] Replace jexer.* System property references with new prefix. - [x] Commit that initial git repo, and tag it as v0.1. - [x] Begin removing pieces, with a commit at each major step: - [x] Tackboard - [x] SwingBackend/SwingTerminal/etc. / TScreenOptionsWindow - [x] Sixel decoder/encoders / MathUtils - [x] GlyphMaker / ColorEmojiGlyphMaker / UnicodeGlyphImage - [x] TImage / Animation / TButton image styles - [x] Cell.image / TMenu icons - [x] Remove remaining references to java.awt.Color (switch to int rgb). - [x] Fix any remaining blockers to GraalVM native image running. - [x] Tag this as v0.2. - [x] Update Jexer mainline to point to the new project. @crramirez, would you like to do the honor of naming this? :smiley: I want to put this in a place convenient for you: do you have a preferred Git hosting provider for the repository? I'd like to create the repo myself, put you on as maintainer/co-owner, and after the v0.2 tag transfer ownership to you. What do you think?
issue