Fix progress bar when nix-prefetch-url is piped.
The intent of the code was that if the window size cannot be determined, it would be treated as having the maximum possible size. Because of a missing assignment, it was actually treated as having a width of 0. The reason the width could not be determined was because it was obtained from stdout, not stderr, even though the printing was done to stderr. This commit addresses both issues.
This commit is contained in:
parent
06f9364e5f
commit
c935ad3f02
|
@ -1467,7 +1467,7 @@ static Sync<std::pair<unsigned short, unsigned short>> windowSize{{0, 0}};
|
||||||
static void updateWindowSize()
|
static void updateWindowSize()
|
||||||
{
|
{
|
||||||
struct winsize ws;
|
struct winsize ws;
|
||||||
if (ioctl(1, TIOCGWINSZ, &ws) == 0) {
|
if (ioctl(2, TIOCGWINSZ, &ws) == 0) {
|
||||||
auto windowSize_(windowSize.lock());
|
auto windowSize_(windowSize.lock());
|
||||||
windowSize_->first = ws.ws_row;
|
windowSize_->first = ws.ws_row;
|
||||||
windowSize_->second = ws.ws_col;
|
windowSize_->second = ws.ws_col;
|
||||||
|
|
|
@ -341,7 +341,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
auto width = getWindowSize().second;
|
auto width = getWindowSize().second;
|
||||||
if (width <= 0) std::numeric_limits<decltype(width)>::max();
|
if (width <= 0) width = std::numeric_limits<decltype(width)>::max();
|
||||||
|
|
||||||
writeToStderr("\r" + filterANSIEscapes(line, false, width) + "\e[K");
|
writeToStderr("\r" + filterANSIEscapes(line, false, width) + "\e[K");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue