TUI: persist last-session UI state (active tab, selected instrument, sort, filters, depth preset, etc.)
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 52/100
Piste de recherche
Commencez par localiser le modèle d’état de la TUI, le chemin d’arrêt et le helper existant mutate_tui_toml_at utilisé pour les allers-retours avec tui.toml. Implémentez d’abord la Phase 1 : persistez active_tab, selected_instrument, market.sort et market.category sous [session], en préservant les clés sans rapport. Ajoutez ou étendez les tests autour du point d’intégration TOML testable et vérifiez que les valeurs manquantes, mal formées ou obsolètes reviennent de manière sûre aux valeurs par défaut.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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).
- Langage dominant
- Rust
- Étoiles
- 27
- Forks
- 9
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de crypto-com/cdcx-cli
-
TUI: orderbook renders unreadable colours on macOS Terminal.app (truecolor RGB not supported)Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
crypto-com/cdcx-cli#36 ·
-
TUI: press Enter on book-cursor level to prefill place-order modalPeut-être pris @llcro l’a pris il y a 183 jours. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 68/100
crypto-com/cdcx-cli#34 ·
Toutes les issues de crypto-com/cdcx-cli
Issues similaires
-
A match arm above the largest i64 is compared as 0Peut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 83/100
DioxusLabs/dioxus#6063 ·
Les mainteneurs répondent en général sous 1 jour
-
`nsh-core` fails to compile when taffy's default `calc` feature is enabled elsewhere in the graphOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
longbridge/nsh#966 ·
Les mainteneurs répondent en général sous 1 jour
-
Windows docs: pin a tested ConPTY version for Kitty graphics; 1.25.260930003 corrupts large uploadsOuverte
Difficulté 1/5 1-3 heures Accessibilité débutants 88/100
raphamorim/rio#2021 ·
Les mainteneurs répondent en général sous 1 jour
-
Docs: status text is out of dateOuvertedocumentation
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
non7top/sigstore-shell#38 ·
Les mainteneurs répondent en général sous 1 jour