dotnet/runtime

.net 8 Console.ReadKey : Better support for return Ctrl-Z, and setting SIGSTOP

Open

#91.709 geöffnet am 7. Sept. 2023

Auf GitHub ansehen
 (3 Kommentare) (0 Reaktionen) (0 zugewiesene Personen)C# (5.445 Forks)batch import
area-System.Consolehelp wanted

Repository-Metriken

Stars
 (17.886 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 12T 11h) (661 gemergte PRs in 30 T)

Beschreibung

When a full screen / raw terminal app like vim gets a ctrl-z, it reads it as a keypress, not a signal. This can be done with the right tcsetattr() settings:

t.c_cc[Libc.VSUSP] = 0; Will stop SIGTSTP from coming as a signal, but instead it comes in as \x1A key.

But more importantly, the app then gets a chance to restore the terminal to the 'main' shell screen, before suspending itself with a SIGSTOP (I think). Basically, gracefully set the terminal back before suspending.

In .net 8, I can override the SIGTSTP (Terminal Stop) signal, and set the console back to the 'main' terminal buffer by sending a "[?1049l", but I can't send myself a SIGSTOP.

At least, not without bringing in Mono.Posix, and that seems to have additional complications with AOT compilation. (Missing DLL)

Ideally, .net knows how to gracefully suspend a console app -- taking it away from and back to the alternate terminal screen -- without additional libraries.

Contributor Guide