- All curses drawing on the main thread; stdin polled together with the
ZMQ sockets, Ctrl-C only sets a flag
- Output kept in a 2000-line buffer and redrawn from it, so resizes keep
the history; PgUp/PgDn and mouse wheel scroll it
- Messages without trailing newline continue the current line (status
table columns arrive as separate messages)
- Too-small terminal shows a warning instead of exiting
- Start without arguments shows a server selection menu
- Colors on the terminal default background; version 0.9.0
- Wrap addstr newlines in try/except blocks
- Prevents crash when writing to window boundary
- Info window has scrollok=False, so cursor can't move beyond bounds
- Detect KEY_RESIZE event in input thread
- Recreate windows with new dimensions on resize
- Redraw all content after resize
- Add minimum terminal size check (20x80)
- Handle both expansion and shrinking gracefully
- Track cursor position in UIManager.cursor_pos
- Restore cursor after print_message() and update_server_info()
- Sync cursor_pos between wait_stdin thread and manager
- Update server info panel every second for live timer display
- Timer now ticks continuously instead of only on game events
- Add match_time_last_sync timestamp to track server updates
- Update timestamp in parser when TIME events received
- Calculate elapsed time in UI for live countdown
- Timer now ticks in real-time between server events
- Replace 6 bare except: with except curses.error:
- Remove inline import logging, use module-level logger
- Improves safety by not catching KeyboardInterrupt/SystemExit
- Add pre-compiled regex pattern for color codes
- Add SPECIAL_CHAR constant (chr(25)) for clarity
- Move time import to module level in parser
- Centralize color code stripping via strip_color_codes()
- Make qlpycon.bash fully configurable (workdir, serverip)
- Add validation checks for workdir and venv
- Fix port numbers in help text (28960-28969)