Add iterm2terminal convert script
This commit is contained in:
parent
62d424720e
commit
d3e96e8812
1 changed files with 175 additions and 0 deletions
175
tools/iterm2terminal.swift
Executable file
175
tools/iterm2terminal.swift
Executable file
|
|
@ -0,0 +1,175 @@
|
|||
#!/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 [...]")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue