aboutsummaryrefslogtreecommitdiff
path: root/lib/std/Progress.zig
AgeCommit message (Collapse)Author
2021-06-18Fix crash when compiling with cygwin/msys on windowsMatt Chudleigh
2021-06-09std.Progress: use `*W` functions on windowsviri
Closes #534. See: https://source.winehq.org/git/wine.git/blob/refs/heads/stable:/dlls/kernelbase/console.c#l520
2021-03-12std: Use more common escape sequences in ProgressLemonBoy
This should fix the badly-rendered progress message when run in Terminal.app.
2021-03-12Handle some weird edge cases of Win32 APILemonBoy
Sometimes the viewport srWindow may report an invalid rectangle where the top row is below the bottom one.
2021-03-12Fix many thinkosLemonBoy
Somehow I forgot to save after copy-pasting some code and changing it.
2021-03-12Fix Progress printing on Windows systemsLemonBoy
The cursor must be restored after the line is printed, not before. Take into account the visible viewport to correctly compute the terminal size.
2021-03-07std: Better handling of line-wrapping in ProgressLemonBoy
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.
2021-02-21std.Progress: improve support for "dumb" terminalsjacob gw
2021-01-24std.Progress: call refreshWithHeldLock as appropriateAndrew Kelley
2021-01-24fix windows bug in Progress.zigTimon Kruiper
This bug caused the compiler to deadlock when multiple c objects were build in parallel. Thanks @kprotty for finding this bug!
2021-01-14organize std lib concurrency primitives and add RwLockAndrew Kelley
* move concurrency primitives that always operate on kernel threads to the std.Thread namespace * remove std.SpinLock. Nobody should use this in a non-freestanding environment; the other primitives are always preferable. In freestanding, it will be necessary to put custom spin logic in there, so there are no use cases for a std lib version. * move some std lib files to the top level fields convention * add std.Thread.spinLoopHint * add std.Thread.Condition * add std.Thread.Semaphore * new implementation of std.Thread.Mutex for Windows and non-pthreads Linux * add std.Thread.RwLock Implementations provided by @kprotty
2021-01-07Reduce use of deprecated IO typesJay Petacat
Related: #4917
2020-12-31Year++Frank Denis
2020-12-23std.Progress: work around time going backwardsAndrew Kelley
2020-12-20std.Progress: fix atomic ordering semanticsAndrew Kelley
thx king protty
2020-12-20std.Progress: make the API thread-safeAndrew Kelley
We generally get away with atomic primitives, however a lock is required around the refresh function since it traverses the Node graph, and we need to be sure no references to Nodes remain after end() is called.
2020-12-20ThreadPool: delete dead codeAndrew Kelley
If this errdefer did get run it would constitute a race condition. So I deleted the dead code for clarity.