Sources/OrgApp/KeymapLoader.swift
21 lines · 893 bytes
1import Foundation
2import OrgCore
3
4@MainActor
5public enum KeymapLoader {
6 /// `<data dir>/keymap.toml`.
7 public static var userFile: URL { WorkspaceModel.defaultDirectory.appendingPathComponent("keymap.toml") }
8
9 /// The preset with the user's file on top, and the problems found in the file. A missing
10 /// file adds nothing; a file that isn't valid TOML adds nothing and is reported.
11 public static func load(_ preset: KeymapPreset, userFile: URL = userFile) -> (keymap: Keymap, problems: [String]) {
12 guard let text = try? String(contentsOf: userFile, encoding: .utf8) else { return (preset.keymap, []) }
13 var problems: [String] = []
14 do {
15 let user = try Keymap(toml: text, problems: &problems)
16 return (.layered([preset.keymap, user]), problems)
17 } catch {
18 return (preset.keymap, ["\(error)"])
19 }
20 }
21}