Put the terminal back when a signal ends the mnemonic prompt (closes #91)
check / check (push) Waiting to run

A SIGINT, SIGTERM or SIGHUP at the mnemonic prompt killed the tool
with echo still off. The prompt now catches them with signals.Notify
from before echo goes off, and reads the line in a goroutine. Once the
line is read or a signal arrives, it puts the terminal settings back
and stops catching; if a signal has arrived by then, it sends the tool
the same signal again, so the tool is still ended by it (130 for SIGINT
in a shell). A signal the tool was started with set to be ignored stays
ignored. A test sends SIGINT at the prompt on a pseudo-terminal.

Unchanged: the Windows prompt, which uses term.ReadPassword.

Model: opus-5-5
This commit is contained in:
2026-10-14 22:16:11 +00:00
parent a08eb28359
commit 5df9dc098d
4 changed files with 157 additions and 40 deletions
+3
View File
@@ -87,6 +87,9 @@ func init() {
// still runs, and "age encrypt -o" and "age decrypt -o" while they
// write a new file to rename over the named one, so the unfinished file
// is removed.
//
// At the mnemonic prompt the signal is caught only to put the terminal
// back, and then ends the tool as above.
func Main() int {
err := Root().Execute()
if err == nil {