Skip to content

Commit

Permalink
Fix backspacing over control visualizers
Browse files Browse the repository at this point in the history
  • Loading branch information
lhecker committed Nov 30, 2023
1 parent 0c4751b commit aa5b2f0
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 5 deletions.
6 changes: 6 additions & 0 deletions doc/COOKED_READ_DATA.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ All of the following ✅ marks must be fulfilled during manual testing:
* Press tab: Autocomplete to "a😊b.txt" ✅
* Navigate the cursor right past the "a"
* Press tab twice: Autocomplete to "a😟b.txt" ✅
* Execute `printf(" "); gets(buffer);` in C (or equivalent)
* Press Tab, A, Ctrl+V, Tab, A ✅
* The prompt is " A^V A" ✅
* Cursor navigation works ✅
* Backspacing/Deleting random parts of it works ✅
* It never deletes the initial 4 spaces ✅
* Backspace deletes preceding glyphs ✅
* Ctrl+Backspace deletes preceding words ✅
* Escape clears input ✅
Expand Down
19 changes: 14 additions & 5 deletions src/host/readDataCooked.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -938,22 +938,31 @@ ptrdiff_t COOKED_READ_DATA::_writeCharsImpl(const std::wstring_view& text, const
const auto wch = *it;
if (wch == UNICODE_TAB)
{
const auto col = _getColumnAtRelativeCursorPosition(distance + cursorOffset);
const auto remaining = width - col;
distance += std::min(remaining, 8 - (col & 7));
buf[0] = L'\t';
len = 1;
}
else
{
// In the interactive mode we replace C0 control characters (0x00-0x1f) with ASCII representations like ^C (= 0x03).
distance += 2;
buf[0] = L'^';
buf[1] = gsl::narrow_cast<wchar_t>(wch + L'@');
len = 2;
}

if (!measureOnly)
if (measureOnly)
{
if (wch == UNICODE_TAB)
{
const auto col = _getColumnAtRelativeCursorPosition(distance + cursorOffset);
const auto remaining = width - col;
distance += std::min(remaining, 8 - (col & 7));
}
else
{
distance += 2;
}
}
else
{
distance += _writeCharsUnprocessed({ &buf[0], len });
}
Expand Down

0 comments on commit aa5b2f0

Please sign in to comment.