Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MichaelOhlssen/5c8c928b6cd5d453c0b4 to your computer and use it in GitHub Desktop.
Save MichaelOhlssen/5c8c928b6cd5d453c0b4 to your computer and use it in GitHub Desktop.
Convert iTerm2 color scheme to Terminal.app color scheme. To use, just save to disk and run it like you would any script. NOTE: Needs Xcode 6.1 installed.
#!/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