# exchalk

> Easier terminal styling


This library is a very light abstraction over [`IO.ANSI`]( that makes it easy to style text. It's heavily inspired by Node's [`chalk`](

## Install

In your `mix.exs`:

defp deps do
    { :exchalk, "~> 1.0.2" }

Then run `mix deps.get`.

## Usage

IO.puts"Hello world!")

# or

"Hello world!"
  |> ExChalk.italic
  |> ExChalk.bg_blue
  |> IO.puts

## Styles

### Modifiers

- `reset`
- `bold`
- `dim`
- `italic` *(not widely supported)*
- `underline`
- `inverse`
- `hidden`
- `strikethrough` *(not widely supported)*

### Colors

- `black`
- `red`
- `green`
- `yellow`
- `blue`
- `magenta`
- `cyan`
- `white`
- `gray`

### Background colors

- `bg_black`
- `bg_red`
- `bg_green`
- `bg_yellow`
- `bg_blue`
- `bg_magenta`
- `bg_cyan`
- `bg_white`

## Why do I need to call `ExChalk.to_str` for string concatenation?

ExChalk by default returns IO lists instead of strings. IO lists can be printed, but since they aren't strings the `<>` doesn't work (though interpolation does!).

If you're planning on doing a lot of concatenation this may sound annoying, but there's a good reason. IO lists are a lot more performant than strings as they require less allocation and copying.

See José's explanation in [this thread]( for more information.

## 256-colors

ExChalk does not support anything other than the base eight colors, which guarantees it will work on all terminals and systems. Some terminals, specifically `xterm` compliant ones, will support the full range of 8-bit colors. For this, the lower level [`IO.ANSI`]( or the awesome [Bunt]( can be used.

## Windows

If you're on Windows, do yourself a favor and use [`cmder`]( instead of `cmd.exe`.

## License

MIT © [Juan Soto](