Move escape codes to Tty.

This commit is contained in:
Markus Reiter 2024-08-14 21:41:01 +02:00
parent 404176af1d
commit 984cde114a
No known key found for this signature in database
GPG Key ID: 245293B51702655B
2 changed files with 23 additions and 5 deletions

View File

@ -275,7 +275,7 @@ module Homebrew
finished_downloads.each do |downloadable, future|
previous_pending_line_count -= 1
print "\033[K"
$stdout.print Tty.clear_to_end
$stdout.flush
output_message.call(downloadable, future)
end
@ -284,13 +284,13 @@ module Homebrew
remaining_downloads.each do |downloadable, future|
break if previous_pending_line_count >= [concurrency, (Tty.height - 1)].min
print "\033[K"
$stdout.print Tty.clear_to_end
$stdout.flush
previous_pending_line_count += output_message.call(downloadable, future)
end
if previous_pending_line_count.positive?
$stdout.print "\033[#{previous_pending_line_count}A"
$stdout.print Tty.move_cursor_up(previous_pending_line_count)
$stdout.flush
end
@ -300,8 +300,11 @@ module Homebrew
# FIXME: Implement cancellation of running downloads.
end
print "\n" * previous_pending_line_count
$stdout.flush
if previous_pending_line_count.positive?
$stdout.print Tty.move_cursor_down(previous_pending_line_count - 1)
$stdout.flush
end
raise
end
end

View File

@ -51,6 +51,21 @@ module Tty
string.gsub(/\033\[\d+(;\d+)*m/, "")
end
sig { params(line_count: Integer).returns(String) }
def move_cursor_up(line_count)
"\033[#{line_count}A"
end
sig { params(line_count: Integer).returns(String) }
def move_cursor_down(line_count)
"\033[#{line_count}B"
end
sig { returns(String) }
def clear_to_end
"\033[K"
end
sig { returns(String) }
def hide_cursor
"\033[?25l"