2016-02-14 1 views
4

Я использую табулятор, и я не могу заставить его работать с цветами. Я использую пакет github.com/fatih/color.Как получить цвета для работы с golang tabwriter?

В основном проблема заключается в том, что мне нужно вызвать tabwriter w.Flush(), чтобы получить цвета для рендеринга ... Я не могу переключать цвета, если я не назвал флеш.

Вызов флеша, в свою очередь, винты с форматированием табулятора.

Любые идеи о том, как объединить два?

package main 

    import "fmt" 
    import "text/tabwriter" 
    import "os" 
    import "github.com/fatih/color" 

    func main() { 
     w := new(tabwriter.Writer) 
     w.Init(os.Stderr, 0, 8, 0, '\t', 0) 
     color.Set(color.FgGreen) 
     fmt.Fprintln(w, "ID\tNAME\tSIZE\tFIELD1\tSTATUS\tSTATE") 
     // ------> Calling w.Flush() here cases problems. 
     color.Set(color.FgYellow) 
     fmt.Fprintln(w, "8617833164795356724\tfoo1\t1.1 Gb\t3\tsome_status\tsome_state") 
     fmt.Fprintln(w) 
     w.Flush() 
    } 
+0

Вероятно не подлежит. – Volker

ответ

3

Короткий ответ

Вы не можете.

Наивный ответ

Используйте метод color.Color.SprintFunc(), чтобы получить функцию и обернуть strigns с помощью этой функции.

Реальный ответ

Это не будет работать, потому что цвет задается с помощью специальной последовательности символов, которая не распознается tabwriter, поэтому эта строка будет короче по длине в два раза маркера (один для установки цвета и один для возврата к стандартному цвету).

Решение

Написать альтернативный tabwriter (algoerithm даже не комплекс), который признал последовательность символов цвета и игнорировать его.

0

Несмотря на то, что принятый ответ говорит, возможно, вам просто нужно быть очень осторожным относительно длины поля.

Оберните каждое «поле» (т. Е. Конкретную строку и столбец) с кодом цвета + сброс. Если все коды имеют одинаковую длину строки, tabwriter даст вам хороший результат.

У меня есть сырую демонстрацию здесь: https://play.golang.org/p/r6GNeV1gbH

enter image description here

Я не делал это в моем демо, но вы должны также добавить фоновые коды, а также (вы можете просто добавить их вместе, как в RedText + YellowBackground), предоставляя фон по умолчанию. Таким образом, все будет иметь одинаковую длину, и у вас также будет поддержка фона.

Обратите внимание, что я начинающий программист Go. Я не утверждаю, что мой код хорош.

Смежные вопросы