diff --git a/lib/rdoc/stats/normal.rb b/lib/rdoc/stats/normal.rb index 41e6040452..0c661c5498 100644 --- a/lib/rdoc/stats/normal.rb +++ b/lib/rdoc/stats/normal.rb @@ -26,28 +26,28 @@ def print_file files_so_far, filename files_so_far, @num_files) - # Print a progress bar, but make sure it fits on a single line. Filename - # will be truncated if necessary. - size = IO.respond_to?(:console_size) ? IO.console_size : IO.console.winsize - terminal_width = size[1].to_i.nonzero? || 80 - max_filename_size = terminal_width - progress_bar.size - - if filename.size > max_filename_size then - # Turn "some_long_filename.rb" to "...ong_filename.rb" - filename = filename[(filename.size - max_filename_size) .. -1] - filename[0..2] = "..." - end - - line = "#{progress_bar}#{filename}" if $stdout.tty? + # Print a progress bar, but make sure it fits on a single line. Filename + # will be truncated if necessary. + size = IO.respond_to?(:console_size) ? IO.console_size : IO.console.winsize + terminal_width = size[1].to_i.nonzero? || 80 + max_filename_size = terminal_width - progress_bar.size + + if filename.size > max_filename_size then + # Turn "some_long_filename.rb" to "...ong_filename.rb" + filename = filename[(filename.size - max_filename_size) .. -1] + filename[0..2] = "..." + end + # Clean the line with whitespaces so that leftover output from the # previous line doesn't show up. $stdout.print("\r\e[K") if @last_width && @last_width > 0 - @last_width = line.size - $stdout.print("#{line}\r") + @last_width = progress_bar.size + filename.size + term = "\r" else - $stdout.puts(line) + term = "\n" end + $stdout.print(progress_bar, filename, term) $stdout.flush end