- Notifications
You must be signed in to change notification settings - Fork8.9k
make filling chars (and, thus, erase line/char) unset wrap#2831
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
miniksa left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Looks good to me. Especially considering we walked through it together. :D
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
DHowett-MSFT left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
For tests!
zadjii-msft left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I want tests too so I'm just going to comment
DHowett-MSFT left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
@miniksa mind looking at these new tests? They seem sound to me.
miniksa commentedSep 26, 2019
Sure. |
miniksa left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I'm good with the tests, but a few things made me cringe a bit.
Please at least fix the VERIFY_WIN32_BOOL_SUCCEEDED and the fill-allocator for the std::wstring.
If you want to 'Won't Fix' using the string comparators instead of character by character, that's fine.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
DHowett-MSFT commentedSep 30, 2019
/azp run |
| Azure Pipelines successfully started running 1 pipeline(s). |
ghost commentedSep 30, 2019
Hello@DHowett-MSFT! Because this pull request has the p.s. you can customize the way I help with merging this pull request, such as holding this pull request until a specific person approves. Simply @mention me ( |
EraseInLine calls `FillConsoleOutputCharacterW()`. In filling the row withchars, we were setting the wrap flag. We need to specifically not do this onANY _FILL_ operation. Now a fill operation UNSETS the wrap flag if we fill tothe end of the line.Originally, we had a boolean `setWrap` that would mean...- **true**: if writing to the end of the row, SET the wrap value to true- **false**: if writing to the end of the row, DON'T CHANGE the wrap valueNow we're making this bool a std::optional to allow for a ternary state. Thisallows for us to handle the following cases completely. Refer to the tablebelow:,- current wrap value| ,- are we filling the last cell in the row?| | ,- new wrap value| | | ,- comments|-- |-- |-- || 0 | 0 | 0 || 0 | 1 | 0 || 0 | 1 | 1 | THIS CASE WAS HANDLED CORRECTLY| 1 | 0 | 0 | THIS CASE WAS UNHANDLED| 1 | 0 | 1 || 1 | 1 | 1 |To handle that special case (1-0-0), we need to UNSET the wrap. So now, we have~setWrap~ `wrap` mean the following:- **true**: if writing to the end of the row, SET the wrap value to TRUE- **false**: if writing to the end of the row, SET the wrap value to FALSE- **nullopt**: leave the wrap value as it isCloses#1126
ghost commentedOct 4, 2019
🎉 Handy links: |
EraseInLine calls `FillConsoleOutputCharacterW()`. In filling the row withchars, we were setting the wrap flag. We need to specifically not do this onANY _FILL_ operation. Now a fill operation UNSETS the wrap flag if we fill tothe end of the line.Originally, we had a boolean `setWrap` that would mean...- **true**: if writing to the end of the row, SET the wrap value to true- **false**: if writing to the end of the row, DON'T CHANGE the wrap valueNow we're making this bool a std::optional to allow for a ternary state. Thisallows for us to handle the following cases completely. Refer to the tablebelow:,- current wrap value| ,- are we filling the last cell in the row?| | ,- new wrap value| | | ,- comments|-- |-- |-- || 0 | 0 | 0 || 0 | 1 | 0 || 0 | 1 | 1 | THIS CASE WAS HANDLED CORRECTLY| 1 | 0 | 0 | THIS CASE WAS UNHANDLED| 1 | 0 | 1 || 1 | 1 | 1 |To handle that special case (1-0-0), we need to UNSET the wrap. So now, we have~setWrap~ `wrap` mean the following:- **true**: if writing to the end of the row, SET the wrap value to TRUE- **false**: if writing to the end of the row, SET the wrap value to FALSE- **nullopt**: leave the wrap value as it isCloses#1126(cherry picked from commit4dd9f9c)
- Fix snapping to the cursor in "Terminal Scrolling" mode (GH-2705)fixesGH-1222 PSReadline calls SetConsoleCursorPosition on each character. We try to snap. However, we'd only ever do this with the visible viewport, the viewport defined by `SCREEN_INFORMATION::_viewport`. When there's a virtual viewport in Terminal Scrolling mode, we actually need to snap the virtual viewport, so that this behavior looks more regular.(cherry picked from commit6f4b98a)- Passthrough BEL in conpty (GH-2990)fixesGH-2952.(cherry picked from commit6831120)- make filling chars (and, thus, erase line/char) unset wrap (GH-2831)EraseInLine calls `FillConsoleOutputCharacterW()`. In filling the row withchars, we were setting the wrap flag. We need to specifically not do this onANY _FILL_ operation. Now a fill operation UNSETS the wrap flag if we fill tothe end of the line.Originally, we had a boolean `setWrap` that would mean...- **true**: if writing to the end of the row, SET the wrap value to true- **false**: if writing to the end of the row, DON'T CHANGE the wrap value,- current wrap value| ,- fill last cell?| | ,- new wrap value| | | ,- comments|-|-|-||1|0|0| THIS CASE WAS UNHANDLEDTo handle that special case (1-0-0), we need to UNSET the wrap. So now, we have~setWrap~ `wrap` mean the following:- **true**: if writing to the end of the row, SET the wrap value to TRUE- **false**: if writing to the end of the row, SET the wrap value to FALSE- **nullopt**: leave the wrap value as it isClosesGH-1126(cherry picked from commit4dd9f9c)- When reverse indexing, preserve RGB/256 attributes (GH-2987)(cherry picked from commit847d6b5)- do not allow CUU and CUD to move "across" margins. (GH-2996)If we're moving the cursor up, its vertical movement should be stoppedat the top margin.Similarly, this applies to moving down and the bottom margin.FixesGH-2929.(cherry picked from commit0ce08af)- Prevent the v1 propsheet from zeroing colors, causing black text on black background. (GH-2651)fixesGH-2319(cherry picked from commitb97db63)- Render the cursor state to VT (GH-2829)(cherry picked from commita9f3849)- Don't put NUL in the buffer in VT mode (GH-3015)(cherry picked from commita82d6b8)- Return to ground when we flush the last char (GH-2823)The InputStateMachineEngine was incorrectly not returning to the groundstate after flushing the last sequence. That means that something likealt+backspace would leave us in the Escape state, not the ground state.This makes sure we return to ground.Additionally removes the "Parser.UnitTests-common.vcxproj" file, whichwas originally used for a theoretical time when we only open-sourced theparser. It's unnecessary now, and we can get rid of it.Also includes a small patch to bcz.cmd, to make sure bx works withprojects with a space in their name.(cherry picked from commit53c81a0)- Add support for passing through extended text attributes, like… (GH-2917) ...Related work items: #23678919, #23678920, #23731910, #23731911, #23731912, #23731913, #23731914, #23731915, #23731916, #23731917, #23731918
Uh oh!
There was an error while loading.Please reload this page.
Summary of the Pull Request
EraseInLine calls
FillConsoleOutputCharacterW(). In filling the row with chars, we were setting the wrap flag. We need to specifically not do this on ANYFILL operation. Now a fill operation UNSETS the wrap flag if we fill to the end of the line.PR Checklist
Detailed Description of the Pull Request / Additional comments
Originally, we had a boolean
setWrapthat would mean...Now we're making this bool a std::optional to allow for a ternary state. This allows for us to handle the following cases completely. Refer to the table below:
001110To handle that special case (1-0-0), we need to UNSET the wrap. So now, we have
setWrapwrapmean the following:Validation Steps Performed
I feel like we should add a test for this case. But idk where or how. Help?