| 
									
										
										
										
											2016-08-26 16:04:47 +02:00
										 |  |  | module Tty | 
					
						
							|  |  |  |   module_function | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def strip_ansi(string) | 
					
						
							|  |  |  |     string.gsub(/\033\[\d+(;\d+)*m/, "") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def width | 
					
						
							| 
									
										
										
										
											2018-06-14 22:14:46 +02:00
										 |  |  |     @width ||= begin | 
					
						
							|  |  |  |       width = `/bin/stty size 2>/dev/null`.split[1] | 
					
						
							|  |  |  |       width = `/usr/bin/tput cols 2>/dev/null`.split[0] if width.to_i.zero? | 
					
						
							|  |  |  |       width ||= 80
 | 
					
						
							|  |  |  |       width.to_i | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2016-08-26 16:04:47 +02:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def truncate(string) | 
					
						
							|  |  |  |     (w = width).zero? ? string.to_s : string.to_s[0, w - 4] | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   COLOR_CODES = { | 
					
						
							|  |  |  |     red: 31, | 
					
						
							|  |  |  |     green: 32, | 
					
						
							|  |  |  |     yellow: 33, | 
					
						
							|  |  |  |     blue: 34, | 
					
						
							|  |  |  |     magenta: 35, | 
					
						
							|  |  |  |     cyan: 36, | 
					
						
							|  |  |  |     default: 39, | 
					
						
							|  |  |  |   }.freeze | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   STYLE_CODES = { | 
					
						
							|  |  |  |     reset: 0, | 
					
						
							|  |  |  |     bold: 1, | 
					
						
							|  |  |  |     italic: 3, | 
					
						
							|  |  |  |     underline: 4, | 
					
						
							|  |  |  |     strikethrough: 9, | 
					
						
							|  |  |  |     no_underline: 24, | 
					
						
							|  |  |  |   }.freeze | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   CODES = COLOR_CODES.merge(STYLE_CODES).freeze | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def append_to_escape_sequence(code) | 
					
						
							|  |  |  |     @escape_sequence ||= [] | 
					
						
							|  |  |  |     @escape_sequence << code | 
					
						
							|  |  |  |     self | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def current_escape_sequence | 
					
						
							|  |  |  |     return "" if @escape_sequence.nil? | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-26 16:04:47 +02:00
										 |  |  |     "\033[#{@escape_sequence.join(";")}m" | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def reset_escape_sequence! | 
					
						
							|  |  |  |     @escape_sequence = nil | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   CODES.each do |name, code| | 
					
						
							|  |  |  |     define_singleton_method(name) do | 
					
						
							|  |  |  |       append_to_escape_sequence(code) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def to_s | 
					
						
							| 
									
										
										
										
											2018-08-02 07:20:40 +02:00
										 |  |  |     if !ENV["HOMEBREW_COLOR"] && (ENV["HOMEBREW_NO_COLOR"] || !$stdout.tty?) | 
					
						
							| 
									
										
										
										
											2018-02-12 11:06:55 -06:00
										 |  |  |       return "" | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-26 16:04:47 +02:00
										 |  |  |     current_escape_sequence | 
					
						
							|  |  |  |   ensure | 
					
						
							|  |  |  |     reset_escape_sequence! | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |