Search code examples
swiftcolorscommandcommand-line-interfaceansi-escape

Color ouput with Swift command line tool


I'm writing a command line tool with Swift and I'm having trouble displaying colors in my shell. I'm using the following code:

println("\033[31;32mhey\033[39;39m")

or even

NSFileHandle.fileHandleWithStandardOutput().writeData("\033[31;32mhey\033[39;39m".dataUsingEncoding(NSASCIIStringEncoding, allowLossyConversion: true)!)

It works when I use a simple echo in php (the text is displayed in green) but is there a reason it doesn't work in a Swift command line tool?

Thanks!


Solution

  • 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   37
    
    println("\u{001B}[0;33myellow")
    

    Hope it helps.