No commit activity in last 3 years
No release in over 3 years
Adds methods to apply ANSI colour codes and text styles to strings.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

AnsiTextStyles

This gem adds methods to apply ANSI colour codes and text styles to strings through the use of Refinements.

When you want to output colourized or stylized text to the console, use this gem.

Usage

In your Gemfile add gem 'ansi_text_styles'.

In your codebase add require 'ansi_text_styles'.

The refinement methods in the gem can be used by including using AnsiTextStyles in the file, class definition, or module definition in which you wish to use the refinement.

Examples

As this gem makes use of Refinements, some of the below examples will not work if copied and pasted directly into IRB or Pry. This is due to the lexical scoping of refinements. A nice writeup by James Adam can be found on his blog, interblah.net.

Instead, you can require the example files which are included in the gem. Eg require 'ansi_text_styles/examples/basic'.

Using the style method

# require 'ansi_text_styles/examples/basic'

using AnsiTextStyles

puts "How are you?".style(:blue, :bold) + " " + 'I am good!'.style(:red, :bold)
puts '%s %s' % ["How are you?".style(:blue, :bold), 'I am good!'.style(:red, :bold)]

Using chainable methods

# require 'ansi_text_styles/examples/chainable'

using AnsiTextStyles

puts 'How are you?'.blue.bold + " " + 'I am good!'.red.bold
puts '%s %s' % ["How are you?".blue.bold, 'I am good!'.red.bold]

Using stored style attributes to apply to a String later:

# require 'ansi_text_styles/examples/stored_styles'

using AnsiTextStyles

text_styles = {
    red_bold:       [:red, :bold],
    blue_underline: [:blue, :underline],
    pretty:         [:bg_magenta, :blink],
  }

text_styles.each do |name, style|
  styled_text = "Text styled multiple ways".style(style)
  puts "%s: %s" % [name, styled_text]
end

A Logger with colourised output

# require 'ansi_text_styles/examples/logger.rb'

# Note: The String class is only modified within the lexical scope of the class

class ColourLogger
  using AnsiTextStyles

  def self.status(text)
    "[#{text}]".ljust(7)
  end

  def self.log_msg(status_text, message)
    "%s %s" % [status(status_text), message]
  end

  def self.log_info(message)
    log_msg('INFO'.green, message)
  end

  def self.log_error(message)
    log_msg('ERROR'.red, message)
  end
end

puts ColourLogger.log_info('a pretty colourised info message')
puts ColourLogger.log_error('a pretty colourised error message')

8-bit (256) colours

Foreground and background colour can be applied using 8-bit colour codes (0 - 255).

# require 'ansi_text_styles/examples/8_bit_colour'

using AnsiTextStyles

puts
puts "Standard and high intensity colours"
puts

# Standard and high intensity colours
(0..15).each do |fg|
  row = (0..15).collect do |bg|
    'xxx'.center(5).style(fg: fg, bg: bg)
  end
  puts row.join
end

puts
puts "216 colours"
puts

# 216 colours
colours = (16..231).collect do |bg|
  fg = (bg - 16) % 36 < 18 ? 15 : 0
  bg.to_s.center(5).style(fg: fg, bg: bg)
end

colours.each_slice(36).collect do |row|
  puts row.join
end

puts
puts "Greyscale colours"
puts

# Greyscale colours
colours = (232..255).collect do |bg|
  fg = (bg - 16) % 24 < 12 ? 15 : 0
  bg.to_s.center(5).style(fg: fg, bg: bg)
end

colours.each_slice(12) do |row|
  puts row.join
end

True colour

# require 'ansi_text_styles/examples/true_colour'

using AnsiTextStyles

puts 'Foreground using RGB array'.style(fg: [123, 6, 88])
puts 'Foreground using RGB hash'.style(fg: { r: 5, g: 67, b: 145})

puts 'Background using RGB array'.style(bg: [6, 200, 56])
puts 'Background using RGB hash'.style(bg: { red: 56, green: 99, blue: 240})


puts 'Foreground and Background using RGB array'.style(fg: [250, 200, 4], bg: [6, 7, 245])
puts 'Foreground and Background using RGB hash'.style(fg: { red: 70, green: 222, blue: 9}, bg: { r: 200, g: 8, b: 0})

Built-in Styles

Properties

Style Method Style Code
No Style none 0
Bold bold 1
Bright (increased intensity) bright 1
Faint (decreased intensity) faint 2
Italic italic 3
Underline underline 4
Blink (slow) blink 5
Blink (slow) blink_slow 5
Blink (fast) blink_fast 6
Swap background and foreground colours reverse 7
Hide (foreground colour same as background) hide 8
Crossed out crossed_out 9

Colours

Colour Foreground Method Fg Code Background Method Bg Code
Default default_fg 39 default_bg 49
Black black 30 bg_black 40
Grey grey 90 bg_grey 100
Light Grey lt_grey 37 bg_lt_grey 47
White white 97 bg_white 107
Red red 31 bg_red 41
Light Red lt_red 91 bg_lt_red 101
Green green 32 bg_green 42
Light Green lt_green 92 bg_lt_green 102
Light Yellow dk_yellow 33 bg_dk_yellow 43
Brown brown 33 bg_dk_brown 43
Yellow yellow 93 bg_yellow 103
Blue blue 34 bg_blue 44
Light Blue lt_blue 94 bg_lt_blue 104
Magenta magenta 35 bg_magenta 45
Light Magenta lt_magenta 95 bg_lt_magenta 105
Pink pink 95 bg_pink 105
Cyan cyan 36 bg_cyan 46
Light Cyan lt_cyan 96 bg_lt_cyan 106
Default colour default_fg 39 default_bg 49

Compatibility

Because this gem makes use of refinements, it is only compatible with Ruby version 2.0.0 and above (excluding any future release of Ruby 3).