Skip to content

Commit d7e2167

Browse files
committed
Merge branch 'main' into feat/lsp-semantic-highlighter
2 parents 475ba3d + a6efad2 commit d7e2167

File tree

18 files changed

+176
-77
lines changed

18 files changed

+176
-77
lines changed

CodeEdit.xcodeproj/project.pbxproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@
419419
303E88462C276FD600EEA8D9 /* XCRemoteSwiftPackageReference "LanguageServerProtocol" */,
420420
6C4E37FA2C73E00700AEE7B5 /* XCRemoteSwiftPackageReference "SwiftTerm" */,
421421
6CB94D012CA1205100E8651C /* XCRemoteSwiftPackageReference "swift-async-algorithms" */,
422-
6CFE18222DA59C9F00A7B796 /* XCRemoteSwiftPackageReference "CodeEditSourceEditor" */,
422+
6CF368562DBBD274006A77FD /* XCRemoteSwiftPackageReference "CodeEditSourceEditor" */,
423423
);
424424
preferredProjectObjectVersion = 55;
425425
productRefGroup = B658FB2D27DA9E0F00EA4DBD /* Products */;
@@ -1745,12 +1745,12 @@
17451745
version = 1.0.1;
17461746
};
17471747
};
1748-
6CFE18222DA59C9F00A7B796 /* XCRemoteSwiftPackageReference "CodeEditSourceEditor" */ = {
1748+
6CF368562DBBD274006A77FD /* XCRemoteSwiftPackageReference "CodeEditSourceEditor" */ = {
17491749
isa = XCRemoteSwiftPackageReference;
17501750
repositoryURL = "https://github.com/CodeEditApp/CodeEditSourceEditor";
17511751
requirement = {
17521752
kind = upToNextMajorVersion;
1753-
minimumVersion = 0.11.0;
1753+
minimumVersion = 0.12.0;
17541754
};
17551755
};
17561756
/* End XCRemoteSwiftPackageReference section */

CodeEdit.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

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

CodeEdit/Features/CEWorkspaceSettings/Models/CEWorkspaceSettings.swift

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ final class CEWorkspaceSettings: ObservableObject {
1717

1818
private(set) var folderURL: URL
1919

20-
private var settingsURL: URL {
21-
folderURL.appending(path: "settings").appending(path: "json")
20+
var settingsURL: URL {
21+
folderURL.appending(path: "settings").appendingPathExtension("json")
2222
}
2323

2424
init(workspaceURL: URL) {
@@ -54,7 +54,17 @@ final class CEWorkspaceSettings: ObservableObject {
5454
/// Save``CEWorkspaceSettingsManager`` model to `.codeedit/settings.json`
5555
func savePreferences() throws {
5656
// If the user doesn't have any settings to save, don't save them.
57-
guard !settings.isEmpty() else { return }
57+
guard !settings.isEmpty() else {
58+
// Settings is empty, remove the file & directory if it's empty.
59+
if fileManager.fileExists(atPath: settingsURL.path()) {
60+
try fileManager.removeItem(at: settingsURL)
61+
62+
if try fileManager.contentsOfDirectory(atPath: folderURL.path()).isEmpty {
63+
try fileManager.removeItem(at: folderURL)
64+
}
65+
}
66+
return
67+
}
5868

5969
if !fileManager.fileExists(atPath: folderURL.path()) {
6070
try fileManager.createDirectory(at: folderURL, withIntermediateDirectories: true)

CodeEdit/Features/CEWorkspaceSettings/Views/CETaskFormView.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ struct CETaskFormView: View {
1212
@ObservedObject var task: CETask
1313
@State private var selectedEnvID: UUID?
1414

15-
@StateObject var settingsViewModel = SettingsViewModel()
1615
var body: some View {
1716
Form {
1817
Section {
@@ -85,7 +84,6 @@ struct CETaskFormView: View {
8584
}
8685
}
8786
.formStyle(.grouped)
88-
.environmentObject(settingsViewModel)
8987
}
9088

9189
func removeSelectedEnv() {
@@ -100,7 +98,3 @@ struct CETaskFormView: View {
10098
})
10199
}
102100
}
103-
104-
// #Preview {
105-
// CETaskFormView()
106-
// }

CodeEdit/Features/CEWorkspaceSettings/Views/CEWorkspaceSettingsView.swift

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ struct CEWorkspaceSettingsView: View {
1313
@EnvironmentObject var workspaceSettingsManager: CEWorkspaceSettings
1414
@EnvironmentObject var workspace: WorkspaceDocument
1515

16-
@StateObject var settingsViewModel = SettingsViewModel()
17-
1816
@State var selectedTaskID: UUID?
1917
@State var showAddTaskSheet: Bool = false
2018

@@ -68,7 +66,6 @@ struct CEWorkspaceSettingsView: View {
6866
}
6967
.padding()
7068
}
71-
.environmentObject(settingsViewModel)
7269
.sheet(isPresented: $showAddTaskSheet) {
7370
if let selectedTaskIndex = workspaceSettingsManager.settings.tasks.firstIndex(where: {
7471
$0.id == selectedTaskID

CodeEdit/Features/CEWorkspaceSettings/Views/EditCETaskView.swift

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,16 @@ struct EditCETaskView: View {
2323
Divider()
2424
HStack {
2525
Button(role: .destructive) {
26-
workspaceSettingsManager.settings.tasks.removeAll(where: {
27-
$0.id == task.id
28-
})
29-
try? workspaceSettingsManager.savePreferences()
30-
taskManager.deleteTask(taskID: task.id)
31-
self.dismiss()
26+
do {
27+
workspaceSettingsManager.settings.tasks.removeAll(where: {
28+
$0.id == task.id
29+
})
30+
try workspaceSettingsManager.savePreferences()
31+
taskManager.deleteTask(taskID: task.id)
32+
self.dismiss()
33+
} catch {
34+
NSAlert(error: error).runModal()
35+
}
3236
} label: {
3337
Text("Delete")
3438
.foregroundStyle(.red)
@@ -38,8 +42,12 @@ struct EditCETaskView: View {
3842
Spacer()
3943

4044
Button {
41-
try? workspaceSettingsManager.savePreferences()
42-
self.dismiss()
45+
do {
46+
try workspaceSettingsManager.savePreferences()
47+
self.dismiss()
48+
} catch {
49+
NSAlert(error: error).runModal()
50+
}
4351
} label: {
4452
Text("Done")
4553
.frame(minWidth: 56)

CodeEdit/Features/Editor/JumpBar/Views/EditorJumpBarView.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,19 @@ struct EditorJumpBarView: View {
2121
@Environment(\.controlActiveState)
2222
private var activeState
2323

24+
@Binding var codeFile: CodeFileDocument?
25+
2426
static let height = 28.0
2527

2628
init(
2729
file: CEWorkspaceFile?,
2830
shouldShowTabBar: Bool,
31+
codeFile: Binding<CodeFileDocument?>,
2932
tappedOpenFile: @escaping (CEWorkspaceFile) -> Void
3033
) {
3134
self.file = file ?? nil
3235
self.shouldShowTabBar = shouldShowTabBar
36+
self._codeFile = codeFile
3337
self.tappedOpenFile = tappedOpenFile
3438
}
3539

@@ -75,7 +79,7 @@ struct EditorJumpBarView: View {
7579
}
7680
.safeAreaInset(edge: .trailing, spacing: 0) {
7781
if !shouldShowTabBar {
78-
EditorTabBarTrailingAccessories()
82+
EditorTabBarTrailingAccessories(codeFile: $codeFile)
7983
}
8084
}
8185
.frame(height: Self.height, alignment: .center)

CodeEdit/Features/Editor/TabBar/Views/EditorTabBarTrailingAccessories.swift

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
import SwiftUI
99

1010
struct EditorTabBarTrailingAccessories: View {
11+
@AppSettings(\.textEditing.wrapLinesToEditorWidth)
12+
var wrapLinesToEditorWidth
13+
@AppSettings(\.textEditing.showMinimap)
14+
var showMinimap
15+
1116
@Environment(\.splitEditor)
1217
var splitEditor
1318

@@ -21,15 +26,49 @@ struct EditorTabBarTrailingAccessories: View {
2126

2227
@EnvironmentObject private var editor: Editor
2328

29+
@Binding var codeFile: CodeFileDocument?
30+
2431
var body: some View {
25-
HStack(spacing: 0) {
32+
HStack(spacing: 6) {
33+
// Once more options are implemented that are available for non-code documents, remove this if statement
34+
if let codeFile {
35+
editorOptionsMenu(codeFile: codeFile)
36+
Divider()
37+
.padding(.vertical, 10)
38+
}
2639
splitviewButton
2740
}
41+
.buttonStyle(.icon)
42+
.disabled(editorManager.isFocusingActiveEditor)
43+
.opacity(editorManager.isFocusingActiveEditor ? 0.5 : 1)
2844
.padding(.horizontal, 7)
2945
.opacity(activeState != .inactive ? 1.0 : 0.5)
3046
.frame(maxHeight: .infinity) // Fill out vertical spaces.
3147
}
3248

49+
func editorOptionsMenu(codeFile: CodeFileDocument) -> some View {
50+
// This is a button so it gets the same styling from the Group in `body`.
51+
Button(action: {}, label: { Image(systemName: "slider.horizontal.3") })
52+
.overlay {
53+
Menu {
54+
Toggle("Show Minimap", isOn: $showMinimap)
55+
.keyboardShortcut("M", modifiers: [.command, .shift, .control])
56+
Divider()
57+
Toggle(
58+
"Wrap Lines",
59+
isOn: Binding(
60+
get: { codeFile.wrapLines ?? wrapLinesToEditorWidth },
61+
set: {
62+
codeFile.wrapLines = $0
63+
}
64+
)
65+
)
66+
} label: {}
67+
.menuStyle(.borderlessButton)
68+
.menuIndicator(.hidden)
69+
}
70+
}
71+
3372
var splitviewButton: some View {
3473
Group {
3574
switch (editor.parent?.axis, modifierKeys.contains(.option)) {
@@ -53,9 +92,6 @@ struct EditorTabBarTrailingAccessories: View {
5392
EmptyView()
5493
}
5594
}
56-
.buttonStyle(.icon)
57-
.disabled(editorManager.isFocusingActiveEditor)
58-
.opacity(editorManager.isFocusingActiveEditor ? 0.5 : 1)
5995
}
6096

6197
func split(edge: Edge) {
@@ -73,6 +109,6 @@ struct EditorTabBarTrailingAccessories: View {
73109

74110
struct TabBarTrailingAccessories_Previews: PreviewProvider {
75111
static var previews: some View {
76-
EditorTabBarTrailingAccessories()
112+
EditorTabBarTrailingAccessories(codeFile: .constant(nil))
77113
}
78114
}

CodeEdit/Features/Editor/TabBar/Views/EditorTabBarView.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import SwiftUI
99

1010
struct EditorTabBarView: View {
1111
let hasTopInsets: Bool
12+
@Binding var codeFile: CodeFileDocument?
1213
/// The height of tab bar.
1314
/// I am not making it a private variable because it may need to be used in outside views.
1415
static let height = 28.0
@@ -21,7 +22,7 @@ struct EditorTabBarView: View {
2122
.accessibilityElement(children: .contain)
2223
.accessibilityLabel("Tab Bar")
2324
.accessibilityIdentifier("TabBar")
24-
EditorTabBarTrailingAccessories()
25+
EditorTabBarTrailingAccessories(codeFile: $codeFile)
2526
.padding(.top, hasTopInsets ? -1 : 0)
2627
}
2728
.frame(height: EditorTabBarView.height - (hasTopInsets ? 1 : 0))

CodeEdit/Features/Editor/Views/CodeFileView.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ struct CodeFileView: View {
4848
var bracketEmphasis
4949
@AppSettings(\.textEditing.useSystemCursor)
5050
var useSystemCursor
51+
@AppSettings(\.textEditing.showMinimap)
52+
var showMinimap
5153

5254
@Environment(\.colorScheme)
5355
private var colorScheme
@@ -132,7 +134,8 @@ struct CodeFileView: View {
132134
bracketPairEmphasis: getBracketPairEmphasis(),
133135
useSystemCursor: useSystemCursor,
134136
undoManager: undoManager,
135-
coordinators: textViewCoordinators
137+
coordinators: textViewCoordinators,
138+
showMinimap: showMinimap
136139
)
137140
.id(codeFile.fileURL)
138141
.background {

0 commit comments

Comments
 (0)