2015-01-06 17 views
7

スウィフトを使用してコマンドラインツールを作成していますが、シェルのカラー表示に問題があります。私はPHPで簡単なエコーを使用する場合には動作します(テキストが緑色で表示されます)が、それはdoesnの理由があるスウィフトコマンドラインツールを使用したカラー出力

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

あるいは

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

:私は、次のコードを使用していますSwiftコマンドラインツールで作業しますか?

ありがとうございます!

+0

ここにチェックアウトこの素晴らしいソリューションを:https://stackoverflow.com/questions/9005769/any-way-to-print-in-color-with-nslog – Martian2049

答えて

19

スイフトにはユニコードサポートが組み込まれています。これは、バックスラッシュの使用を無効にします。色コードを "\ u {}"構文で使用するようにします。ここには、端末上で完璧に動作するprintlnコードがあります。

// \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") 

希望します。

+0

それが実際に動作しますが、ありがとう! –

+1

iOS用のswift 1.2プログラミングではうまく動作しませんが、出力に色が表示されません – eliocs

+1

Xcodeコンソールは色を印刷しません.XcodeColorsプラグインをインストールしないでください - > https:// github .com/robbiehanson/XcodeColors – eliocs

17

@cyt答えに基づいて、私はこれらの色を持つ単純な列挙型を書かれており、また、あなたがその列挙型を使用して印刷することができるように+演算子をオーバーロードしました。

これは、すべてのup on Githubだが、それは本当に簡単です:

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()) 
} 
+1

'' \ u {001B} [0; 0m "'はデフォルトの色にリセットします。 – devios1

5

あなたはフレームワークとしてそれを使用して気にしない場合は、レインボーを使用することができます。

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

https://github.com/onevcat/Rainbow