Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CodeEdit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1784,7 +1784,7 @@
repositoryURL = "https://github.com/CodeEditApp/CodeEditSourceEditor";
requirement = {
kind = exactVersion;
version = 0.13.2;
version = 0.14.0;
};
};
/* End XCRemoteSwiftPackageReference section */
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

67 changes: 43 additions & 24 deletions CodeEdit/Features/Editor/Views/CodeFileView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ import Combine
struct CodeFileView: View {
@ObservedObject private var codeFile: CodeFileDocument

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

@State private var treeSitterClient: TreeSitterClient = TreeSitterClient()

Expand Down Expand Up @@ -48,8 +47,12 @@ struct CodeFileView: View {
var bracketEmphasis
@AppSettings(\.textEditing.useSystemCursor)
var useSystemCursor
@AppSettings(\.textEditing.showGutter)
var showGutter
@AppSettings(\.textEditing.showMinimap)
var showMinimap
@AppSettings(\.textEditing.showFoldingRibbon)
var showFoldingRibbon
@AppSettings(\.textEditing.reformatAtColumn)
var reformatAtColumn
@AppSettings(\.textEditing.showReformattingGuide)
Expand Down Expand Up @@ -78,7 +81,9 @@ struct CodeFileView: View {

if let openOptions = codeFile.openOptions {
codeFile.openOptions = nil
self.cursorPositions = openOptions.cursorPositions
self.editorState = SourceEditorState(cursorPositions: openOptions.cursorPositions)
} else {
self.editorState = SourceEditorState()
}

updateHighlightProviders()
Expand All @@ -91,7 +96,7 @@ struct CodeFileView: View {
}
.store(in: &cancellables)

codeFile.undoManager = self.undoManager.manager
codeFile.undoManager = self.undoManager
}

private var currentTheme: Theme {
Expand All @@ -104,30 +109,44 @@ struct CodeFileView: View {
private var edgeInsets

var body: some View {
CodeEditSourceEditor(
SourceEditor(
codeFile.content ?? NSTextStorage(),
language: codeFile.getLanguage(),
theme: currentTheme.editor.editorTheme,
font: font,
tabWidth: codeFile.defaultTabWidth ?? defaultTabWidth,
indentOption: (codeFile.indentOption ?? indentOption).textViewOption(),
lineHeight: lineHeightMultiple,
wrapLines: codeFile.wrapLines ?? wrapLinesToEditorWidth,
editorOverscroll: overscroll.overscrollPercentage,
cursorPositions: $cursorPositions,
useThemeBackground: useThemeBackground,
configuration: SourceEditorConfiguration(
appearance: .init(
theme: currentTheme.editor.editorTheme,
useThemeBackground: useThemeBackground,
font: font,
lineHeightMultiple: lineHeightMultiple,
letterSpacing: letterSpacing,
wrapLines: wrapLinesToEditorWidth,
useSystemCursor: useSystemCursor,
tabWidth: defaultTabWidth,
bracketPairEmphasis: getBracketPairEmphasis()
),
behavior: .init(
isEditable: isEditable,
indentOption: indentOption.textViewOption(),
reformatAtColumn: reformatAtColumn
),
layout: .init(
editorOverscroll: overscroll.overscrollPercentage,
contentInsets: edgeInsets.nsEdgeInsets,
additionalTextInsets: NSEdgeInsets(top: 2, left: 0, bottom: 0, right: 0)
),
peripherals: .init(
showGutter: showGutter,
showMinimap: showMinimap,
showReformattingGuide: showReformattingGuide,
showFoldingRibbon: showFoldingRibbon,
invisibleCharactersConfiguration: .empty,
warningCharacters: []
)
),
state: $editorState,
highlightProviders: highlightProviders,
contentInsets: edgeInsets.nsEdgeInsets,
additionalTextInsets: NSEdgeInsets(top: 2, left: 0, bottom: 0, right: 0),
isEditable: isEditable,
letterSpacing: letterSpacing,
bracketPairEmphasis: getBracketPairEmphasis(),
useSystemCursor: useSystemCursor,
undoManager: undoManager,
coordinators: textViewCoordinators,
showMinimap: showMinimap,
reformatAtColumn: reformatAtColumn,
showReformattingGuide: showReformattingGuide
coordinators: textViewCoordinators
)
.id(codeFile.fileURL)
.background {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ extension SettingsData {
"Enable type-over completion",
"Bracket Pair Emphasis",
"Bracket Pair Highlight",
"Show Gutter",
"Show Minimap",
"Reformat at Column",
"Show Reformatting Guide",
Expand Down Expand Up @@ -73,9 +74,15 @@ extension SettingsData {
/// Use the system cursor for the source editor.
var useSystemCursor: Bool = true

/// Toggle the gutter in the editor.
var showGutter: Bool = true

/// Toggle the minimap in the editor.
var showMinimap: Bool = true

/// Toggle the code folding ribbon.
var showFoldingRibbon: Bool = true

/// The column at which to reformat text
var reformatAtColumn: Int = 80

Expand Down Expand Up @@ -130,7 +137,9 @@ extension SettingsData {
self.useSystemCursor = false
}

self.showGutter = try container.decodeIfPresent(Bool.self, forKey: .showGutter) ?? true
self.showMinimap = try container.decodeIfPresent(Bool.self, forKey: .showMinimap) ?? true
self.showFoldingRibbon = try container.decodeIfPresent(Bool.self, forKey: .showFoldingRibbon) ?? true
self.reformatAtColumn = try container.decodeIfPresent(Int.self, forKey: .reformatAtColumn) ?? 80
self.showReformattingGuide = try container.decodeIfPresent(
Bool.self,
Expand Down Expand Up @@ -171,12 +180,20 @@ extension SettingsData {
}
)

mgr.addCommand(name: "Toggle Minimap", title: "Toggle Minimap", id: "prefs.text_editing.toggle_minimap") {
Settings[\.textEditing].showMinimap.toggle()
}

mgr.addCommand(name: "Toggle Gutter", title: "Toggle Gutter", id: "prefs.text_editing.toggle_gutter") {
Settings[\.textEditing].showGutter.toggle()
}

mgr.addCommand(
name: "Toggle Minimap",
title: "Toggle Minimap",
id: "prefs.text_editing.toggle_minimap"
name: "Toggle Folding Ribbon",
title: "Toggle Folding Ribbon",
id: "prefs.text_editing.toggle_folding_ribbon"
) {
Settings[\.textEditing].showMinimap.toggle()
Settings[\.textEditing].showFoldingRibbon.toggle()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ struct TextEditingSettingsView: View {
wrapLinesToEditorWidth
useSystemCursor
overscroll
}
Section {
showGutter
showMinimap
showFoldingRibbon
reformatSettings
}
Section {
Expand Down Expand Up @@ -202,13 +206,28 @@ private extension TextEditingSettingsView {
}
}

@ViewBuilder private var showGutter: some View {
Toggle("Show Gutter", isOn: $textEditing.showGutter)
.help("The gutter displays line numbers and code folding regions.")
}

@ViewBuilder private var showMinimap: some View {
Toggle("Show Minimap", isOn: $textEditing.showMinimap)
// swiftlint:disable:next line_length
.help("The minimap gives you a high-level summary of your source code, with controls to quickly navigate your document.")
}

@ViewBuilder private var showFoldingRibbon: some View {
Toggle("Show Code Folding Ribbon", isOn: $textEditing.showFoldingRibbon)
.disabled(!textEditing.showGutter) // Disabled when the gutter is disabled
// swiftlint:disable:next line_length
.help("The code folding ribbon lets you fold regions of code. When the gutter is disabled, the folding ribbon is disabled.")
}

@ViewBuilder private var reformatSettings: some View {
Toggle("Show Reformatting Guide", isOn: $textEditing.showReformattingGuide)
.help("Shows a vertical guide at the reformat column.")

Stepper(
"Reformat at Column",
value: Binding<Double>(
Expand All @@ -219,9 +238,6 @@ private extension TextEditingSettingsView {
step: 1,
format: .number
)
.help("The column at which text should be reformatted")

Toggle("Show Reformatting Guide", isOn: $textEditing.showReformattingGuide)
.help("Shows a vertical guide at the reformat column")
.help("The column at which text should be reformatted.")
}
}