color icon indicating copy to clipboard operation
color copied to clipboard

Colorized string doesn't get underlined correctly

Open nobe4 opened this issue 1 year ago • 0 comments

Consider the following code:

package main

import (
	"fmt"

	"github.com/fatih/color"
)

func main() {
	a := color.New(color.FgRed).SprintFunc()("aaa")
	b := color.New(color.FgBlue).SprintFunc()("bbb")
	c := color.New(color.Underline).SprintFunc()(a + b)
	fmt.Println(c)

	d := color.New(color.Underline).SprintFunc()("aaabbb")
	fmt.Println(d)
}

Image

I would expect the Underline to apply to the whole colorized string.

This is adapted of how I use it in

  • https://github.com/nobe4/gh-not/blob/005b274ccc71ae8e2bdf6ece2068de670f19f226/internal/colors/colors.go
  • https://github.com/nobe4/gh-not/blob/005b274ccc71ae8e2bdf6ece2068de670f19f226/internal/notifications/notifications.go#L71-L96

The issue seems to come from the usage of wrap in https://github.com/fatih/color/blob/main/color.go#L353-L357. It seems that unformat resets the entire format, not just the colors.

Is this expected? If so, which approach would you recommend to make a colorized string fully underlined?

Thanks!

nobe4 avatar Jun 11 '24 08:06 nobe4