Color ouput with Swift command line tool Color ouput with Swift command line tool swift swift

Color ouput with Swift command line tool


Swift has built in unicode support. This invalidates using of back slash. So that I use color codes with "\u{}" syntax. Here is a println code which works perfectly on terminal.

// \u{001B}[\(attribute code like bold, dim, normal);\(color code)m// Color codes// black   30// red     31// green   32// yellow  33// blue    34// magenta 35// cyan    36// white   37println("\u{001B}[0;33myellow")

Hope it helps.


Based on @cyt answer, I've written a simple enum with these colors and also overloaded + operator so you can print using that enum.

It's all up on Github, but it's really that simple:

enum ANSIColors: String {    case black = "\u{001B}[0;30m"    case red = "\u{001B}[0;31m"    case green = "\u{001B}[0;32m"    case yellow = "\u{001B}[0;33m"    case blue = "\u{001B}[0;34m"    case magenta = "\u{001B}[0;35m"    case cyan = "\u{001B}[0;36m"    case white = "\u{001B}[0;37m"    func name() -> String {        switch self {        case .black: return "Black"        case .red: return "Red"        case .green: return "Green"        case .yellow: return "Yellow"        case .blue: return "Blue"        case .magenta: return "Magenta"        case .cyan: return "Cyan"        case .white: return "White"        }    }    static func all() -> [ANSIColors] {        return [.black, .red, .green, .yellow, .blue, .magenta, .cyan, .white]    }}func + (let left: ANSIColors, let right: String) -> String {    return left.rawValue + right}// END// Demo:for c in ANSIColors.all() {    println(c + "This is printed in " + c.name())}


You can use Rainbow if you don't mind using it as a framework.

import Rainbowprint("Red text".red)print("Yellow background".onYellow)print("Light green text on white background".lightGreen.onWhite)

https://github.com/onevcat/Rainbow