Module: Tty Private

Defined in:
utils/tty.rb,
sorbet/rbi/dsl/tty.rbi

Overview

This module is part of a private API. This module may only be used in the Homebrew/brew repository. Third parties should avoid using this module if possible, as it may be removed or changed without warning.

Various helper functions for interacting with TTYs.

Constant Summary collapse

COLOR_CODES =

This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.

T.let(
  {
    red:     31,
    green:   32,
    yellow:  33,
    blue:    34,
    magenta: 35,
    cyan:    36,
    default: 39,
  }.freeze,
  T::Hash[Symbol, Integer],
)
STYLE_CODES =

This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.

T.let(
  {
    reset:         0,
    bold:          1,
    italic:        3,
    underline:     4,
    strikethrough: 9,
    no_underline:  24,
  }.freeze,
  T::Hash[Symbol, Integer],
)
SPECIAL_CODES =

This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.

T.let(
  {
    up:         "1A",
    down:       "1B",
    right:      "1C",
    left:       "1D",
    erase_line: "K",
    erase_char: "P",
  }.freeze,
  T::Hash[Symbol, String],
)
CODES =

This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.

T.let(COLOR_CODES.merge(STYLE_CODES).freeze, T::Hash[Symbol, Integer])

Class Method Summary collapse

Class Method Details

.begin_synchronized_update ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



137
138
139
# File 'utils/tty.rb', line 137

def begin_synchronized_update
  "\033[?2026h"
end

.blue ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



11
# File 'sorbet/rbi/dsl/tty.rbi', line 11

def blue; end

.bold ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



14
# File 'sorbet/rbi/dsl/tty.rbi', line 14

def bold; end

.clear_to_end ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



117
118
119
# File 'utils/tty.rb', line 117

def clear_to_end
  "\033[K"
end

.clear_to_end_of_screen ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



122
123
124
# File 'utils/tty.rb', line 122

def clear_to_end_of_screen
  "\033[J"
end

.collapse_carriage_returns(string) ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Simulates a terminal rendering \r overwrites (e.g. curl's --progress-bar).

Parameters:

Returns:



94
95
96
97
98
99
# File 'utils/tty.rb', line 94

def collapse_carriage_returns(string)
  string.split("\n", -1).map do |line|
    # `\r` resets the cursor, it doesn't erase, so keep the last non-empty segment.
    line.split("\r", -1).reject(&:empty?).last || ""
  end.join("\n")
end

.color? ⇒ Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

  • (Boolean)


225
226
227
228
229
230
231
232
233
# File 'utils/tty.rb', line 225

def color?
  require "env_config"

  return false if Homebrew::EnvConfig.no_color?
  return true if Homebrew::EnvConfig.color?
  return false if @stream.blank?

  @stream.tty?
end

.current_escape_sequence ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



185
186
187
188
189
# File 'utils/tty.rb', line 185

def current_escape_sequence
  return "" if @escape_sequence.nil?

  "\033[#{@escape_sequence.join(";")}m"
end

.cyan ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



17
# File 'sorbet/rbi/dsl/tty.rbi', line 17

def cyan; end

.default ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



20
# File 'sorbet/rbi/dsl/tty.rbi', line 20

def default; end

.down ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



23
# File 'sorbet/rbi/dsl/tty.rbi', line 23

def down; end

.end_synchronized_update ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



142
143
144
# File 'utils/tty.rb', line 142

def end_synchronized_update
  "\033[?2026l"
end

.erase_char ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



26
# File 'sorbet/rbi/dsl/tty.rbi', line 26

def erase_char; end

.erase_line ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



29
# File 'sorbet/rbi/dsl/tty.rbi', line 29

def erase_line; end

.green ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



32
# File 'sorbet/rbi/dsl/tty.rbi', line 32

def green; end

.height ⇒ Integer

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



163
164
165
166
167
168
# File 'utils/tty.rb', line 163

def height
  size&.first || @height ||= T.let(
    Utils.popen_read_text("/usr/bin/tput", "lines", err: File::NULL).presence&.to_i || 40,
    T.nilable(Integer),
  )
end

.hide_cursor ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



127
128
129
# File 'utils/tty.rb', line 127

def hide_cursor
  "\033[?25l"
end

.italic ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



35
# File 'sorbet/rbi/dsl/tty.rbi', line 35

def italic; end

.left ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



38
# File 'sorbet/rbi/dsl/tty.rbi', line 38

def left; end

.magenta ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



41
# File 'sorbet/rbi/dsl/tty.rbi', line 41

def magenta; end

.move_cursor_beginning ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



107
108
109
# File 'utils/tty.rb', line 107

def move_cursor_beginning
  "\033[0G"
end

.move_cursor_down(line_count) ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

Returns:



112
113
114
# File 'utils/tty.rb', line 112

def move_cursor_down(line_count)
  "\033[#{line_count}B"
end

.move_cursor_up_beginning(line_count) ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

Returns:



102
103
104
# File 'utils/tty.rb', line 102

def move_cursor_up_beginning(line_count)
  "\033[#{line_count}F"
end

.no_underline ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



44
# File 'sorbet/rbi/dsl/tty.rbi', line 44

def no_underline; end

.red ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



47
# File 'sorbet/rbi/dsl/tty.rbi', line 47

def red; end

.reset ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



50
# File 'sorbet/rbi/dsl/tty.rbi', line 50

def reset; end

.reset_escape_sequence! ⇒ void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

This method returns an undefined value.



192
193
194
# File 'utils/tty.rb', line 192

def reset_escape_sequence!
  @escape_sequence = T.let(nil, T.nilable(T::Array[Integer]))
end

.right ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



53
# File 'sorbet/rbi/dsl/tty.rbi', line 53

def right; end

.show_cursor ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



132
133
134
# File 'utils/tty.rb', line 132

def show_cursor
  "\033[?25h"
end

.size ⇒ Array<(Integer, Integer)>?

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



147
148
149
150
151
152
# File 'utils/tty.rb', line 147

def size
  clear_stale_size!
  @size ||= T.let(($stdin.winsize if $stdin.tty?), T.nilable([Integer, Integer]))
rescue IOError, SystemCallError
  nil
end

.size_stale! ⇒ void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

This method returns an undefined value.

Mark the cached terminal size as stale so it is re-read on next use, e.g. after a resize. Only set a flag as a SIGWINCH handler may call this while size, height or width are caching an old value.



158
159
160
# File 'utils/tty.rb', line 158

def size_stale!
  @size_stale = T.let(true, T.nilable(T::Boolean))
end

.strikethrough ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



56
# File 'sorbet/rbi/dsl/tty.rbi', line 56

def strikethrough; end

.strip_ansi(string) ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

Returns:



84
85
86
87
88
89
90
# File 'utils/tty.rb', line 84

def strip_ansi(string)
  if string.ascii_only? || (string.encoding == Encoding::UTF_8 && string.valid_encoding?)
    string.gsub(TERMINAL_CONTROL_SEQUENCE, "")
  else
    string.b.gsub(BINARY_TERMINAL_CONTROL_SEQUENCE, "".b).force_encoding(string.encoding)
  end
end

.truncate(string) ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

Returns:



180
181
182
# File 'utils/tty.rb', line 180

def truncate(string)
  (w = width).zero? ? string.to_s : (string.to_s[0, w - 4] || "")
end

.underline ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



59
# File 'sorbet/rbi/dsl/tty.rbi', line 59

def underline; end

.up ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



62
# File 'sorbet/rbi/dsl/tty.rbi', line 62

def up; end

.width ⇒ Integer

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Keep in sync with columns in Library/Homebrew/utils/tty.sh.

Returns:



172
173
174
175
176
177
# File 'utils/tty.rb', line 172

def width
  size&.second || @width ||= T.let(
    Utils.popen_read_text("/usr/bin/tput", "cols", err: File::NULL).presence&.to_i || 80,
    T.nilable(Integer),
  )
end

.with(stream, &_block) ⇒ void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

This method returns an undefined value.

Parameters:

  • stream (IO, StringIO)
  • _block (T.proc.params(arg0: T.any(IO, StringIO)).void)


74
75
76
77
78
79
80
81
# File 'utils/tty.rb', line 74

def with(stream, &_block)
  previous_stream = @stream
  @stream = T.let(stream, T.nilable(T.any(IO, StringIO)))

  yield stream
ensure
  @stream = T.let(previous_stream, T.nilable(T.any(IO, StringIO)))
end

.yellow ⇒ String

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



65
# File 'sorbet/rbi/dsl/tty.rbi', line 65

def yellow; end