aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorLemonBoy <thatlemon@gmail.com>2021-03-07 15:23:20 +0100
committerLemonBoy <thatlemon@gmail.com>2021-03-07 15:23:20 +0100
commit4fc2e92876d8aafd087a5f0bdb6ea7a54f195704 (patch)
tree7eb601c9e37655605989f757d30291d0b8c58755 /src/codegen
parent0447a2c041a4be843251396e668e074186aa49a2 (diff)
downloadzig-4fc2e92876d8aafd087a5f0bdb6ea7a54f195704.tar.gz
zig-4fc2e92876d8aafd087a5f0bdb6ea7a54f195704.zip
std: Better handling of line-wrapping in Progress
In order to update the printed progress string the code tried to move the cursor N cells to the left, where N is the number of written bytes, and then clear the remaining part of the line. This strategy has two main issues: - Is only valid if the number of characters is equal to the number of written bytes, - Is only valid if the line doesn't get too long. The second point is the main motivation for this change, when the line becomes too long the terminal wraps it to a new physical line. This means that moving the cursor to the left won't be enough anymore as once the left border is reached it cannot move anymore. The wrapped line is still stored by the terminal as a single line, despite now taking more than a single one when displayed. If you try to resize the terminal you'll notice how the contents are reflowed and are essentially illegible. Querying the cursor position on non-Windows systems (plot twist, Microsoft suggests using VT escape sequences on newer systems) is extremely cumbersome so let's do something different. Before printing anything let's save the cursor position and clear the screen below the cursor, this way we ensure there's absolutely no trace of stale data on screen, and after the message is printed we simply restore it.
Diffstat (limited to 'src/codegen')
0 files changed, 0 insertions, 0 deletions