terminal/src/cascadia/TerminalCore
James Holderness c69757ec9e
Remove unneeded VT-specific control character handling (#4289)
## Summary of the Pull Request

This PR removes all of the VT-specific functionality from the `WriteCharsLegacy` function that dealt with control characters, since those controls are now handled in the state machine when in VT mode. It also removes most of the control character handling from the `Terminal::_WriteBuffer` method for the same reason.

## References

This is a followup to PR #4171

## PR Checklist
* [x] Closes #3971
* [x] CLA signed. If not, go over [here](https://cla.opensource.microsoft.com/microsoft/Terminal) and sign the CLA
* [ ] Tests added/passed
* [ ] Requires documentation to be updated
* [x] I've discussed this with core contributors already. If not checked, I'm ready to accept this work might be rejected in favor of a different grand plan. Issue number where discussion took place: https://github.com/microsoft/terminal/issues/780#issuecomment-570287435

## Detailed Description of the Pull Request / Additional comments

There are four changes to the `WriteCharsLegacy` implementation:

1. The `TAB` character had special case handling in VT mode which is now no longer required. This fixes a bug in the Python REPL editor (when run from a cmd shell in Windows Terminal), which would prevent you tabbing past the end of the line. It also fixes #3971.

2. Following on from point 1, the `WC_NONDESTRUCTIVE_TAB` flag could also now be removed. It only ever applied in VT mode, in which case the `TAB` character isn't handled in `WriteCharsLegacy`, so there isn't a need for a non-destructive version.

3. There used to be special case handling for a `BS` character at the beginning of the line when in VT mode, and that is also no longer required. This fixes an edge-case bug which would prevent a glyph being output for code point 8 when `ENABLE_PROCESSED_OUTPUT` was disabled. 

4. There was quite a lot of special case handling for control characters in the "end-of-line wrap" implementation, which is no longer required. This fixes a bug which would prevent "low ASCII" characters from wrapping when output at the end of a line.

Then in the `Terminal::_WriteBuffer` implementation, I've simply removed all control character handling, except for `LF`. The Terminal is always in VT mode, so the control characters are always handled by the state machine. The exception for the `LF` character is simply because it doesn't have a proper implementation yet, so it still passes the character through to `_WriteBuffer`. That will get cleaned up eventually, but I thought that could wait for a later PR.

Finally, with the removal of the VT mode handling in `WriteCharsLegacy`, there was no longer a need for the `SCREEN_INFORMATION::InVTMode` method to be publicly accessible. That has now been made private.

## Validation Steps Performed

I've only tested manually, making sure the conhost and Windows Terminal still basically work, and confirming that the above-mentioned bugs are fixed by these changes.
2020-01-29 19:18:46 +00:00
..
lib Apply audit mode to TerminalConnection/Core/Settings and WinCon… (#4016) 2020-01-03 10:44:27 -08:00
ControlKeyStates.hpp Add a ControlKeyStates wrapper class (#1718) 2019-07-16 11:09:29 -07:00
ITerminalApi.hpp Remove unneeded VT-specific control character handling (#4289) 2020-01-29 19:18:46 +00:00
ITerminalInput.hpp Fixes #3518 (#3521) 2019-11-13 02:12:43 +00:00
packages.config Update a number of our dependencies (#2301) 2019-08-07 16:43:49 -07:00
pch.cpp Initial release of the Windows Terminal source code 2019-05-02 15:29:04 -07:00
pch.h Initial release of the Windows Terminal source code 2019-05-02 15:29:04 -07:00
Terminal.cpp Remove unneeded VT-specific control character handling (#4289) 2020-01-29 19:18:46 +00:00
Terminal.hpp Remove unneeded VT-specific control character handling (#4289) 2020-01-29 19:18:46 +00:00
TerminalApi.cpp Remove unneeded VT-specific control character handling (#4289) 2020-01-29 19:18:46 +00:00
terminalcore-common.vcxitems Unify and clean up the common build properties (#3429) 2019-11-05 14:29:11 -08:00
TerminalDispatch.cpp Remove unneeded VT-specific control character handling (#4289) 2020-01-29 19:18:46 +00:00
TerminalDispatch.hpp Dispatch more C0 control characters from the VT state machine (#4171) 2020-01-16 17:43:21 -08:00
TerminalDispatchGraphics.cpp Apply audit mode to TerminalConnection/Core/Settings and WinCon… (#4016) 2020-01-03 10:44:27 -08:00
terminalrenderdata.cpp Remove unneeded c_str() conversions (#4358) 2020-01-27 10:23:13 -08:00
TerminalSelection.cpp Apply audit mode to TerminalConnection/Core/Settings and WinCon… (#4016) 2020-01-03 10:44:27 -08:00