All Projects â†’ sickill â†’ Rainbow

sickill / Rainbow

Licence: mit
Ruby gem for colorizing printed text on ANSI terminals

Programming Languages

ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to Rainbow

Double entry
A double-entry accounting system for Ruby applications.
Stars: ✭ 276 (-59.59%)
Mutual labels:  gem
Awesome Image Colorization
📚 A collection of Deep Learning based Image Colorization and Video Colorization papers.
Stars: ✭ 370 (-45.83%)
Mutual labels:  colorization
Motion
Reactive frontend UI components for Rails in pure Ruby
Stars: ✭ 498 (-27.09%)
Mutual labels:  gem
Hue
Work with Philips Hue from Ruby
Stars: ✭ 308 (-54.9%)
Mutual labels:  gem
Deep Koalarization
Keras/Tensorflow implementation of our paper Grayscale Image Colorization using deep CNN and Inception-ResNet-v2 (https://arxiv.org/abs/1712.03400)
Stars: ✭ 364 (-46.71%)
Mutual labels:  colorization
Deep Exemplar Based Colorization
The source code of "Deep Exemplar-based Colorization".
Stars: ✭ 404 (-40.85%)
Mutual labels:  colorization
pixela
Pixela API client for Ruby
Stars: ✭ 23 (-96.63%)
Mutual labels:  gem
Discordrb
Discord API for Ruby
Stars: ✭ 651 (-4.69%)
Mutual labels:  gem
Stitches
Create a Microservice in Rails with minimal ceremony
Stars: ✭ 371 (-45.68%)
Mutual labels:  gem
Instcolorization
Stars: ✭ 461 (-32.5%)
Mutual labels:  colorization
Milia
Easy multi-tenanting for Rails5 (or Rails4) + Devise
Stars: ✭ 326 (-52.27%)
Mutual labels:  gem
Colorls
A Ruby gem that beautifies the terminal's ls command, with color and font-awesome icons. 🎉
Stars: ✭ 3,896 (+470.42%)
Mutual labels:  gem
Graphql Guard
Simple authorization gem for GraphQL 🔒
Stars: ✭ 434 (-36.46%)
Mutual labels:  gem
Pwned
An easy, Ruby way to use the Pwned Passwords API.
Stars: ✭ 290 (-57.54%)
Mutual labels:  gem
Xspear
Powerfull XSS Scanning and Parameter analysis tool&gem
Stars: ✭ 583 (-14.64%)
Mutual labels:  gem
Material icons
A simple Rails wrapper for Google Material Icons
Stars: ✭ 266 (-61.05%)
Mutual labels:  gem
Devise masquerade
Extension for devise, enable login as functionality. Add link to the masquerade_path(resource) and use it.
Stars: ✭ 380 (-44.36%)
Mutual labels:  gem
Yt
The reliable YouTube API Ruby client
Stars: ✭ 674 (-1.32%)
Mutual labels:  gem
Coltrane
ðŸŽđðŸŽļA music theory library with a command-line interface
Stars: ✭ 625 (-8.49%)
Mutual labels:  gem
Dry Monads
Useful, common monads in idiomatic Ruby
Stars: ✭ 453 (-33.67%)
Mutual labels:  gem

Rainbow

Gem Version Build Status Build status Code Climate Coverage Status

Rainbow is a ruby gem for colorizing printed text on ANSI terminals.

It provides a string presenter object, which adds several methods to your strings for wrapping them in ANSI escape codes. These codes when printed in a terminal change text attributes like text color, background color, intensity etc.

Usage

To make your string colored wrap it with Rainbow() presenter and call .color(<color name>) on it.

Example

require 'rainbow'

puts Rainbow("this is red").red + " and " + Rainbow("this on yellow bg").bg(:yellow) + " and " + Rainbow("even bright underlined!").underline.bright

# => "\e[31mthis is red\e[0m and \e[43mthis on yellow bg\e[0m and \e[4m\e[1meven bright underlined!\e[0m"

Or, watch this video example

Rainbow presenter API

Rainbow presenter adds the following methods to presented string:

  • color(c) (with foreground, and fg aliases)
  • background(c) (with bg alias)
  • bright
  • underline
  • blink
  • inverse
  • hide
  • faint (not well supported by terminal emulators)
  • italic (not well supported by terminal emulators)
  • cross_out, strike

Text color can also be changed by calling a method named by a color:

  • black
  • red
  • green
  • yellow
  • blue
  • magenta
  • cyan
  • white
  • aqua
  • silver
  • aliceblue
  • indianred

All of the methods return self (the presenter object) so you can chain method calls:

Rainbow("hola!").blue.bright.underline

Refinement

If you want to use the Refinements version, you can:

require 'rainbow/refinement'
using Rainbow
puts "Hi!".green

Here's an IRB session example:

>> 'Hello, World!'.blue.bright.underline
NoMethodError: undefined method `blue' for "Hello, World!":String
    (ripl):1:in `<main>'
>> using Rainbow
=> main
>> 'Hello, World!'.blue.bright.underline
=> "\e[34m\e[1m\e[4mHello, World!\e[0m"

Color specification

Both color and background accept color specified in any of the following ways:

  • ANSI color number (where 0 is black, 1 is red, 2 is green and so on): Rainbow("hello").color(1)

  • ANSI color name or X11 color name as a symbol: Rainbow("hello").color(:yellow). This can be simplified to Rainbow("hello").yellow

    See Color list for all available color names.
    Note that ANSI colors can be changed in accordance with terminal setting.
    But X11 color is just a syntax sugar for RGB triplet. So you always see what you specified.

  • RGB triplet as separate values in the range 0-255: Rainbow("hello").color(115, 23, 98)

  • RGB triplet as a hex string: Rainbow("hello").color("FFC482") or Rainbow("hello").color("#FFC482")

When you specify a color with a RGB triplet rainbow finds the nearest match from 256 colors palette. Note that it requires a 256-colors capable terminal to display correctly.

Example: Choose a random color

You can pick a random color with Rainbow, it's a one-liner:

colors = Range.new(0,7).to_a
"whoop dee doop".chars.map { |char| Rainbow(char).color(colors.sample) }.join
# => "\e[36mw\e[0m\e[37mh\e[0m\e[34mo\e[0m\e[34mo\e[0m\e[37mp\e[0m\e[34m \e[0m\e[36md\e[0m\e[33me\e[0m\e[34me\e[0m\e[37m \e[0m\e[32md\e[0m\e[35mo\e[0m\e[33mo\e[0m\e[36mp\e[0m"

colors = [:aliceblue, :antiquewhite, :aqua, :aquamarine, :azure, :beige, :bisque, :blanchedalmond, :blueviolet]
"whoop dee doop".chars.map { |char| Rainbow(char).color(colors.sample) }.join
# => "\e[38;5;135mw\e[0m\e[38;5;230mh\e[0m\e[38;5;231mo\e[0m\e[38;5;135mo\e[0m\e[38;5;231mp\e[0m\e[38;5;231m \e[0m\e[38;5;122md\e[0m\e[38;5;231me\e[0m\e[38;5;231me\e[0m\e[38;5;230m \e[0m\e[38;5;122md\e[0m\e[38;5;51mo\e[0m\e[38;5;51mo\e[0m\e[38;5;51mp\e[0m"

Configuration

Rainbow can be enabled/disabled globally by setting:

Rainbow.enabled = true/false

When disabled all the methods return an unmodified string (Rainbow("hello").red == "hello").

It's enabled by default, unless STDOUT/STDERR is not a TTY or a terminal is dumb.

Advanced usage

Rainbow() and Rainbow.enabled operate on the global Rainbow wrapper instance. If you would like to selectively enable/disable coloring in separate parts of your application you can get a new Rainbow wrapper instance for each of them and control the state of coloring during the runtime.

rainbow_one = Rainbow.new
rainbow_two = Rainbow.new

rainbow_one.enabled = false

Rainbow("hello").red          # => "\e[31mhello\e[0m" ("hello" if not on TTY)
rainbow_one.wrap("hello").red # => "hello"
rainbow_two.wrap("hello").red # => "\e[31mhello\e[0m" ("hello" if not on TTY)

By default each new instance inherits enabled/disabled state from the global Rainbow.enabled.

This feature comes handy for example when you have multiple output formatters in your application and some of them print to a terminal but others write to a file. Normally rainbow would detect that STDIN/STDERR is a TTY and would colorize all the strings, even the ones that go through file writing formatters. You can easily solve that by disabling coloring for the Rainbow instances that are used by formatters with file output.

Installation

Add it to your Gemfile:

gem 'rainbow'

Or just install it via rubygems:

gem install rainbow

Color list

ANSI colors

black, red, green, yellow, blue, magenta, cyan, white

X11 colors

aliceblue, antiquewhite, aqua, aquamarine, azure, beige, bisque, blanchedalmond, blueviolet, brown, burlywood, cadetblue, chartreuse, chocolate, coral, cornflower, cornsilk, crimson, darkblue, darkcyan, darkgoldenrod, darkgray, darkgreen, darkkhaki, darkmagenta, darkolivegreen, darkorange, darkorchid, darkred, darksalmon, darkseagreen, darkslateblue, darkslategray, darkturquoise, darkviolet, deeppink, deepskyblue, dimgray, dodgerblue, firebrick, floralwhite, forestgreen, fuchsia, gainsboro, ghostwhite, gold, goldenrod, gray, greenyellow, honeydew, hotpink, indianred, indigo, ivory, khaki, lavender, lavenderblush, lawngreen, lemonchiffon, lightblue, lightcoral, lightcyan, lightgoldenrod, lightgray, lightgreen, lightpink, lightsalmon, lightseagreen, lightskyblue, lightslategray, lightsteelblue, lightyellow, lime, limegreen, linen, maroon, mediumaquamarine, mediumblue, mediumorchid, mediumpurple, mediumseagreen, mediumslateblue, mediumspringgreen, mediumturquoise, mediumvioletred, midnightblue, mintcream, mistyrose, moccasin, navajowhite, navyblue, oldlace, olive, olivedrab, orange, orangered, orchid, palegoldenrod, palegreen, paleturquoise, palevioletred, papayawhip, peachpuff, peru, pink, plum, powderblue, purple, rebeccapurple, rosybrown, royalblue, saddlebrown, salmon, sandybrown, seagreen, seashell, sienna, silver, skyblue, slateblue, slategray, snow, springgreen, steelblue, tan, teal, thistle, tomato, turquoise, violet, webgray, webgreen, webmaroon, webpurple, wheat, whitesmoke, yellowgreen

Authors

Marcin Kulik and great open-source contributors.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].