Merge limoni-port: Limoni TUI port for extra utils #1

Merged
muse-lantern merged 7 commits from limoni-port into main 2026-10-16 16:24:24 +00:00
Member
No description provided.
Port res-code from Bubble Tea/lipgloss to Limoni
Some checks failed
build / build (push) Failing after 12s
17e48405a9
Proof-of-concept for residual/.agent#32, following the res-edit PoC (#30).
internal/code is now driven by a single limoni.Draw function; the tea.Model
plumbing (Init/Update/View, tea.Cmd, bubbletea/lipgloss glue) is gone while
business logic (tabs, terminal emulation, filepicker, sidebar, commands,
statusbar, help) is unchanged.

- model.go: pointer-receiver Draw(f, ev) bool, in-place mutation, layout
  helpers; menubar + command palette are Limoni-native
- keys.go/mouse.go: full dispatch rewrite on limoni.KeyEvent/limoni.MouseEvent
  (Ctrl chords only, never Alt; arrows=KeyUp/etc, F-keys via limoni/core/driver)
- render.go: Draw-based layout (menu/tabbar/editor/palette/prompt/status);
  sidebar.go/statusbar.go/filepicker.go draw directly onto the frame
- terminal.go: PTY reader goroutine -> channel -> limoni.Wakeup(), drained in
  Draw so the VT stays single-threaded
- tabbar.go removed (merged into render.go); cmd.go adapted to the new palette;
  palette.go/menubar.go are new Limoni-native chrome (shared lib/cmd/ui is
  still bubbletea-based and untouched)
- main.go: limoni.Run; TERM=linux/fbterm slow-terminal branch uses
  limoni.WithoutMouse()
- code_test.go: two limoni/uitest tests (open/type/quit, tab bar)

Amber palette preserved (#0d0a00 bg, #ffb000 fg, #7a5500 dim, #ff6600
accent, #1a1400 borders); no new colors.
Remove stale var _ = list.RenderListRow hack; RenderListRow was removed
from lib/tui/list in the shared-lib port (replaced by DrawListRow).
The list import is still used elsewhere in the file.
Bubble Tea program and lipgloss styles become a Limoni Draw app:
in-place model mutation, Draw returns false to quit. Keybindings
unchanged (digits/operators type, Enter evaluates, c clears,
Esc/Ctrl+C quits). Slow terminals use WithoutMouse.
Port res-sheets to Limoni
Some checks failed
build / build (push) Failing after 12s
f49eef1545
lib/sheets/tui: Bubble Tea model becomes a Limoni Draw app with in-place
mutation. The recalc tick (was tea.Tick) is now a goroutine + channel +
limoni.Wakeup(), drained in Draw. lipgloss styles become cell.Style
functions (reading live theme values); string rendering becomes direct
frame drawing (entry bar, grid, spans-based status bar, help overlay via
overlay.DrawHelpOverlay). All keybindings preserved, including F1 help
(driver.KeyF1) and Shift+arrow selection. Removed dead cellSelectionState.

cmd/res-sheets: tea.NewProgram becomes limoni.Run with WithoutMouse on
slow terminals.
Replace copy-pasted drawLabel/drawText/drawLabelW/drawBox/truncateCells
and sheets' span/drawSpan/drawSpans helpers with the shared draw
package. No visual changes.
res-code uses shared lib/ui.Palette
Some checks failed
build / build (push) Failing after 12s
22bb7d217f
Delete the 300-line palette.go copy; wire newCodePalette() to inject
res-code's chrome styles into the shared widget. Dual unified/neutral
theming preserved. Note: dropdown descriptions now render dim (the
original bubbletea behavior) instead of inheriting the row style.
res-code: use shared lib/cmd/ui.MenuBar
Some checks failed
build / build (push) Failing after 12s
0aa0b110fd
Replace the bespoke menubar.go with ui.NewMenuBar + SetStyles injecting
res-code's chrome styles (dual unified/neutral preserved, no marker).
render.go's DrawBar/DrawDropdown calls now hit the lib's exported
methods; dropdown overlay order unchanged. Verified pixel-identical
headlessly in both chrome modes before deleting menubar.go.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
residual/extra!1
No description provided.