fix position translation at EOF with softwrap #5786
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #5782
The new rendering code added in #5420 performs char_idx -> visual_pos translations on the fly for performance reasons. This code needs a special case for the EOF character as that character is not a real char_idx in the text (it's rendered as virtual text but virtual text normally doesn't have a separate char_idx). When softwrap is enabled the view may be offset multiple visual lines from the start of the line. That means that any position needs to have a vertical offset applied (
pos.row -= row_offset
). This is always done for all graphemes that get actually rendered but because the EOF position takes a specical branch (only used for position translation) it needs to be done there too (which was missed so far).