Skip to content

Commit 27903a7

Browse files
committed
updated levels and added keys arguments functionality
1 parent 485e62a commit 27903a7

File tree

2 files changed

+65
-41
lines changed

2 files changed

+65
-41
lines changed

Sources/prefs/Preferences.swift

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,55 +16,55 @@ struct Preferences {
1616

1717
let suiteName: String
1818
let userDefaults: UserDefaults
19-
20-
19+
20+
2121
var allKeys: [String] {
2222
userDefaults.dictionaryRepresentation().map { $0.key }
2323
}
2424

25-
var systemGlobalKeys: [String] {
25+
var networkGlobalKeys: [String] {
2626
keylist(kCFPreferencesAnyApplication, kCFPreferencesAnyUser, kCFPreferencesAnyHost)
2727
}
28-
29-
var systemHostGlobalKeys: [String] {
28+
29+
var systemGlobalKeys: [String] {
3030
keylist(kCFPreferencesAnyApplication, kCFPreferencesAnyUser, kCFPreferencesCurrentHost)
3131
}
32-
32+
3333
var hostGlobalKeys: [String] {
34-
keylist(kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost)
34+
keylist(kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost)
3535
}
36-
36+
3737
var userGlobalKeys: [String] {
3838
keylist(kCFPreferencesAnyApplication, kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
3939
}
40-
40+
4141
var globalKeys: [String] {
4242
var globalKeys = Set(userGlobalKeys)
43-
globalKeys.formUnion(systemGlobalKeys)
43+
globalKeys.formUnion(networkGlobalKeys)
4444
globalKeys.formUnion(hostGlobalKeys)
4545
return Array(globalKeys)
4646
}
47-
47+
4848
var managedKeys: [String] {
4949
allKeys.filter { userDefaults.objectIsForced(forKey: $0) }
5050
}
51-
51+
5252
var userKeys: [String] {
5353
keylist(suiteName as CFString, kCFPreferencesCurrentUser, kCFPreferencesAnyHost)
5454
}
55-
56-
var systemKeys: [String] {
55+
56+
var networkKeys: [String] {
5757
keylist(suiteName as CFString, kCFPreferencesAnyUser, kCFPreferencesAnyHost)
5858
}
59-
60-
var systemHostKeys: [String] {
61-
keylist(suiteName as CFString, kCFPreferencesAnyUser, kCFPreferencesCurrentHost)
59+
60+
var systemKeys: [String] {
61+
keylist(suiteName as CFString, kCFPreferencesAnyUser, kCFPreferencesCurrentHost)
6262
}
63-
63+
6464
var hostKeys: [String] {
6565
keylist(suiteName as CFString, kCFPreferencesCurrentUser, kCFPreferencesCurrentHost)
6666
}
67-
67+
6868
var volatileKeys: [String] {
6969
let vDomains = userDefaults.volatileDomainNames
7070
var volatileKeys = Set<String>()
@@ -75,17 +75,17 @@ struct Preferences {
7575
}
7676
return Array(volatileKeys)
7777
}
78-
78+
7979
// MARK: functions
80-
80+
8181
func keylist(_ applicationID: CFString, _ userName: CFString, _ hostName: CFString) -> [String] {
8282
CFPreferencesCopyKeyList(applicationID, userName, hostName) as? [String] ?? []
8383
}
84-
84+
8585
func isManaged(_ key: String) -> Bool {
8686
userDefaults.objectIsForced(forKey: key)
8787
}
88-
88+
8989
func level(for key: String) -> String? {
9090
if !allKeys.contains(where: {$0 == key}) {
9191
return nil
@@ -111,16 +111,16 @@ struct Preferences {
111111
if systemGlobalKeys.contains(where: {$0 == key}) {
112112
return "global/system"
113113
}
114-
if systemHostGlobalKeys.contains(where: {$0 == key}) {
115-
return "global/system/host"
114+
if networkKeys.contains(where: {$0 == key}) {
115+
return "network"
116116
}
117-
if systemHostKeys.contains(where: {$0 == key}) {
118-
return "system/host/app"
117+
if networkGlobalKeys.contains(where: {$0 == key}) {
118+
return "global/network"
119119
}
120120
if volatileKeys.contains(where: {$0 == key}) {
121121
return "volatile"
122122
}
123-
123+
124124
return nil
125125
}
126126
}

Sources/prefs/Prefs.swift

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,25 @@ struct Prefs: ParsableCommand {
1313
static var configuration = CommandConfiguration(
1414
commandName: "prefs",
1515
abstract: "Shows preference/defaults settings from all levels together with their level",
16+
usage: """
17+
prefs <domain>
18+
prefs <domain> [<keys> ...]
19+
""",
1620
version: "0.1"
1721
)
1822

1923

2024
// MARK: arguments and flags
2125

22-
@Argument(help: "the app identifier or preference domain")
23-
var applicationID: String
24-
25-
@Argument(help: "preference keys to show. When no key is given all values will be shown")
26-
var keys: [String] = []
27-
2826
@Flag(
2927
name: [.customShort("g"), .customLong("globals")],
30-
help: "show values from GlobalPreferences files as well"
28+
help: "show values from GlobalPreferences files"
3129
)
3230
var showGlobals = false
3331

3432
@Flag(
3533
name: [.customLong("volatiles")],
36-
help: "show values from GlobalPreferences files as well"
34+
help: "show values from volatile domains"
3735
)
3836
var showVolatiles = false
3937

@@ -43,20 +41,49 @@ struct Prefs: ParsableCommand {
4341
)
4442
var showOnlyValue = false
4543

44+
@Argument(
45+
help: ArgumentHelp(
46+
"the app identifier or preference domain",
47+
valueName: "domain"
48+
)
49+
)
50+
var applicationID: String
51+
52+
@Argument(help: "preference keys to show. When no key is given all values will be shown")
53+
var keys: [String] = []
54+
55+
4656
// MARK: functions
4757
func exit(_ message: Any, code: Int32) throws -> Never {
4858
print(message)
4959
throw ExitCode(code)
5060
}
5161

62+
func printDetail(_ key: String, preferences: Preferences) {
63+
guard let value = preferences.userDefaults.object(forKey: key) else { return }
64+
let level = preferences.level(for: key) ?? "unknown"
65+
if showOnlyValue {
66+
print(value)
67+
} else {
68+
print("\(key) [\(level)]: \(value)")
69+
}
70+
}
71+
5272

5373
// MARK: run
5474
func run() throws {
5575
guard let preferences = Preferences(suiteName: applicationID)
5676
else {
5777
try exit("cannot get defaults for '\(applicationID)'", code: 11)
5878
}
59-
79+
80+
if keys.count > 0 {
81+
for key in keys {
82+
printDetail(key, preferences: preferences)
83+
}
84+
return
85+
}
86+
6087
// cache these for performance
6188
let globalKeys = preferences.globalKeys
6289
//let volatileKeys = preferences.volatileKeys
@@ -70,10 +97,7 @@ struct Prefs: ParsableCommand {
7097
continue
7198
}
7299

73-
guard let value = preferences.userDefaults.object(forKey: key) else { continue }
74-
75-
let level = preferences.level(for: key) ?? "unknown"
76-
print("\(key) [\(level)]: \(value)")
100+
printDetail(key, preferences: preferences)
77101
}
78102
}
79103
}

0 commit comments

Comments
 (0)