varabyte / kotter

A declarative, Kotlin-idiomatic API for writing dynamic console applications.
Apache License 2.0
568 stars 16 forks source link

Handle user updating the width of their window dynamically #34

Open bitspittle opened 3 years ago

bitspittle commented 3 years ago

This might not be possible. I can't seem to find ways to either

1) stop the terminal from autowrapping my lines 2) ask the terminal its width in a consistent manner 3) ask the terminal to tell me when it added a newline

There may be a way and it's probably worth leaving this bug open, but not necessarily as a 1.0 milestone. My experimentation with other dynamic CLIs is they suffer a similar fate.

bitspittle commented 3 years ago

Actually, the "$COLUMNS" variable in Linux seems to work. With seeing if this is standard-enough behavior that we can use it consistently.

bitspittle commented 3 years ago

It's still quite tricky to get the width. It's a shame either jline doesn't support this OR it does but I can't find it. (jline's terminal.getSize() doesn't update dynamically as you resize the window)

See also: https://stackoverflow.com/questions/1286461/can-i-find-the-console-width-with-java/18883172#18883172

bitspittle commented 3 years ago

Leaving the bug open because we still don't handle dynamic window resizing, and I'd like to think that's possible someday. But for now, at least we take initial window size into account, which is better than nothing, so I'm going to remove the 1.0 milestone from this bug.

bitspittle commented 1 year ago

I'm going to close this as dynamic window resizing just doesn't seem like something that consoles are good at.

bitspittle commented 1 year ago

Now that I have a bunch of K/N code, I'm actually going to reopen this and check one more time to make sure.

Really, what I need is an event that the column changed (or maybe I can poll this every frame).

I'm pretty sure I tried polling when using Jline, but I should try again now that I've got K/N solutions.