Skip to content

Commit bcd5f11

Browse files
Update CESE (0.14.0), Add Gutter & Folding Settings (#2077)
1 parent 422b7bf commit bcd5f11

File tree

5 files changed

+89
-37
lines changed

5 files changed

+89
-37
lines changed

CodeEdit.xcodeproj/project.pbxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1784,7 +1784,7 @@
17841784
repositoryURL = "https://github.com/CodeEditApp/CodeEditSourceEditor";
17851785
requirement = {
17861786
kind = exactVersion;
1787-
version = 0.13.2;
1787+
version = 0.14.0;
17881788
};
17891789
};
17901790
/* 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/Editor/Views/CodeFileView.swift

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ import Combine
1616
struct CodeFileView: View {
1717
@ObservedObject private var codeFile: CodeFileDocument
1818

19-
/// The current cursor positions in the view
20-
@State private var cursorPositions: [CursorPosition] = []
19+
@State private var editorState: SourceEditorState
2120

2221
@State private var treeSitterClient: TreeSitterClient = TreeSitterClient()
2322

@@ -48,8 +47,12 @@ struct CodeFileView: View {
4847
var bracketEmphasis
4948
@AppSettings(\.textEditing.useSystemCursor)
5049
var useSystemCursor
50+
@AppSettings(\.textEditing.showGutter)
51+
var showGutter
5152
@AppSettings(\.textEditing.showMinimap)
5253
var showMinimap
54+
@AppSettings(\.textEditing.showFoldingRibbon)
55+
var showFoldingRibbon
5356
@AppSettings(\.textEditing.reformatAtColumn)
5457
var reformatAtColumn
5558
@AppSettings(\.textEditing.showReformattingGuide)
@@ -78,7 +81,9 @@ struct CodeFileView: View {
7881

7982
if let openOptions = codeFile.openOptions {
8083
codeFile.openOptions = nil
81-
self.cursorPositions = openOptions.cursorPositions
84+
self.editorState = SourceEditorState(cursorPositions: openOptions.cursorPositions)
85+
} else {
86+
self.editorState = SourceEditorState()
8287
}
8388

8489
updateHighlightProviders()
@@ -91,7 +96,7 @@ struct CodeFileView: View {
9196
}
9297
.store(in: &cancellables)
9398

94-
codeFile.undoManager = self.undoManager.manager
99+
codeFile.undoManager = self.undoManager
95100
}
96101

97102
private var currentTheme: Theme {
@@ -104,30 +109,44 @@ struct CodeFileView: View {
104109
private var edgeInsets
105110

106111
var body: some View {
107-
CodeEditSourceEditor(
112+
SourceEditor(
108113
codeFile.content ?? NSTextStorage(),
109114
language: codeFile.getLanguage(),
110-
theme: currentTheme.editor.editorTheme,
111-
font: font,
112-
tabWidth: codeFile.defaultTabWidth ?? defaultTabWidth,
113-
indentOption: (codeFile.indentOption ?? indentOption).textViewOption(),
114-
lineHeight: lineHeightMultiple,
115-
wrapLines: codeFile.wrapLines ?? wrapLinesToEditorWidth,
116-
editorOverscroll: overscroll.overscrollPercentage,
117-
cursorPositions: $cursorPositions,
118-
useThemeBackground: useThemeBackground,
115+
configuration: SourceEditorConfiguration(
116+
appearance: .init(
117+
theme: currentTheme.editor.editorTheme,
118+
useThemeBackground: useThemeBackground,
119+
font: font,
120+
lineHeightMultiple: lineHeightMultiple,
121+
letterSpacing: letterSpacing,
122+
wrapLines: wrapLinesToEditorWidth,
123+
useSystemCursor: useSystemCursor,
124+
tabWidth: defaultTabWidth,
125+
bracketPairEmphasis: getBracketPairEmphasis()
126+
),
127+
behavior: .init(
128+
isEditable: isEditable,
129+
indentOption: indentOption.textViewOption(),
130+
reformatAtColumn: reformatAtColumn
131+
),
132+
layout: .init(
133+
editorOverscroll: overscroll.overscrollPercentage,
134+
contentInsets: edgeInsets.nsEdgeInsets,
135+
additionalTextInsets: NSEdgeInsets(top: 2, left: 0, bottom: 0, right: 0)
136+
),
137+
peripherals: .init(
138+
showGutter: showGutter,
139+
showMinimap: showMinimap,
140+
showReformattingGuide: showReformattingGuide,
141+
showFoldingRibbon: showFoldingRibbon,
142+
invisibleCharactersConfiguration: .empty,
143+
warningCharacters: []
144+
)
145+
),
146+
state: $editorState,
119147
highlightProviders: highlightProviders,
120-
contentInsets: edgeInsets.nsEdgeInsets,
121-
additionalTextInsets: NSEdgeInsets(top: 2, left: 0, bottom: 0, right: 0),
122-
isEditable: isEditable,
123-
letterSpacing: letterSpacing,
124-
bracketPairEmphasis: getBracketPairEmphasis(),
125-
useSystemCursor: useSystemCursor,
126148
undoManager: undoManager,
127-
coordinators: textViewCoordinators,
128-
showMinimap: showMinimap,
129-
reformatAtColumn: reformatAtColumn,
130-
showReformattingGuide: showReformattingGuide
149+
coordinators: textViewCoordinators
131150
)
132151
.id(codeFile.fileURL)
133152
.background {

CodeEdit/Features/Settings/Pages/TextEditingSettings/Models/TextEditingSettings.swift

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ extension SettingsData {
2828
"Enable type-over completion",
2929
"Bracket Pair Emphasis",
3030
"Bracket Pair Highlight",
31+
"Show Gutter",
3132
"Show Minimap",
3233
"Reformat at Column",
3334
"Show Reformatting Guide",
@@ -73,9 +74,15 @@ extension SettingsData {
7374
/// Use the system cursor for the source editor.
7475
var useSystemCursor: Bool = true
7576

77+
/// Toggle the gutter in the editor.
78+
var showGutter: Bool = true
79+
7680
/// Toggle the minimap in the editor.
7781
var showMinimap: Bool = true
7882

83+
/// Toggle the code folding ribbon.
84+
var showFoldingRibbon: Bool = true
85+
7986
/// The column at which to reformat text
8087
var reformatAtColumn: Int = 80
8188

@@ -130,7 +137,9 @@ extension SettingsData {
130137
self.useSystemCursor = false
131138
}
132139

140+
self.showGutter = try container.decodeIfPresent(Bool.self, forKey: .showGutter) ?? true
133141
self.showMinimap = try container.decodeIfPresent(Bool.self, forKey: .showMinimap) ?? true
142+
self.showFoldingRibbon = try container.decodeIfPresent(Bool.self, forKey: .showFoldingRibbon) ?? true
134143
self.reformatAtColumn = try container.decodeIfPresent(Int.self, forKey: .reformatAtColumn) ?? 80
135144
self.showReformattingGuide = try container.decodeIfPresent(
136145
Bool.self,
@@ -171,12 +180,20 @@ extension SettingsData {
171180
}
172181
)
173182

183+
mgr.addCommand(name: "Toggle Minimap", title: "Toggle Minimap", id: "prefs.text_editing.toggle_minimap") {
184+
Settings[\.textEditing].showMinimap.toggle()
185+
}
186+
187+
mgr.addCommand(name: "Toggle Gutter", title: "Toggle Gutter", id: "prefs.text_editing.toggle_gutter") {
188+
Settings[\.textEditing].showGutter.toggle()
189+
}
190+
174191
mgr.addCommand(
175-
name: "Toggle Minimap",
176-
title: "Toggle Minimap",
177-
id: "prefs.text_editing.toggle_minimap"
192+
name: "Toggle Folding Ribbon",
193+
title: "Toggle Folding Ribbon",
194+
id: "prefs.text_editing.toggle_folding_ribbon"
178195
) {
179-
Settings[\.textEditing].showMinimap.toggle()
196+
Settings[\.textEditing].showFoldingRibbon.toggle()
180197
}
181198
}
182199

CodeEdit/Features/Settings/Pages/TextEditingSettings/TextEditingSettingsView.swift

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ struct TextEditingSettingsView: View {
2020
wrapLinesToEditorWidth
2121
useSystemCursor
2222
overscroll
23+
}
24+
Section {
25+
showGutter
2326
showMinimap
27+
showFoldingRibbon
2428
reformatSettings
2529
}
2630
Section {
@@ -202,13 +206,28 @@ private extension TextEditingSettingsView {
202206
}
203207
}
204208

209+
@ViewBuilder private var showGutter: some View {
210+
Toggle("Show Gutter", isOn: $textEditing.showGutter)
211+
.help("The gutter displays line numbers and code folding regions.")
212+
}
213+
205214
@ViewBuilder private var showMinimap: some View {
206215
Toggle("Show Minimap", isOn: $textEditing.showMinimap)
207216
// swiftlint:disable:next line_length
208217
.help("The minimap gives you a high-level summary of your source code, with controls to quickly navigate your document.")
209218
}
210219

220+
@ViewBuilder private var showFoldingRibbon: some View {
221+
Toggle("Show Code Folding Ribbon", isOn: $textEditing.showFoldingRibbon)
222+
.disabled(!textEditing.showGutter) // Disabled when the gutter is disabled
223+
// swiftlint:disable:next line_length
224+
.help("The code folding ribbon lets you fold regions of code. When the gutter is disabled, the folding ribbon is disabled.")
225+
}
226+
211227
@ViewBuilder private var reformatSettings: some View {
228+
Toggle("Show Reformatting Guide", isOn: $textEditing.showReformattingGuide)
229+
.help("Shows a vertical guide at the reformat column.")
230+
212231
Stepper(
213232
"Reformat at Column",
214233
value: Binding<Double>(
@@ -219,9 +238,6 @@ private extension TextEditingSettingsView {
219238
step: 1,
220239
format: .number
221240
)
222-
.help("The column at which text should be reformatted")
223-
224-
Toggle("Show Reformatting Guide", isOn: $textEditing.showReformattingGuide)
225-
.help("Shows a vertical guide at the reformat column")
241+
.help("The column at which text should be reformatted.")
226242
}
227243
}

0 commit comments

Comments
 (0)