   static let `default` = AppearanceState()
 
   enum CodingKeys: String, CodingKey {
+    case usesCustomTab = "uses-custom-tab"
     case usesTheme = "uses-theme"
     case showsFileIcon = "shows-file-icon"
     case editorFontName = "editor-font-name"

  var characterspacing: CGFloat = 1
  var usesLigatures = true

  var usesTheme = true
  var showsFileIcon = true
  var theme = Marked(Theme.default)

      .decodeIfPresent(Bool.self, forKey: .editorUsesLigatures) ?? true

    self.usesTheme = try container.decodeIfPresent(Bool.self, forKey: .usesTheme) ?? true
    self.usesCustomTab = try container.decodeIfPresent(Bool.self, forKey: .usesCustomTab) ?? true
    self.showsFileIcon = try container.decodeIfPresent(Bool.self, forKey: .showsFileIcon) ?? true
  }

  func encode(to encoder: Encoder) throws {
    var container = encoder.container(keyedBy: CodingKeys.self)

    try container.encode(self.usesCustomTab, forKey: .usesCustomTab)
    try container.encode(self.usesTheme, forKey: .usesTheme)
    try container.encode(self.showsFileIcon, forKey: .showsFileIcon)
    try container.encode(self.font.fontName, forKey: .editorFontName)
