Class: Thor::Shell::Color
Overview
Inherit from Thor::Shell::Basic and add set_color behavior. Check Thor::Shell::Basic to see all available methods.
Constant Summary collapse
- CLEAR =
Embed in a String to clear all previous ANSI sequences.
"\e[0m"
- BOLD =
The start of an ANSI bold sequence.
"\e[1m"
- BLACK =
Set the terminal’s foreground ANSI color to black.
"\e[30m"
- RED =
Set the terminal’s foreground ANSI color to red.
"\e[31m"
- GREEN =
Set the terminal’s foreground ANSI color to green.
"\e[32m"
- YELLOW =
Set the terminal’s foreground ANSI color to yellow.
"\e[33m"
- BLUE =
Set the terminal’s foreground ANSI color to blue.
"\e[34m"
- MAGENTA =
Set the terminal’s foreground ANSI color to magenta.
"\e[35m"
- CYAN =
Set the terminal’s foreground ANSI color to cyan.
"\e[36m"
- WHITE =
Set the terminal’s foreground ANSI color to white.
"\e[37m"
- ON_BLACK =
Set the terminal’s background ANSI color to black.
"\e[40m"
- ON_RED =
Set the terminal’s background ANSI color to red.
"\e[41m"
- ON_GREEN =
Set the terminal’s background ANSI color to green.
"\e[42m"
- ON_YELLOW =
Set the terminal’s background ANSI color to yellow.
"\e[43m"
- ON_BLUE =
Set the terminal’s background ANSI color to blue.
"\e[44m"
- ON_MAGENTA =
Set the terminal’s background ANSI color to magenta.
"\e[45m"
- ON_CYAN =
Set the terminal’s background ANSI color to cyan.
"\e[46m"
- ON_WHITE =
Set the terminal’s background ANSI color to white.
"\e[47m"
Constants inherited from Basic
Instance Attribute Summary
Attributes inherited from Basic
Instance Method Summary collapse
- #can_display_colors? ⇒ Boolean protected
-
#diff_lcs_loaded? ⇒ Boolean
protected
Check if Diff::LCS is loaded.
-
#output_diff_line(diff) ⇒ Object
protected
:nodoc:.
-
#set_color(string, *colors) ⇒ Object
Set color by using a string or one of the defined constants.
-
#show_diff(destination, content) ⇒ Object
protected
Overwrite show_diff to show diff with colors if Diff::LCS is available.
Methods inherited from Basic
#as_unicode, #ask, #ask_filtered, #ask_simply, #dynamic_width, #dynamic_width_stty, #dynamic_width_tput, #error, #file_collision, #file_collision_help, #indent, #initialize, #is?, #lookup_color, #mute, #mute?, #no?, #prepare_message, #print_in_columns, #print_table, #print_wrapped, #quiet?, #say, #say_status, #stderr, #stdout, #terminal_width, #truncate, #unix?, #yes?
Constructor Details
This class inherits a constructor from Thor::Shell::Basic
Instance Method Details
#can_display_colors? ⇒ Boolean (protected)
99 100 101 |
# File 'lib/thor/shell/color.rb', line 99 def can_display_colors? stdout.tty? end |
#diff_lcs_loaded? ⇒ Boolean (protected)
Check if Diff::LCS is loaded. If it is, use it to create pretty output for diff.
136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/thor/shell/color.rb', line 136 def diff_lcs_loaded? #:nodoc: return true if defined?(Diff::LCS) return @diff_lcs_loaded unless @diff_lcs_loaded.nil? @diff_lcs_loaded = begin require "diff/lcs" true rescue LoadError false end end |
#output_diff_line(diff) ⇒ Object (protected)
:nodoc:
119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/thor/shell/color.rb', line 119 def output_diff_line(diff) #:nodoc: case diff.action when "-" say "- #{diff.old_element.chomp}", :red, true when "+" say "+ #{diff.new_element.chomp}", :green, true when "!" say "- #{diff.old_element.chomp}", :red, true say "+ #{diff.new_element.chomp}", :green, true else say " #{diff.old_element.chomp}", nil, true end end |
#set_color(string, *colors) ⇒ Object
Set color by using a string or one of the defined constants. If a third option is set to true, it also adds bold to the string. This is based on Highline implementation and it automatically appends CLEAR to the end of the returned String.
Pass foreground, background and bold options to this method as symbols.
Example:
set_color "Hi!", :red, :on_white, :bold
The available colors are:
:bold
:black
:red
:green
:yellow
:blue
:magenta
:cyan
:white
:on_black
:on_red
:on_green
:on_yellow
:on_blue
:on_magenta
:on_cyan
:on_white
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/thor/shell/color.rb', line 79 def set_color(string, *colors) if colors.compact.empty? || !can_display_colors? string elsif colors.all? { |color| color.is_a?(Symbol) || color.is_a?(String) } ansi_colors = colors.map { |color| lookup_color(color) } "#{ansi_colors.join}#{string}#{CLEAR}" else # The old API was `set_color(color, bold=boolean)`. We # continue to support the old API because you should never # break old APIs unnecessarily :P foreground, bold = colors foreground = self.class.const_get(foreground.to_s.upcase) if foreground.is_a?(Symbol) bold = bold ? BOLD : "" "#{bold}#{foreground}#{string}#{CLEAR}" end end |
#show_diff(destination, content) ⇒ Object (protected)
Overwrite show_diff to show diff with colors if Diff::LCS is available.
106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/thor/shell/color.rb', line 106 def show_diff(destination, content) #:nodoc: if diff_lcs_loaded? && ENV["THOR_DIFF"].nil? && ENV["RAILS_DIFF"].nil? actual = File.binread(destination).to_s.split("\n") content = content.to_s.split("\n") Diff::LCS.sdiff(actual, content).each do |diff| output_diff_line(diff) end else super end end |