Make TTY raw-mode changes fallible and restore terminal state
Maintainer antworten meist innerhalb von 1 Tag
@lukewilliamboswell arbeitet bereits daran.
Seit 12.10.2026.
- #515 von @lukewilliamboswell — gemerged
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 35/100
- Issue-Typ
- Bug
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Ruhig
- Tech-Stack
- rust
- Bereich
- cli, operating-systems
Rechercherichtung
Beginne mit den TTY-Hostfunktionen in src/lib.rs:1999-2007 und den öffentlichen Typen in platform/Tty.roc:13-18 und untersuche anschließend den roc_main-Aufruf in src/lib.rs:2112-2124. Lege Besitz- und Fehlerverhalten für wiederholte Raw-Mode-Operationen fest und verwende PTY-Integrationstests, um die Wiederherstellung nach normalen Rückgaben, Anwendungsfehlern und dem unterstützten Roc-crash/expect-Pfad zu überprüfen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Context
Both TTY host functions discard the result returned by crossterm:
src/lib.rs:1999-2007
The public functions are therefore typed as infallible in platform/Tty.roc:13-18, even when stdin is not a terminal or the OS rejects the operation.
The host also does not visibly track whether it enabled raw mode or guarantee restoration when the Roc application returns an error or crashes. #69 previously tracked panic restoration and was closed, but the current implementation still ignores errors and calls roc_main without a raw-mode cleanup guard at src/lib.rs:2112-2124.
Suggested direction
- Return a typed error from enable/disable operations.
- Track raw-mode ownership so the host only restores a mode it enabled.
- Install cleanup around
roc_mainfor normal return and Roc crash/expect paths. - Document what can and cannot be guaranteed for external termination signals.
A small RAII guard in the Rust host may make the normal and unwinding paths easier to reason about, although the release profile uses panic = "abort" and therefore also needs explicit crash-handler consideration.
Acceptance criteria
- Enabling or disabling raw mode reports OS errors to Roc.
- Raw mode is restored after normal success and application-level error returns.
- Raw mode restoration is tested for the Roc crash/expect path supported by the host.
- Repeated enable/disable calls have defined behavior.
- PTY integration tests verify the terminal state after the child exits.
- Vorherrschende Sprache
- Rust
- Sterne
- 122
- Forks
- 47
- Ø Merge
- 12 Std. 20 Min.
- Gemergte PRs (30 T.)
- 18
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus roc-lang/basic-cli
-
Unix socket supportOffen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 45/100
roc-lang/basic-cli#500 · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
roc-lang/basic-cli#482 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 45/100
roc-lang/basic-cli#455 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 32/100
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in roc-lang/basic-cli
Ähnliche Issues
-
The book has a Nix install section that chelis.ch lacks, and it names two of the three systemsOffenarea:ecosystem documentation
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Chelis-Lang/chelis#3866 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
metasequoiaime/msime#8620 ·
Maintainer antworten meist innerhalb von 1 Tag
-
agent-detection macos p2 triaged
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug documentation sev-0
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
Maintainer antworten meist innerhalb von 1 Tag