cli/color.go (101 lines of code) (raw):

// Copyright (c) 2009-present, Alibaba Cloud All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "fmt" "io" "os" ) const ( ColorOff = "\033[0m" // Reset Color // Regular Colors Black = "\033[0;30m" // Black Red = "\033[0;31m" // Red Green = "\033[0;32m" // Green Yellow = "\033[0;33m" // Yellow Blue = "\033[0;34m" // Blue Purple = "\033[0;35m" // Purple Cyan = "\033[0;36m" // Cyan White = "\033[0;37m" // White // Bold BBlack = "\033[1;30m" // Black BRed = "\033[1;31m" // Red BGreen = "\033[1;32m" // Green BYellow = "\033[1;33m" // Yellow BBlue = "\033[1;34m" // Blue BPurple = "\033[1;35m" // Purple BCyan = "\033[1;36m" // Cyan BWhite = "\033[1;37m" // White // Underline UBlack = "\033[4;30m" // Black URed = "\033[4;31m" // Red UGreen = "\033[4;32m" // Green UYellow = "\033[4;33m" // Yellow UBlue = "\033[4;34m" // Blue UPurple = "\033[4;35m" // Purple UCyan = "\033[4;36m" // Cyan UWhite = "\033[4;37m" // White // Background OnBlack = "\033[40m" // Black OnRed = "\033[41m" // Red OnGreen = "\033[42m" // Green OnYellow = "\033[43m" // Yellow OnBlue = "\033[44m" // Blue OnPurple = "\033[45m" // Purple OnCyan = "\033[46m" // Cyan OnWhite = "\033[47m" // White // High Intensty IBlack = "\033[0;90m" // Black IRed = "\033[0;91m" // Red IGreen = "\033[0;92m" // Green IYellow = "\033[0;93m" // Yellow IBlue = "\033[0;94m" // Blue IPurple = "\033[0;95m" // Purple ICyan = "\033[0;96m" // Cyan IWhite = "\033[0;97m" // White // Bold High Intensty BIBlack = "\033[1;90m" // Black BIRed = "\033[1;91m" // Red BIGreen = "\033[1;92m" // Green BIYellow = "\033[1;93m" // Yellow BIBlue = "\033[1;94m" // Blue BIPurple = "\033[1;95m" // Purple BICyan = "\033[1;96m" // Cyan BIWhite = "\033[1;97m" // White // High Intensty backgrounds OnIBlack = "\033[0;100m" // Black OnIRed = "\033[0;101m" // Red OnIGreen = "\033[0;102m" // Green OnIYellow = "\033[0;103m" // Yellow OnIBlue = "\033[0;104m" // Blue OnIPurple = "\033[10;95m" // Purple OnICyan = "\033[0;106m" // Cyan OnIWhite = "\033[0;107m" // White ) const ( DebugColor = White InfoColor = Cyan NoticeColor = BYellow WarningColor = BPurple ErrorColor = BRed ) func isNoColor() bool { var isTTY = os.FileMode(0)&os.ModeDevice != 0 var NO_COLOR = os.Getenv("NO_COLOR") return isTTY || NO_COLOR == "true" || NO_COLOR == "1" } func Colorized(color string, a ...interface{}) string { if !isNoColor() && color != "" { return color + fmt.Sprint(a...) + ColorOff } return fmt.Sprint(a...) } func PrintWithColor(w io.Writer, color string, a ...interface{}) (n int, err error) { return Print(w, Colorized(color, a...)) } func Notice(w io.Writer, a ...interface{}) (n int, err error) { return Print(w, Colorized(NoticeColor, a...)) } func Error(w io.Writer, a ...interface{}) (n int, err error) { return Print(w, Colorized(ErrorColor, a...)) } func Noticef(w io.Writer, format string, args ...interface{}) (n int, err error) { return Notice(w, fmt.Sprintf(format, args...)) } func Errorf(w io.Writer, format string, args ...interface{}) (n int, err error) { return Error(w, fmt.Sprintf(format, args...)) } func PrintfWithColor(w io.Writer, color string, format string, args ...interface{}) (n int, err error) { return PrintWithColor(w, color, fmt.Sprintf(format, args...)) }