-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Conversation
7be152e
to
ca4d75b
Compare
- Lifetime of terminal attribute settings. Previously we were setting up the terminal's attributes (e.g. disabling echo) the first time the console was used, and leaving those settings for the duration of the process. This has the very bad effect of leaving such settings on the terminal while other code using that terminal runs. For example, if you launch a process with Process.Start and that process expects input, echo will still be disabled, and you won't be able to see the input. This commit significantly changes how we do these attributes. Instead of setting them and leaving them, we only set them while a read operation is in progress, reverting the settings immediately after. - Reapplication of terminal settings upon process resumption. If the program was suspended with ctrl-z, when it was later resumed, both terminal settings and the application mode settings previously applied were lost. With this commit, we now properly restore the application mode (which impacts how some keys, such as the arrows, are interpreted). And if a read was in progress, we also restore the terminal settings. - EOL. Typing ctrl-D is supposed to signal an end-of-line. Previously we weren't doing anything special for it. Now we look up the EOL characters in the terminal settings and act on them appropriately. - Console.Read. This method, like ReadLine, is supposed to block until Enter, but it was only blocking until the first byte was available. This commit fixes that. It also makes it respond appropriately to EOL, return -1. - Cursor position robustness. The protocol involved in getting the current cursor position involves writing an escape sequence to stdout and then reading a response that's written by the terminal to stdin. Since the user can also be providing stdin input concurrently, this can lead to some flakiness, and with the current implementation, if we were to miss some of the input that comes from the terminal, we could end up hanging, waiting indefinitely for that input to arrive. This commit adds a timeout so we'll only wait for a second on each read before giving up.
ca4d75b
to
2b0eab1
Compare
@stephentoub and testing! I'll run it through its paces today. |
Thanks. |
I've got a weird one. When running under straight PuTTY, with
This doesn't repro in a few cases so far: with Now, I might have missed some binaries to update. I replaced my published libraries with:
I built released versions of the two repos, and normally publish with 23826. This may have nothing to do with the patches, but thought I'd report while I debug. |
What's the stack trace from the strlen where it's seg faulting? |
Sorry, forgot to paste (I have to carefully edit these 😦)
|
Bumped the rest of the packages to 23829 so I don't think it's an incompatibility between slightly different code versions, but I can try to copy the rest of the assemblies over too (there's just a loooot of them), or build FX from the commit 23829 was built at. |
Silly mistake, easy fix. I'll push a fixed version when I'm back at my computer. |
Yay! I love when it's not me 😄 The other odd thing is that, within Tmux ( |
a6dece5
to
b9bc4f4
Compare
Fantastic, segmentation fault no longer repros. |
Fixed the cursor position outputs as well. @stephentoub You rock. I think this LGTM. Opening up other processes works just fine. Some oddities are still there, but are probably separate issues (like the up/down arrows changing to A/B after opening and closing, say, Vim). |
Speifically this, except home and end now work (and opening/closing Bash does not cause it, just Vim so far; can try others). I'll open another issue. |
Can you try again with the latest in this PR? |
Trying it out now. |
Sorry, got distracted. 933d187 fixed that issue 👍 I don't see anything else that needs fixing right now. |
Thanks for verifying. |
@pallavit, could you review this when you get a chance? |
@stephentoub Sorry for the delay. I will take a look at it today. |
FWIW, in our readline loop that does quite a bit between calls to |
Thanks, @andschwa 😄 |
LGTM |
Mm I should probably test on OS X. Didn't get a chance yesterday. Let me run it through for a final verification. |
Confirmed, everything is working as expected on my MacBook (Mavericks 10.11.3 both inside and outside of Tmux, with With debug versions, things ran slow enough that I observed the terminal echoing some characters that weren't caught by Thank you so much for your work Stephen. |
Thanks for checking, @andschwa. |
Multiple System.Console fixes
Multiple System.Console fixes Commit migrated from dotnet/corefx@ee23af7
cc: @pallavit, @ellismg, @andschwa, @janvorli
Fixes #5902
Relies on dotnet/coreclr#3409
@andschwa, I'd appreciate it if you could run this through a variety of your scenarios and verify it does what you hope.