mirror of
https://gitlab.com/AutumnMeowMeow/jexer
synced 2024-09-19 11:50:19 -06:00
cleanup
This commit is contained in:
parent
a69ed767c9
commit
4c46ea176c
2 changed files with 0 additions and 443 deletions
122
docs/TODO.md
122
docs/TODO.md
|
@ -1,122 +0,0 @@
|
|||
Jexer TODO List
|
||||
===============
|
||||
|
||||
|
||||
Roadmap
|
||||
-------
|
||||
|
||||
0.0.6
|
||||
|
||||
- TEditor
|
||||
- Horizontal scrollbar integration
|
||||
- True tokenization and syntax highlighting: Java, C, Clojure, XML
|
||||
- Carat notation for control characters
|
||||
- Tab character support
|
||||
- Cut/copy/paste
|
||||
- Performance: behave smoothly on 100MB text files
|
||||
|
||||
0.0.7
|
||||
|
||||
- Finish up multiscreen support:
|
||||
- cmAbort to cmScreenDisconnected
|
||||
- cmScreenConnected
|
||||
- Handle screen resizes
|
||||
|
||||
- TEditor
|
||||
- Word wrap
|
||||
- Performance: behave smoothly on 1GB text files
|
||||
|
||||
- Additional main color themes:
|
||||
- Dark / L33t
|
||||
- Green / NoReallyElite
|
||||
- Red/brown
|
||||
- Monochrome
|
||||
- OMGPonies
|
||||
|
||||
0.0.8
|
||||
|
||||
- THelpWindow
|
||||
- TEditor + clickable links
|
||||
- Index
|
||||
|
||||
- TEditor
|
||||
- Expose API:
|
||||
- Cursor movement
|
||||
- Movement within document
|
||||
- Cut/copy/paste
|
||||
|
||||
0.0.9
|
||||
|
||||
- TEditor:
|
||||
- Undo / Redo support
|
||||
|
||||
0.1.0: LET'S GET PRETTY
|
||||
|
||||
- TChart:
|
||||
- Bar chart
|
||||
- XY chart
|
||||
- Time series chart
|
||||
|
||||
0.1.1: BETA RELEASE and BUG HUNT
|
||||
|
||||
- Verify vttest in multiple tterminals.
|
||||
|
||||
0.2.0:
|
||||
|
||||
- Drag and drop
|
||||
- TEditor
|
||||
- TField
|
||||
- TText
|
||||
- TTerminal
|
||||
- TComboBox
|
||||
|
||||
1.0.0
|
||||
|
||||
- Publish to the whole wide world
|
||||
|
||||
|
||||
1.1.0 Wishlist
|
||||
--------------
|
||||
|
||||
- Screen
|
||||
- Allow complex characters in putCharXY() and detect them in putStringXY().
|
||||
|
||||
|
||||
|
||||
Regression Checklist
|
||||
--------------------
|
||||
|
||||
TTerminal
|
||||
No hang when closing, whether or not script is running
|
||||
No dead script children lying around
|
||||
vttest passing
|
||||
|
||||
|
||||
|
||||
Release Checklist √
|
||||
-------------------
|
||||
|
||||
Eliminate all Eclipse warnings
|
||||
|
||||
Fix all marked TODOs in code
|
||||
|
||||
Eliminate DEBUG, System.err prints
|
||||
|
||||
Update written by date to current year:
|
||||
All code headers
|
||||
VERSION
|
||||
|
||||
Tag gitlab
|
||||
|
||||
Upload to SF
|
||||
|
||||
Upload to sonatype
|
||||
|
||||
|
||||
Brainstorm Wishlist
|
||||
-------------------
|
||||
|
||||
|
||||
|
||||
Bugs Noted In Other Programs
|
||||
----------------------------
|
321
docs/worklog.md
321
docs/worklog.md
|
@ -1,321 +0,0 @@
|
|||
Jexer Work Log
|
||||
==============
|
||||
|
||||
October 21, 2018
|
||||
|
||||
All future work for this project has been moved to GitLab. GitHub
|
||||
will remain up for a few months longer, until the next release comes
|
||||
out.
|
||||
|
||||
September 18, 2018
|
||||
|
||||
Collecting up a few bug fixes involving race conditions: message box
|
||||
(and input box), TimeoutInputStream, window close. Will get these
|
||||
uploaded to GitHub in a little while.
|
||||
|
||||
July 13, 2018
|
||||
|
||||
This project isn't dead, I swear!
|
||||
|
||||
My meatspace life has been very crazy busy. But I do hope to be back
|
||||
to work on this in another couple months.
|
||||
|
||||
December 15, 2017
|
||||
|
||||
We now have 24-bit RGB colors working with Swing backend.
|
||||
EMCA48Terminal isn't happy though, let's try to fix that... still no
|
||||
dice. So RGB is there for ECMA48 backend, but it sometimes flickers
|
||||
or disappears. I'm not sure yet where the fault lies. Ah, found it!
|
||||
Cell.isBlank() wasn't checking RGB.
|
||||
|
||||
Well, I do say it is rather pretty now. Let's get this committed and
|
||||
uploaded.
|
||||
|
||||
December 14, 2017
|
||||
|
||||
TComboBox is stubbed in, and it was quite simple: just a TField and
|
||||
TList, and a teeny bit of glue. Along the way I renamed TCheckbox to
|
||||
TCheckBox, which was almost more work than TComboBox. Heh. Things
|
||||
are starting to come together indeed.
|
||||
|
||||
TSpinner is in. Now working on TCalendar... ...and TCalendar is in!
|
||||
|
||||
December 13, 2017
|
||||
|
||||
A user noticed that the example code given in the README.md caused the
|
||||
main window to freeze when clicking close. Turns out that was due to
|
||||
the addWindow(new TWindow(...)) line, which led to TWindow appearing
|
||||
in TApplication's window list twice. Fixed the README, and then made
|
||||
TApplication.addWindow a package private function plus a check to
|
||||
ensure it isn't added twice.
|
||||
|
||||
On the home front, my main box is now a Fedora 26 running Plasma
|
||||
desktop. That ate a few weekends getting used to. Current-era Linux
|
||||
is pretty nice, systemd so far (cross fingers) isn't creating any real
|
||||
problems, audio and wifi worked out of the box (thanks to Intel
|
||||
chipsets), and I can finally have all of my books and references on
|
||||
the same box as dev. So woohoo!
|
||||
|
||||
SwingTerminal is getting the insets wrong, which is a bit aggravating.
|
||||
So let's add adjustable insets in SwingComponent with a default
|
||||
2-pixel border around the whole thing, which I can tweak for my
|
||||
laptop. Done!
|
||||
|
||||
Alright, so where are we? Well, I will have some time in the evenings
|
||||
over the next couple weeks to put into projects. This one will get a
|
||||
little bit of love, probably a new widget or two; Qodem might get
|
||||
libssh2 + mdebtls support in Windows if those aren't too involved;
|
||||
Jermit will get a little more push towards a Kermit implementation.
|
||||
|
||||
October 17, 2017
|
||||
|
||||
I finally gave up the ghost on using gcj as the default compiler due
|
||||
to its awesome unused imports messages, and learned how to get PMD to
|
||||
do that job. Which promptly created 1000+ warning messages related to
|
||||
class item order (variables, constructors, methods), nested ifs,
|
||||
useless checks, and so on. So now we go on a code sweep to fix those,
|
||||
and along the way set a new class template. Since this is so large
|
||||
and invasive, I will bite the bullet now and get it done before the
|
||||
next release which will get it out on Maven finally.
|
||||
|
||||
August 16, 2017
|
||||
|
||||
Holy balls this has gotten so much faster! It is FINALLY visibly
|
||||
identical in speed to the original d-tui: on xterm it is glass
|
||||
smooth. CPU load is about +/- 10%, idling around 5%.
|
||||
|
||||
I had to dramatically rework the event processing order, but now it
|
||||
makes much more sense. TApplication.run()'s sole job is to listen for
|
||||
backend I/O, push it into drainEventQueue, and wake up the consumer
|
||||
thread. The consumer thread's run() has the job of dealing with the
|
||||
event, AND THEN calling doIdles and updating the screen. That was the
|
||||
big breakthrough: why bother having main thread do screen updates? It
|
||||
just leads to contention everywhere as it tries to tell the consumer
|
||||
thread to lay off its data structures, when in reality the consumer
|
||||
thread should have been the real owner of those structures in the
|
||||
first place! This was mainly an artifact of the d-tui fiber threading
|
||||
design.
|
||||
|
||||
So now we have nice flow of events:
|
||||
|
||||
* I/O enters the backend, backend wakes up main thread.
|
||||
|
||||
* Main thread grabs events, wakes up consumer thread.
|
||||
|
||||
* Consumer thread does work, updates screen.
|
||||
|
||||
* Anyone can call doRepaint() to get a screen update shortly
|
||||
thereafter.
|
||||
|
||||
* Same flow for TTerminalWindow: ECMA48 gets remote I/O, calls back
|
||||
into TTerminalWindow, which then calls doRepaint(). So in this case
|
||||
we have a completely external thread asking for a screen update, and
|
||||
it is working.
|
||||
|
||||
Along the way I also eliminated the Screen.dirty flag and cut out
|
||||
calls to CellAttribute checks. Overall we now have about 80% less CPU
|
||||
being burned and way less latency. Both HPROF samples and times puts
|
||||
my code at roughly 5% of the total, all the rest is the
|
||||
sleeping/locking infrastructure.
|
||||
|
||||
August 15, 2017
|
||||
|
||||
I cut 0.0.5 just now, and also applied for a Sonatype repository.
|
||||
It was a reasonable spot: TEditor was working albeit buggy, and a bug
|
||||
had just come in on the main TApplication run loop. So we are about
|
||||
to embark upon some performance work again, it's been probably version
|
||||
0.0.2 or so since the last cycle.
|
||||
|
||||
Code size: 40446 lines.
|
||||
|
||||
Now switching head to 0.0.6 and taking a small break.
|
||||
|
||||
August 14, 2017
|
||||
|
||||
TEditor is basically done. Mouse movement, keyboard movement,
|
||||
backspace / delete / enter / etc. are all in. Things are starting to
|
||||
look pretty good.
|
||||
|
||||
I'm going to prep for a final cut and release tag tomorrow or the next
|
||||
evening. I need to take a break and get some meatspace life dealt
|
||||
with.
|
||||
|
||||
August 12, 2017
|
||||
|
||||
TEditor is stubbed in about 50% complete now. I have a Highlighter
|
||||
class that provides different colors based on Word text values, but it
|
||||
is a lot too simple to do true syntax highlighting. I am noodling on
|
||||
the right design that would let TEditor be both a programmer's editor
|
||||
(so Highlighter needs to have state and do a lexical scan) and a word
|
||||
processor (where Word needs to tokenize on whitespace). I estimate
|
||||
probably a good 2-4 weeks left to get the editor behavior where I want
|
||||
it, and then after that will be the 0.0.5 release.
|
||||
|
||||
Finding more minor paper cuts and fixing them: the mouse cursor being
|
||||
ahead of a window drag event, SwingTerminal resetting blink on new
|
||||
input, prevent TWindow from resizing down into the status bar.
|
||||
|
||||
August 8, 2017
|
||||
|
||||
Multiscreen is looking really cool! Demo6 now brings up three
|
||||
screens, including one that is inside a TWindow of a different
|
||||
application.
|
||||
|
||||
August 7, 2017
|
||||
|
||||
Had trouble sleeping, what with a bunch of imaginative thoughts for
|
||||
this release. jexer.backend will be the ultimate destination for
|
||||
jexer.session and most of jexer.io. TerminalReader will be the
|
||||
interface for keyboard and mouse events. cmScreenConnected and
|
||||
cmScreenDisconnected will be new events to represent a screen
|
||||
appearing/disappearing, and MultiBackend will be a new backend
|
||||
multiplexer that goes full XRandR. Several new demos demonstrating
|
||||
multi-screen support will be coming along.
|
||||
|
||||
August 6, 2017
|
||||
|
||||
Time to clean up more API, particularly between Backend and Screen.
|
||||
Both of these will be interfaces soon, so that one could easily
|
||||
subclass JComponent and implement both Screen and Backend. The
|
||||
original code evolved out of Qodem, where screen.c and input.c were
|
||||
two different things leading to ECMA48Screen and ECMA48Terminal, but
|
||||
now there is really no need to keep them separate. It also
|
||||
complicates the constructors, as these are basically friend classes
|
||||
that have used package private access to get around their artificial
|
||||
separation.
|
||||
|
||||
When I get this done it should be a lot easier to do any of:
|
||||
|
||||
* Pass a JFrame or JComponent to SwingBackend and have it add itself,
|
||||
like any other Swing widget.
|
||||
|
||||
* Construct a SwingBackend and add it to any regular JComponent.
|
||||
|
||||
* Have multiple TApplications running inside the same Swing
|
||||
application, including having actions affect each other. (Will also
|
||||
need to ensure that TWidgets/TWindows are not in different
|
||||
TApplication collections.)
|
||||
|
||||
* Build a Backend/Screen multiplexer, so that one could have a ECMA48
|
||||
TApplication listening on a port and a local Swing monitor for it.
|
||||
|
||||
* Build a Backend/Screen manager, so that one could have multiple
|
||||
ECMA48 screens acting as a single large screen (e.g. XRandR).
|
||||
|
||||
Now I need to decide which package will collect Backend, SessionInfo,
|
||||
and Screen. jexer.io has some java.io stuff, so it stays anyway.
|
||||
|
||||
July 28, 2017
|
||||
|
||||
Got very busy with my meatspace life, now getting a chance to come
|
||||
back around.
|
||||
|
||||
I gave up on TEditor knowing about graphemes, instead pulling back to
|
||||
simple Cells. This will be better anyway in the long run, as getting
|
||||
grapheme support in Screen someday will also get it for me in TEditor
|
||||
for free. But it does mean that TEditor will chew through much more
|
||||
RAM than it needs to for a text file. Performance optimization will
|
||||
come someday. But this means I can also go back to gcj, because I
|
||||
really like its warnings about unused imports.
|
||||
|
||||
I've got a POM stubbed in, and created an account over at sonatype.
|
||||
If it isn't too hard, I will try to get 0.0.5 released into the maven
|
||||
universe. But that is still a bit away, I need TEditor running with
|
||||
syntax highlighting first.
|
||||
|
||||
July 17, 2017
|
||||
|
||||
Focus-follows-mouse is in, as is NOCLOSEBOX.
|
||||
|
||||
July 15, 2017
|
||||
|
||||
I think I have cleaned up most of the window show/hide/activate mess
|
||||
in TApplication. Demo4 has some cool interactions between a
|
||||
background TDesktop and several foreground TWindows, which helped
|
||||
expose bugs.
|
||||
|
||||
July 9, 2017
|
||||
|
||||
While working on TWindow.hide/show I decided that I am sick of
|
||||
TApplication's active window handling. TApplication makes lots of
|
||||
assumptions, things are too fragile between modal and not, and one
|
||||
cannot easily say window.activate(). So I will also be changing that
|
||||
too. ... Code is still a bit of a mess, but hooks are in place at
|
||||
least for show/hide/activate.
|
||||
|
||||
July 8, 2017
|
||||
|
||||
Qodem 1.0.0 released last month, I had a vacation, and a Jexer user
|
||||
(nikiroo) started opening up pull requests. :-) So back unto the
|
||||
breach we go!
|
||||
|
||||
TButton is now animated so that there is some feedback when selected
|
||||
via keyboard. StringJustifier was written which permits TText's to
|
||||
have left/centered/right and full justification. TDesktop is now in
|
||||
too which can act as a permanent max-sized window without borders.
|
||||
|
||||
Next up is Viewport, an interface to collect scrollbar API, and then a
|
||||
cleaner API for scrollable widgets and windows. After that is more
|
||||
window API: hide/show/maximize/restore, and unclosable windows. I am
|
||||
cherry-picking bits from @nikiroo's PRs, which will likely break them
|
||||
before it fixes things, but I will find some way to get Niki credited
|
||||
with those pieces.
|
||||
|
||||
March 21, 2017
|
||||
|
||||
I am starting to gear up for making Jexer a serious project now. I've
|
||||
created its SourceForge project, linked it back to GitHub, have most
|
||||
of its web page set up (looks like Qodem's), and released 0.0.4. And
|
||||
then this morning saw an out-of-bounds exception if you kill the main
|
||||
demo window. Glad I marked it Alpha on SourceForge...
|
||||
|
||||
Yesterday I was digging around the other Turbo Vision derived projects
|
||||
while populating the about page, and made a sad/happy-ish realization:
|
||||
Embarcadero could probably get all of them shut down if it really
|
||||
wanted to, including Free Vision. I uncovered some hidden history in
|
||||
Free Vision, such that it appears that Graphics Vision had some
|
||||
licensed Borland code in it, so there might be enough mud in the air
|
||||
that Free Vision could be shut down the same way RHTVision was. But
|
||||
even worse is the SCOTUS ruling on Oracle vs Google: if APIs are
|
||||
copyrighted (regardless of their thoughts on fair use), then any
|
||||
software that matches the API of a proprietary project might find
|
||||
itself subject to an infringement case. So that too could shut down
|
||||
the other API-compatible TV clones.
|
||||
|
||||
Fortunately, Jexer (and D-TUI) is completely new, and has no API
|
||||
compatibility with Turbo Vision. Jexer could be a new root to a whole
|
||||
generation of TUI applications.
|
||||
|
||||
March 18, 2017
|
||||
|
||||
TStatusBar is working, as is "smart" window placement. Overall this
|
||||
is looking quite nice. Found a lot of other small paper cut items and
|
||||
fixed them. It looks absolutely gorgeous on Mac now.
|
||||
|
||||
Tomorrow I will get to the public wifi and get this uploaded.
|
||||
|
||||
Time to call this 0.0.4 now though. We are up to 32,123 lines of
|
||||
code.
|
||||
|
||||
March 17, 2017
|
||||
|
||||
Jexer is coming back to active development status. I had a lot of
|
||||
other projects ahead of it in the queue, mostly Qodem but also Jermit
|
||||
and of course lots of actual day job work keeping me too tired for
|
||||
afterhours stuff. But here we are now, and I want to get Jexer to its
|
||||
1.0.0 release before the end of 2018. After that it will be a
|
||||
critical bit of function for IWP and NIB, if I ever get those going.
|
||||
I need to re-organize the demo app a bit so that it fits within 80x25,
|
||||
and then get to TStatusBar.
|
||||
|
||||
A status bar will be an optional part of TWindow. If it exists, then
|
||||
it will be drawn last by TApplication and get events routed to it from
|
||||
TWindow's event handlers. This will have the nice effect that the
|
||||
status bar can change depending on which window is active, without any
|
||||
real extra work on TApplication's part.
|
||||
|
||||
Putting together a proper TODO now, with release and regression
|
||||
checklists. I think I will see if jexer is available at SourceForge,
|
||||
and if so grab it. Perhaps I can put together some good Turbo Vision
|
||||
resources too. At the very least direct people to the Borland-derived
|
||||
C++ releases and Free Vision.
|
Loading…
Reference in a new issue