Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/abusomani/go-palette

Decorate your terminals using Palette 🎨
https://github.com/abusomani/go-palette

ansi ansi-colors ansi-escape-codes cli go golang golang-library style

Last synced: 17 days ago
JSON representation

Decorate your terminals using Palette 🎨

Awesome Lists containing this project

README

        


Go-Palette
 

Go-Palette 🎨

[![Build Status](https://github.com/abusomani/go-palette/workflows/build/badge.svg)](https://github.com/abusomani/go-palette/actions)
[![Github top language](https://img.shields.io/github/languages/top/abusomani/go-palette)](https://img.shields.io/github/languages/top/abusomani/go-palette)
[![Github language count](https://img.shields.io/github/languages/count/abusomani/go-palette)](https://img.shields.io/github/languages/count/abusomani/go-palette)
[![License](https://img.shields.io/badge/license-MIT-blue)](https://github.com/abusomani/go-palette/blob/main/LICENSE)
[![Go Report Card](https://goreportcard.com/badge/github.com/abusomani/go-palette)](https://goreportcard.com/report/github.com/abusomani/go-palette)
[![Go Reference](https://pkg.go.dev/badge/github.com/abusomani/go-palette.svg)](https://pkg.go.dev/github.com/abusomani/go-palette)
[![Coverage Status](https://coveralls.io/repos/github/abusomani/go-palette/badge.svg?branch=main)](https://coveralls.io/github/abusomani/go-palette?branch=main)
[![Mentioned in Awesome Go](https://awesome.re/mentioned-badge-flat.svg)](https://github.com/avelino/awesome-go#advanced-console-uis)

Elegant and convenient style definitions using ANSI colors.
Fully compatible and wraps the `fmt` [library](https://pkg.go.dev/fmt) for nice terminal layouts.


Output of running the example written using Go-palette

## Supported Colors & Formats

### Standard colors

![standard colors](https://res.cloudinary.com/dahkenlmo/image/upload/v1678038120/standard-colors_kbxyyi.png)

The following colors are supported to be used by their names for both foreground and background as shown in [Example using color names](#example-using-color-names)

| Color Name | Color Code |
| :--- | :----: |
| Black | 0 |
| Red | 1 |
| Green | 2 |
| Yellow | 3 |
| Blue | 4 |
| Magenta | 5 |
| Cyan | 6 |
| White | 7 |
| BrightBlack | 8 |
| BrightRed | 9 |
| BrightGreen | 10 |
| BrightYellow | 11 |
| BrightBlue | 12 |
| BrightMagenta | 13 |
| BrightCyan | 14 |
| BrightWhite | 15 |

#### Standard colors used as foreground as well as background
![standard colors used as foreground as well as background](https://res.cloudinary.com/dahkenlmo/image/upload/v1678038120/standard-colors-fg-bg_vxr67y.png)

### Supported Foreground Palette
The following palette is supported as foreground/text colors. The numbers represent the color-codes which can be used as shown in [Example using color codes](#example-using-color-codes).

![complete supported foreground palette](https://res.cloudinary.com/dahkenlmo/image/upload/v1678038121/foreground-palette_klb2o4.png)

### Supported Background Palette

The following palette is supported as background colors. The numbers represent the color-codes which can be used as shown in [Example using color codes](#example-using-color-codes).

![complete supported background palette](https://res.cloudinary.com/dahkenlmo/image/upload/v1678038122/background-palette_neiykd.png)

### Supported Text Formats

The following text formats are supported.
- Reset
- Bold
- Dim
- Italic
- Underline
- SlowBlink
- Hidden
- Strikethrough

![supported text formats](https://res.cloudinary.com/dahkenlmo/image/upload/v1678038120/special-effects_bwuurg.gif)

## Prerequisites

A go module where you want to integrate go-palette. To create one, follow this [guide](https://go.dev/doc/tutorial/create-module).

## Installation

```
go get github.com/abusomani/go-palette
```

## Usage

After installing the `go-palette` package, we start using it the following way.

### Import

A very useful feature of Go’s import statement are aliases. A common use case for import aliases is to provide a shorter alternative to a library’s package name.

In this example, we save ourselves having to type `palette` everytime we want to call one of the library’s functions, we just use `pal` instead.

```go
import (
pal "github.com/abusomani/go-palette/palette"
)
```

#### Example using Color names

```go
package main

import (
pal "github.com/abusomani/go-palette/palette"
)

func main() {
p := pal.New()
p.Println("This text is going to be in default color.")
p.SetOptions(pal.WithBackground(pal.Color(pal.BrightYellow)), pal.WithForeground(pal.Black))
p.Println("This text is going to be in black color with a yellow background.")
}

```
**Output**

![Code output](https://res.cloudinary.com/dahkenlmo/image/upload/v1678038119/code-output_lup9j1.png)

#### Example using Color codes

```go
package main

import (
pal "github.com/abusomani/go-palette/palette"
)

func main() {
p := pal.New()
p.Println("This text is going to be in default color.")
// We can use color codes from the palette to set as foreground and background colors
p.SetOptions(pal.WithBackground(pal.Color(11)), pal.WithForeground(0))
p.Println("This text is going to be in black color with a yellow background.")
}

```

**Output**

![Code output](https://res.cloudinary.com/dahkenlmo/image/upload/v1678038119/code-output_lup9j1.png)

#### Example using Special effects

```go
package main

import (
pal "github.com/abusomani/go-palette/palette"
)

func main() {
p := pal.New(pal.WithSpecialEffects([]pal.Special{pal.Bold}))
p.Println("Bold")
p.SetOptions(pal.WithSpecialEffects([]pal.Special{pal.Dim}))
p.Println("Dim")
p.SetOptions(pal.WithSpecialEffects([]pal.Special{pal.Italic}))
p.Println("Italic")
p.SetOptions(pal.WithSpecialEffects([]pal.Special{pal.Underline}))
p.Println("Underline")
p.SetOptions(pal.WithSpecialEffects([]pal.Special{pal.SlowBlink}))
p.Println("SlowBlink")
p.SetOptions(pal.WithSpecialEffects([]pal.Special{pal.Hidden}))
p.Print("Hidden")
p.SetOptions(pal.WithDefaults())
p.Println("<-Hidden")
p.SetOptions(pal.WithSpecialEffects([]pal.Special{pal.Strikethrough}))
p.Println("Strikethrough")
}

```

### Flush

Flush resets the Palette options with default values and disables the Palette.

```go
package main

import (
pal "github.com/abusomani/go-palette/palette"
)

func main() {
p := pal.New()
p.Println("This text is going to be in default color.")
// We can use color codes from the palette to set as foreground and background colors
p.SetOptions(pal.WithBackground(pal.BrightMagenta), pal.WithForeground(pal.Black))
p.Println("This text is going to be in black color with a bright magenta background.")
p.Flush()
p.Println("This text is going to be in default color.")
}

```
**Output**

![Flush output](https://res.cloudinary.com/dahkenlmo/image/upload/v1678038120/flush-code-output_ejrzoh.png)

## Limitations

### Windows
Go-Palette provides ANSI colors only. Windows does not support ANSI out of the box. To toggle the ANSI color support follow the steps listed in this [superuser thread](https://superuser.com/questions/413073/windows-console-with-ansi-colors-handling).

### Different behaviours in special effects
Go-Palette provides styled support using ANSI Color codes through escape sequences. This varies between different Terminals based on its setting. Refer [ANSI Escape Codes](https://en.wikipedia.org/wiki/ANSI_escape_code) for more details.

## License
Licensed under [MIT](./LICENSE)