Class: Freyia::Shell::Color

Inherits:
Basic
  • Object
show all
Includes:
LCSDiff
Defined in:
lib/freyia/shell/color.rb

Overview

Inherit from Freyia::Shell::Basic and add set_color behavior. Check Freyia::Shell::Basic to see all available methods.

Constant Summary collapse

ANSI_ESCAPE =
format("%c", 27)
ANSI_MATCH =

NOTE: the following is tweaked from Bridgetown Foundation’s regex because we need to be able to count the number within the escape sequence

%r!#{ANSI_ESCAPE}\[([0-9;]*)(j|k|m|s|u|A|B|G)|\e\(B\e\[m!ix
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"

Instance Attribute Summary

Attributes inherited from Basic

#base, #padding

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Basic

#ask, #error, #file_collision, #indent, #initialize, #mute, #mute?, #no?, #print_in_columns, #print_table, #print_wrapped, #say, #say_error, #say_status, #yes?

Constructor Details

This class inherits a constructor from Freyia::Shell::Basic

Class Method Details

.strip_ansi(str) ⇒ Object

Strip ANSI from the current string. It also strips cursor stuff, well some of it, and it also strips some other stuff that a lot of the other ANSI strippers don’t.



111
# File 'lib/freyia/shell/color.rb', line 111

def self.strip_ansi(str) = str.gsub(ANSI_MATCH, "")

Instance Method Details

#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


90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/freyia/shell/color.rb', line 90

def set_color(string, *colors) # rubocop:todo Metrics
  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