aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMarkus Reiter2016-10-02 04:11:43 +0200
committerMarkus Reiter2016-10-15 17:13:37 +0200
commit6e10f913714f195c2bbc77786f86342378243c1f (patch)
treeca7cf2531077efd2d1c6e67fd6eb96d43c46d76e /Library
parent527a62b64bd8c578af08540166a8b1fd5bce521f (diff)
downloadbrew-6e10f913714f195c2bbc77786f86342378243c1f.tar.bz2
Refactor `puts_columns`.
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/utils.rb50
-rw-r--r--Library/Homebrew/utils/puts_columns.rb49
2 files changed, 56 insertions, 43 deletions
diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb
index 79e5287e8..e31339e16 100644
--- a/Library/Homebrew/utils.rb
+++ b/Library/Homebrew/utils.rb
@@ -1,16 +1,17 @@
require "pathname"
require "emoji"
require "exceptions"
+require "utils/analytics"
+require "utils/curl"
+require "utils/fork"
require "utils/formatter"
+require "utils/git"
+require "utils/github"
require "utils/hash"
-require "utils/json"
require "utils/inreplace"
+require "utils/json"
require "utils/popen"
-require "utils/fork"
-require "utils/git"
-require "utils/analytics"
-require "utils/github"
-require "utils/curl"
+require "utils/puts_columns"
require "utils/tty"
def ohai(title, *sput)
@@ -286,43 +287,6 @@ def quiet_system(cmd, *args)
end
end
-def puts_columns(items)
- return if items.empty?
-
- unless $stdout.tty?
- puts items
- return
- end
-
- # TTY case: If possible, output using multiple columns.
- console_width = Tty.width
- console_width = 80 if console_width <= 0
- plain_item_lengths = items.map { |s| Tty.strip_ansi(s).length }
- max_len = plain_item_lengths.max
- col_gap = 2 # number of spaces between columns
- gap_str = " " * col_gap
- cols = (console_width + col_gap) / (max_len + col_gap)
- cols = 1 if cols < 1
- rows = (items.size + cols - 1) / cols
- cols = (items.size + rows - 1) / rows # avoid empty trailing columns
-
- if cols >= 2
- col_width = (console_width + col_gap) / cols - col_gap
- items = items.each_with_index.map do |item, index|
- item + "".ljust(col_width - plain_item_lengths[index])
- end
- end
-
- if cols == 1
- puts items
- else
- rows.times do |row_index|
- item_indices_for_row = row_index.step(items.size - 1, rows).to_a
- puts items.values_at(*item_indices_for_row).join(gap_str)
- end
- end
-end
-
def which(cmd, path = ENV["PATH"])
path.split(File::PATH_SEPARATOR).each do |p|
begin
diff --git a/Library/Homebrew/utils/puts_columns.rb b/Library/Homebrew/utils/puts_columns.rb
new file mode 100644
index 000000000..94a5354ad
--- /dev/null
+++ b/Library/Homebrew/utils/puts_columns.rb
@@ -0,0 +1,49 @@
+require "utils/tty"
+
+class IO
+ def puts_columns(*objects, gap_size: 2)
+ objects.flatten!
+
+ if objects.empty? || !tty?
+ puts(*objects)
+ return
+ end
+
+ console_width = Tty.width
+
+ object_lengths = objects.map { |obj| Tty.strip_ansi(obj.to_s).length }
+
+ cols = (console_width + gap_size) / (object_lengths.max + gap_size)
+
+ if cols < 2
+ puts(*objects)
+ return
+ end
+
+ rows = (objects.count + cols - 1) / cols
+ cols = (objects.count + rows - 1) / rows # avoid empty trailing columns
+
+ col_width = (console_width + gap_size) / cols - gap_size
+
+ gap_string = "".rjust(gap_size)
+
+ rows.times do |row_index|
+ item_indices_for_row = row_index.step(objects.size - 1, rows).to_a
+
+ first_n = item_indices_for_row[0...-1].map { |index|
+ objects[index] + "".rjust(col_width - object_lengths[index])
+ }
+
+ # don't add trailing whitespace to last column
+ last = objects.values_at(item_indices_for_row.last)
+
+ puts (first_n + last).join(gap_string)
+ end
+ end
+end
+
+module Kernel
+ def puts_columns(*objects)
+ $stdout.puts_columns(*objects)
+ end
+end