Forked from leonbreedt/iTermColorsToTerminalColors.swift
Last active
August 29, 2015 14:20
-
-
Save bylatt/f01a559ec465b677f768 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/xcrun swift | |
import AppKit | |
enum iTermColors: String { | |
case Ansi0 = "Ansi 0 Color" | |
case Ansi1 = "Ansi 1 Color" | |
case Ansi2 = "Ansi 2 Color" | |
case Ansi3 = "Ansi 3 Color" | |
case Ansi4 = "Ansi 4 Color" | |
case Ansi5 = "Ansi 5 Color" | |
case Ansi6 = "Ansi 6 Color" | |
case Ansi7 = "Ansi 7 Color" | |
case Ansi8 = "Ansi 8 Color" | |
case Ansi9 = "Ansi 9 Color" | |
case Ansi10 = "Ansi 10 Color" | |
case Ansi11 = "Ansi 11 Color" | |
case Ansi12 = "Ansi 12 Color" | |
case Ansi13 = "Ansi 13 Color" | |
case Ansi14 = "Ansi 14 Color" | |
case Ansi15 = "Ansi 15 Color" | |
case CursorText = "Cursor Text Color" | |
case SelectedText = "Selected Text Color" | |
case Foreground = "Foreground Color" | |
case Background = "Background Color" | |
case Bold = "Bold Color" | |
case Selection = "Selection Color" | |
case Cursor = "Cursor Color" | |
} | |
enum TerminalColors: String { | |
case AnsiBlack = "ANSIBlackColor" | |
case AnsiRed = "ANSIRedColor" | |
case AnsiGreen = "ANSIGreenColor" | |
case AnsiYellow = "ANSIYellowColor" | |
case AnsiBlue = "ANSIBlueColor" | |
case AnsiMagenta = "ANSIMagentaColor" | |
case AnsiCyan = "ANSICyanColor" | |
case AnsiWhite = "ANSIWhiteColor" | |
case AnsiBrightBlack = "ANSIBrightBlackColor" | |
case AnsiBrightRed = "ANSIBrightRedColor" | |
case AnsiBrightGreen = "ANSIBrightGreenColor" | |
case AnsiBrightYellow = "ANSIBrightYellowColor" | |
case AnsiBrightBlue = "ANSIBrightBlueColor" | |
case AnsiBrightMagenta = "ANSIBrightMagentaColor" | |
case AnsiBrightCyan = "ANSIBrightCyanColor" | |
case AnsiBrightWhite = "ANSIBrightWhiteColor" | |
case Background = "BackgroundColor" | |
case Text = "TextColor" | |
case BoldText = "BoldTextColor" | |
case Selection = "SelectionColor" | |
case Cursor = "CursorColor" | |
} | |
let iTermColor2TerminalColor = [ | |
iTermColors.Ansi0: TerminalColors.AnsiBlack, | |
iTermColors.Ansi1: TerminalColors.AnsiRed, | |
iTermColors.Ansi2: TerminalColors.AnsiGreen, | |
iTermColors.Ansi3: TerminalColors.AnsiYellow, | |
iTermColors.Ansi4: TerminalColors.AnsiBlue, | |
iTermColors.Ansi5: TerminalColors.AnsiMagenta, | |
iTermColors.Ansi6: TerminalColors.AnsiCyan, | |
iTermColors.Ansi7: TerminalColors.AnsiWhite, | |
iTermColors.Ansi8: TerminalColors.AnsiBrightBlack, | |
iTermColors.Ansi9: TerminalColors.AnsiBrightRed, | |
iTermColors.Ansi10: TerminalColors.AnsiBrightGreen, | |
iTermColors.Ansi11: TerminalColors.AnsiBrightYellow, | |
iTermColors.Ansi12: TerminalColors.AnsiBrightBlue, | |
iTermColors.Ansi13: TerminalColors.AnsiBrightMagenta, | |
iTermColors.Ansi14: TerminalColors.AnsiBrightCyan, | |
iTermColors.Ansi15: TerminalColors.AnsiBrightWhite, | |
iTermColors.Background: TerminalColors.Background, | |
iTermColors.Foreground: TerminalColors.Text, | |
iTermColors.Selection: TerminalColors.Selection, | |
iTermColors.Bold: TerminalColors.BoldText, | |
iTermColors.Cursor: TerminalColors.Cursor, | |
] | |
struct iTermColorComponent { | |
static let Red = "Red Component" | |
static let Green = "Green Component" | |
static let Blue = "Blue Component" | |
} | |
func itermColorSchemeToTerminalColorScheme(itermColorScheme: NSDictionary, #name: String) -> NSDictionary { | |
var terminalColorScheme: [String: AnyObject] = [ | |
"name" : name, | |
"type" : "Window Settings", | |
"ProfileCurrentVersion" : 2.04, | |
"columnCount": 90, | |
"rowCount": 50, | |
] | |
if let font = archivedFontWithName("PragmataPro", 14) { | |
terminalColorScheme["Font"] = font | |
} | |
for (rawKey, rawValue) in itermColorScheme { | |
if let name = rawKey as? String { | |
if let key = iTermColors(rawValue: name) { | |
if let terminalKey = iTermColor2TerminalColor[key] { | |
if let itermDict = rawValue as? NSDictionary { | |
let (r, g, b) = ( | |
floatValue(itermDict[iTermColorComponent.Red]), | |
floatValue(itermDict[iTermColorComponent.Green]), | |
floatValue(itermDict[iTermColorComponent.Blue])) | |
let color = NSColor(deviceRed: r, green: g, blue: b, alpha: 1) | |
let colorData = NSKeyedArchiver.archivedDataWithRootObject(color) | |
terminalColorScheme[terminalKey.rawValue] = colorData | |
} | |
} | |
} | |
} | |
} | |
return terminalColorScheme | |
} | |
func archivedFontWithName(name: String, size: CGFloat) -> NSData? { | |
if let font = NSFont(name: name, size: size) { | |
return NSKeyedArchiver.archivedDataWithRootObject(font) | |
} | |
return nil | |
} | |
func floatValue(value: AnyObject?) -> CGFloat { | |
if let num = value as? CGFloat { | |
return num | |
} | |
return 0 | |
} | |
func arguments() -> [String] { | |
var args: [String] = [] | |
for i in 1...Process.argc { | |
if let arg = String.fromCString(Process.unsafeArgv[Int(i)]) { | |
args.append(arg) | |
} | |
} | |
return args | |
} | |
extension String { | |
var fullPath: String { | |
get { | |
let path = stringByStandardizingPath | |
var directory = path.stringByDeletingLastPathComponent | |
if count(directory) == 0 { | |
directory = NSFileManager.defaultManager().currentDirectoryPath | |
} | |
return directory.stringByAppendingPathComponent(path) | |
} | |
} | |
} | |
func convertToTerminalColors(itermFile: String, terminalFile: String) { | |
if let itermScheme = NSDictionary(contentsOfFile: itermFile) { | |
println("converting \(itermFile) -> \(terminalFile)") | |
let terminalName = terminalFile.lastPathComponent.stringByDeletingPathExtension | |
let terminalScheme = itermColorSchemeToTerminalColorScheme(itermScheme, name: terminalName) | |
terminalScheme.writeToFile(terminalFile, atomically: true) | |
} else { | |
println("unable to load \(itermFile)") | |
} | |
} | |
let args = arguments() | |
if args.count > 0 { | |
for itermFile in args { | |
let path = itermFile.fullPath | |
let folder = path.stringByDeletingLastPathComponent | |
let schemeName = path.lastPathComponent.stringByDeletingPathExtension | |
let terminalPath = "\(folder)/\(schemeName).terminal" | |
convertToTerminalColors(path, terminalPath) | |
} | |
} else { | |
println("usage: iTermColorsToTerminalColors FILE.itermcolors [...]") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment