correctly compute truncation margin
authorEvan Martin <martine@danga.com>
Sat, 14 May 2011 22:34:13 +0000 (15:34 -0700)
committerEvan Martin <martine@danga.com>
Sat, 14 May 2011 22:48:31 +0000 (15:48 -0700)
src/build.cc

index 15150a4cac8287dd4edd91b92584e7fb8bd988a2..5b2bddbb65db13957d7cbe5430521ff92556c0b8 100644 (file)
@@ -157,13 +157,15 @@ void BuildStatus::PrintStatus(Edge* edge) {
   if (smart_terminal_)
     printf("\r");  // Print over previous line, if any.
 
+  int progress_chars = printf("[%d/%d] ", finished_edges_, total_edges_);
+
 #ifndef WIN32
   if (smart_terminal_ && !force_full_command) {
     // Limit output to width of the terminal if provided so we don't cause
     // line-wrapping.
     winsize size;
     if ((ioctl(0, TIOCGWINSZ, &size) == 0) && size.ws_col) {
-      const int kMargin = 15;  // Space for [xxx/yyy] and "...".
+      const int kMargin = progress_chars + 3;  // Space for [xx/yy] and "...".
       if (to_print.size() + kMargin > size.ws_col) {
         int substr = std::min(to_print.size(),
                               to_print.size() + kMargin - size.ws_col);
@@ -173,7 +175,7 @@ void BuildStatus::PrintStatus(Edge* edge) {
   }
 #endif
 
-  printf("[%d/%d] %s", finished_edges_, total_edges_, to_print.c_str());
+  printf("%s", to_print.c_str());
 
   if (smart_terminal_ && !force_full_command) {
     printf("\e[K");  // Clear to end of line.