TUI: persist last-session UI state (active tab, selected instrument, sort, filters, depth preset, etc.)
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 52/100
Direzione di ricerca
Inizia individuando il modello dello stato della TUI, il percorso di shutdown e l’helper esistente mutate_tui_toml_at utilizzato per i round trip di tui.toml. Implementa prima la Fase 1: persisti active_tab, selected_instrument, market.sort e market.category sotto [session], preservando le chiavi non correlate. Aggiungi o estendi i test attorno al punto di integrazione TOML verificabile e verifica che i valori mancanti, malformati o obsoleti ricadano in modo sicuro sui valori predefiniti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
The TUI currently forgets all in-session UI state on quit. Every relaunch drops you on Market tab / default sort / BTC_USDT selected / depth 50 / category Spot, regardless of where you were when you quit. For power users who live in the TUI across many short sessions, this is friction.
Add a best-effort state-restore layer that remembers the last session's UI state and restores it on launch.
What to persist
Navigation
- Active tab (Market / Portfolio / Orders / History / Watchlist / Positions).
- Selected instrument on Market / Watchlist / Positions (falls back gracefully if the instrument is no longer available).
Market tab
- Category filter (Spot / Perpetual / Futures / ...).
- Sort field + direction (Volume / Change / Price / Name, asc/desc).
- Search query? — probably NOT; search feels ephemeral. Up for debate.
- View mode: Table / Detail / Chart / Compare? — probably NOT; rehydrating straight into a Compare view is jarring. Up for debate.
- Timeframe (1m / 5m / ... / 1D).
- Book depth preset (10 / 50 / 150) — from #26.
- Heatmap on/off.
- Volume unit (USD / Notional).
- Split-view state (table + chart).
Help overlay
- Last shortcuts page viewed? — probably NOT; #30 explicitly resets to page 1 every open, and that's the right UX. This one is low-value.
Orders / History / Portfolio
- Sort field + direction on any tab that has sortable columns.
- History pagination position? — probably NOT; data moves forward between sessions, so "resume on page 3" is stale.
Compare view
- List of pinned instruments (if view_mode is persisted).
Where to persist
~/.config/cdcx/tui.toml — same file #23 (watchlist) and settings already round-trip. One new top-level [session] table:
[session]
active_tab = \"market\"
selected_instrument = \"ETH_USDT\"
volume_unit = \"usd\"
split_view = false
[session.market]
category = \"PERPETUAL_SWAP\"
sort_field = \"volume\"
sort_asc = false
timeframe = \"4h\"
book_depth = 50
heatmap = false
Reuse the mutate_tui_toml_at helper from #28 so unrelated keys (theme, tick_rate, watchlist, custom themes) are preserved.
When to persist
Option A — on every change: write on each mutation. Simple, but O(n) disk writes per session.
Option B — on quit only: single write in the shutdown path. Lower-friction, but any crash loses the session.
Option C — debounced (every ~5s if dirty): best of both. Adds complexity.
Recommendation: Option B to start. Fast, simple, one integration point. If we notice state loss from crashes later, upgrade to C.
Scope / sequencing
Land in small increments, each an independently-useful PR:
- Phase 1 (minimum useful): active_tab + selected_instrument + market.sort + market.category. Roughly half the annoyance, small diff.
- Phase 2: timeframe, book_depth, heatmap, volume_unit, split_view.
- Phase 3: sort state on Orders / Portfolio / Positions, compare-view instrument list.
Deliberately NOT in scope for the first cut: search query, help overlay page, history pagination, workflow modals, spotlight.
Non-goals
- Not a full settings-UI-exposed preference system. This is silent state capture; the user doesn't configure it.
- Not a per-profile state store (yet). One global
[session]block. Add per-profile later if someone hits the edge case. - Not a remote-sync system. Local file only.
Risk
- Stale instrument on restore: if
selected_instrumentwas delisted, fall back to index 0 of the filtered list. Don't panic, don't toast. - Schema evolution: treat
[session]as a purely additive, tolerant block. Missing keys → sensible defaults. Unknown keys → ignore. Malformed values → fall through to default and don't error the user. - File-size creep: negligible. Even with all phases, the
[session]block stays under a few hundred bytes.
Related
- #23 — established the
tui.tomlround-trip pattern +save_watchlist_attestable seam. - #26 —
book_depthpreset that would become persisted under[session.market]. - #30 — help overlay pagination (explicitly NOT persisted; called out here to avoid confusion).
- Lingua principale
- Rust
- Stelle
- 27
- Fork
- 9
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di crypto-com/cdcx-cli
-
TUI: orderbook renders unreadable colours on macOS Terminal.app (truecolor RGB not supported)Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
crypto-com/cdcx-cli#36 ·
-
TUI: press Enter on book-cursor level to prefill place-order modalForse già presa @llcro l’ha presa 183 giorni fa. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
crypto-com/cdcx-cli#34 ·
Tutte le issue di crypto-com/cdcx-cli
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
I maintainer di solito rispondono entro 1 giorno
-
`nsh-core` fails to compile when taffy's default `calc` feature is enabled elsewhere in the graphAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
longbridge/nsh#966 ·
I maintainer di solito rispondono entro 1 giorno
-
Windows docs: pin a tested ConPTY version for Kitty graphics; 1.25.260930003 corrupts large uploadsAperta
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
raphamorim/rio#2021 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
hydro-project/infinity#187 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
near/near-sdk-rs#1676 ·
I maintainer di solito rispondono entro 2 giorni