Skip to content

Commit 304a808

Browse files
committed
WIP: config
1 parent 0cb6ea0 commit 304a808

File tree

13 files changed

+388
-51
lines changed

13 files changed

+388
-51
lines changed

.idea/codeStyles/Project.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

AeroSpace.xcodeproj/project.pbxproj

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
/* Begin PBXBuildFile section */
1010
07FF7938628995F68DFEB524 /* ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F99E8C4FD17A1D939C41F1 /* ViewModel.swift */; };
1111
080DAA83BADA766D94A2BD3C /* Workspace.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38A4C333EA5B4D4527DD97D4 /* Workspace.swift */; };
12+
082EECCB2607F31DCBBF3870 /* defaultConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA7CD89E786588324DFB5575 /* defaultConfig.swift */; };
1213
115F5CA4BEB80B645E66D198 /* NSScreenEx.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF3BB3DD434C75536217CB88 /* NSScreenEx.swift */; };
14+
1C46EBB55D401C0D1AFD50F0 /* CollectionEx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51CE37C1B8D858C81A396F40 /* CollectionEx.swift */; };
1315
1CB4082BE5C95CA8CD52BED9 /* Maybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 345148B22F8A8F85109229AE /* Maybe.swift */; };
1416
2F8DC074DAB97DC87E07A559 /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9CAC977020A08D0227FAFB2 /* Bundle.swift */; };
1517
4005ECE237BD9230F74CA917 /* TreeNodeEx.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8C39B0C4E4888832129C4C7 /* TreeNodeEx.swift */; };
@@ -18,7 +20,6 @@
1820
64A058E536F1EEF7F01043AF /* TOMLKit in Frameworks */ = {isa = PBXBuildFile; productRef = EC8E4F2CA4FF8884F9F59975 /* TOMLKit */; };
1921
66E6CDA75DDD5E4B9647EDE2 /* AeroSpaceApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E81623E8954701269A22322 /* AeroSpaceApp.swift */; };
2022
6820E6846AE51B6988B6F673 /* utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD02433B4415EEB163074CE5 /* utils.swift */; };
21-
7035674CE8D4D0D5D43FAD95 /* Toml.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDB0A5C2842534F121A0C430 /* Toml.swift */; };
2223
783B0B965BA45D7A2943F7BF /* TilingContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E05FB0C7158C8B6DECBD603 /* TilingContainer.swift */; };
2324
78EE0CEF814ABDBA67941B84 /* Rect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B788A95DD3C267878E05B5 /* Rect.swift */; };
2425
7FE92DDAC2F094C83A177914 /* MacApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6296D5F9AFE5F266EE4B1D0 /* MacApp.swift */; };
@@ -32,7 +33,9 @@
3233
B1E2002BB8F70F2555AAA82D /* TreeNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D295CA45172ADBDB1E4DF708 /* TreeNode.swift */; };
3334
B3702BB393A9B03CCAE4C60E /* refresh.swift in Sources */ = {isa = PBXBuildFile; fileRef = 526B113159987FA43EA41120 /* refresh.swift */; };
3435
C0A88261ECF505FC5648FC0A /* OptionalEx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9EDFD4A9F45182CA6E0BD7B /* OptionalEx.swift */; };
36+
C39C2054893A6506C35732D7 /* config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 651C5EE18862C252795811B3 /* config.swift */; };
3537
E2FD8E2B2D2BE6B88BF8E8AD /* accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE605CF46DE6377C69B9D49D /* accessibility.swift */; };
38+
F2AFA702961A1D653EB7D269 /* command.swift in Sources */ = {isa = PBXBuildFile; fileRef = 776E3F4EE298A9C69C97EF7F /* command.swift */; };
3639
/* End PBXBuildFile section */
3740

3841
/* Begin PBXFileReference section */
@@ -45,13 +48,17 @@
4548
38A4C333EA5B4D4527DD97D4 /* Workspace.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Workspace.swift; sourceTree = "<group>"; };
4649
3C2E5977331398421A4FC168 /* GlobalObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalObserver.swift; sourceTree = "<group>"; };
4750
3E05FB0C7158C8B6DECBD603 /* TilingContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TilingContainer.swift; sourceTree = "<group>"; };
51+
51CE37C1B8D858C81A396F40 /* CollectionEx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollectionEx.swift; sourceTree = "<group>"; };
4852
526B113159987FA43EA41120 /* refresh.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = refresh.swift; sourceTree = "<group>"; };
53+
651C5EE18862C252795811B3 /* config.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = config.swift; sourceTree = "<group>"; };
4954
6935AF0A2DB3D186D1C6218F /* NSWorkspaceEx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSWorkspaceEx.swift; sourceTree = "<group>"; };
55+
776E3F4EE298A9C69C97EF7F /* command.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = command.swift; sourceTree = "<group>"; };
5056
7E6F3930E3BF5D8196A20E9B /* axObservers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = axObservers.swift; sourceTree = "<group>"; };
5157
883D7F7F87FBE7D0BDE4E87F /* ArrayEx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrayEx.swift; sourceTree = "<group>"; };
5258
A9EDFD4A9F45182CA6E0BD7B /* OptionalEx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OptionalEx.swift; sourceTree = "<group>"; };
5359
AAE5DCAEC5EE619CE33859E7 /* SequenceEx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SequenceEx.swift; sourceTree = "<group>"; };
5460
AF3BB3DD434C75536217CB88 /* NSScreenEx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSScreenEx.swift; sourceTree = "<group>"; };
61+
BA7CD89E786588324DFB5575 /* defaultConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = defaultConfig.swift; sourceTree = "<group>"; };
5562
BD02433B4415EEB163074CE5 /* utils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = utils.swift; sourceTree = "<group>"; };
5663
BEF353340822CD20E9DAB3EC /* AeroSpace.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AeroSpace.entitlements; sourceTree = "<group>"; };
5764
D295CA45172ADBDB1E4DF708 /* TreeNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TreeNode.swift; sourceTree = "<group>"; };
@@ -62,7 +69,6 @@
6269
F6507EBAA795220FD0C05384 /* Monitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Monitor.swift; sourceTree = "<group>"; };
6370
F8C39B0C4E4888832129C4C7 /* TreeNodeEx.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TreeNodeEx.swift; sourceTree = "<group>"; };
6471
F9CAC977020A08D0227FAFB2 /* Bundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bundle.swift; sourceTree = "<group>"; };
65-
FDB0A5C2842534F121A0C430 /* Toml.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Toml.swift; sourceTree = "<group>"; };
6672
/* End PBXFileReference section */
6773

6874
/* Begin PBXFrameworksBuildPhase section */
@@ -97,20 +103,22 @@
97103
);
98104
sourceTree = "<group>";
99105
};
100-
62BEA6F49E6648E2EE3C208F /* Products */ = {
106+
50A41C4CCFC95C514CA1EAD5 /* config */ = {
101107
isa = PBXGroup;
102108
children = (
103-
09685297933511208058F7CF /* AeroSpace.app */,
109+
776E3F4EE298A9C69C97EF7F /* command.swift */,
110+
651C5EE18862C252795811B3 /* config.swift */,
111+
BA7CD89E786588324DFB5575 /* defaultConfig.swift */,
104112
);
105-
name = Products;
113+
path = config;
106114
sourceTree = "<group>";
107115
};
108-
80F16ED76205CA1AC4E0BF3E /* settings */ = {
116+
62BEA6F49E6648E2EE3C208F /* Products */ = {
109117
isa = PBXGroup;
110118
children = (
111-
FDB0A5C2842534F121A0C430 /* Toml.swift */,
119+
09685297933511208058F7CF /* AeroSpace.app */,
112120
);
113-
path = settings;
121+
name = Products;
114122
sourceTree = "<group>";
115123
};
116124
8338180CE208CBDCD6D8E911 /* src */ = {
@@ -126,8 +134,8 @@
126134
526B113159987FA43EA41120 /* refresh.swift */,
127135
24F99E8C4FD17A1D939C41F1 /* ViewModel.swift */,
128136
89B36C927EF9F6CB9CE830C7 /* axWrappers */,
137+
50A41C4CCFC95C514CA1EAD5 /* config */,
129138
38E5F06C862662755065FF1D /* model */,
130-
80F16ED76205CA1AC4E0BF3E /* settings */,
131139
C136937AA077E63558E9707C /* util */,
132140
);
133141
path = src;
@@ -147,6 +155,7 @@
147155
isa = PBXGroup;
148156
children = (
149157
883D7F7F87FBE7D0BDE4E87F /* ArrayEx.swift */,
158+
51CE37C1B8D858C81A396F40 /* CollectionEx.swift */,
150159
345148B22F8A8F85109229AE /* Maybe.swift */,
151160
F6507EBAA795220FD0C05384 /* Monitor.swift */,
152161
AF3BB3DD434C75536217CB88 /* NSScreenEx.swift */,
@@ -237,6 +246,7 @@
237246
66E6CDA75DDD5E4B9647EDE2 /* AeroSpaceApp.swift in Sources */,
238247
A2CBF9674964F9083BB198D2 /* ArrayEx.swift in Sources */,
239248
2F8DC074DAB97DC87E07A559 /* Bundle.swift in Sources */,
249+
1C46EBB55D401C0D1AFD50F0 /* CollectionEx.swift in Sources */,
240250
B0D0C37BAE7E7F0D0FF1E9FC /* GlobalObserver.swift in Sources */,
241251
7FE92DDAC2F094C83A177914 /* MacApp.swift in Sources */,
242252
518B9E5AC031C24C7C84CD70 /* MacWindow.swift in Sources */,
@@ -248,13 +258,15 @@
248258
78EE0CEF814ABDBA67941B84 /* Rect.swift in Sources */,
249259
AE76A183D0454E4C8ADCE380 /* SequenceEx.swift in Sources */,
250260
783B0B965BA45D7A2943F7BF /* TilingContainer.swift in Sources */,
251-
7035674CE8D4D0D5D43FAD95 /* Toml.swift in Sources */,
252261
B1E2002BB8F70F2555AAA82D /* TreeNode.swift in Sources */,
253262
4005ECE237BD9230F74CA917 /* TreeNodeEx.swift in Sources */,
254263
07FF7938628995F68DFEB524 /* ViewModel.swift in Sources */,
255264
080DAA83BADA766D94A2BD3C /* Workspace.swift in Sources */,
256265
E2FD8E2B2D2BE6B88BF8E8AD /* accessibility.swift in Sources */,
257266
96593DF93A69CA2E05189A3F /* axObservers.swift in Sources */,
267+
F2AFA702961A1D653EB7D269 /* command.swift in Sources */,
268+
C39C2054893A6506C35732D7 /* config.swift in Sources */,
269+
082EECCB2607F31DCBBF3870 /* defaultConfig.swift in Sources */,
258270
B3702BB393A9B03CCAE4C60E /* refresh.swift in Sources */,
259271
6820E6846AE51B6988B6F673 /* utils.swift in Sources */,
260272
);

src/AeroSpaceApp.swift

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,29 @@ struct Setting {
1717
let modifiers: NSEvent.ModifierFlags
1818
}
1919

20+
//osascript -e 'tell app "Terminal"
21+
//activate
22+
//do script "tail -f ~/log/0.txt"
23+
//end tell'
24+
2025
@main
2126
struct AeroSpaceApp: App {
2227
var hotKeys: [HotKey] = [] // Keep hotkeys in memory
2328
@StateObject var viewModel = ViewModel.shared
2429

2530
init() {
26-
checkAccessibilityPermissions()
27-
GlobalObserver.initObserver()
28-
for setting in settings {
29-
hotKeys.append(HotKey(key: setting.hotkey, modifiers: setting.modifiers, keyUpHandler: {
30-
switchToWorkspace(Workspace.get(byName: setting.name))
31-
}))
32-
}
33-
refresh()
34-
test()
31+
reloadConfig()
32+
33+
//checkAccessibilityPermissions()
34+
//GlobalObserver.initObserver()
35+
//for setting in settings {
36+
// hotKeys.append(HotKey(key: setting.hotkey, modifiers: setting.modifiers, keyUpHandler: {
37+
// switchToWorkspace(Workspace.get(byName: setting.name))
38+
// }))
39+
//}
40+
//refresh()
41+
//test()
42+
3543
}
3644

3745
var body: some Scene {
@@ -44,16 +52,20 @@ struct AeroSpaceApp: App {
4452
switchToWorkspace(workspace)
4553
} label: {
4654
Toggle(isOn: workspace.name == viewModel.focusedWorkspaceTrayText
47-
? Binding(get: { true }, set: { _, _ in })
48-
: Binding(get: { false }, set: { _, _ in })) {
55+
? Binding(get: { true }, set: { _, _ in })
56+
: Binding(get: { false }, set: { _, _ in })) {
4957
let monitor = (workspace.assignedMonitor?.name).flatMap { " - \($0)" } ?? ""
5058
Text(workspace.name + monitor).font(.system(.body, design: .monospaced))
5159
}
5260
}
5361
}
5462
Divider()
55-
Button("Quit \(Bundle.appName)") { NSApplication.shared.terminate(nil) }
56-
.keyboardShortcut("Q", modifiers: .command)
63+
Button("Reload config") {
64+
} // todo
65+
Button("Quit \(Bundle.appName)") {
66+
NSApplication.shared.terminate(nil)
67+
}
68+
.keyboardShortcut("Q", modifiers: .command)
5769
} label: {
5870
// .font(.system(.body, design: .monospaced)) doesn't work unfortunately :(
5971
Text(viewModel.focusedWorkspaceTrayText)

src/ViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ class ViewModel: ObservableObject {
66
private init() {
77
}
88

9-
@Published var focusedWorkspaceTrayText: String = currentEmptyWorkspace.name // settings.first?.name ?? "W: 1"
9+
@Published var focusedWorkspaceTrayText: String = currentEmptyWorkspace.name // config.first?.name ?? "W: 1"
1010
}
1111

src/config/command.swift

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import Foundation
2+
3+
protocol Command {
4+
func run()
5+
}
6+
7+
struct ChainedCommand: Command {
8+
let subCommands: [Command]
9+
10+
func run() {
11+
for command in subCommands {
12+
command.run()
13+
}
14+
}
15+
}
16+
17+
enum NoOpCommand: Command {
18+
case instance
19+
20+
func run() {} // It does nothing
21+
}
22+
23+
struct WorkspaceCommand : Command {
24+
let workspaceName: String
25+
26+
func run() {
27+
switchToWorkspace(Workspace.get(byName: workspaceName))
28+
}
29+
}
30+
31+
struct ModeCommand: Command {
32+
let idToActivate: String
33+
34+
func run() {
35+
for mode in config.modes {
36+
for binding in mode.bindings {
37+
if mode.id == idToActivate {
38+
binding.activate()
39+
} else {
40+
binding.deactivate()
41+
}
42+
}
43+
}
44+
}
45+
}
46+
47+
struct BashCommand: Command {
48+
let bashCommand: String
49+
50+
func run() {
51+
do {
52+
try Process.run(URL(filePath: "/bin/bash"), arguments: ["-c", bashCommand])
53+
} catch {
54+
}
55+
}
56+
}
57+
58+
struct FocusCommand: Command {
59+
let direction: Direction
60+
61+
enum Direction {
62+
case up
63+
case down
64+
case left
65+
case right
66+
67+
case parent
68+
case child
69+
case floating
70+
case tiling
71+
case toggle_tiling_floating
72+
}
73+
74+
func run() {
75+
// todo
76+
}
77+
}

0 commit comments

Comments
 (0)