diff --git a/ShhShell/Settings/AppSettings.swift b/ShhShell/Settings/AppSettings.swift index 2071433..9fbdb7a 100644 --- a/ShhShell/Settings/AppSettings.swift +++ b/ShhShell/Settings/AppSettings.swift @@ -11,7 +11,7 @@ import SwiftTerm struct AppSettings: Codable, Sendable, Equatable { var scrollback: CGFloat = 10_000 - var cursorStyle: CursorShape = .block + var cursorType: CursorType = CursorType() var locationPersist: Bool = false var bellSound: Bool = false var bellHaptic: Bool = true @@ -23,6 +23,7 @@ struct AppSettings: Codable, Sendable, Equatable { enum CursorShape: Codable, CaseIterable, Equatable, CustomStringConvertible { case block case bar + case underline var description: String { switch self { @@ -30,10 +31,32 @@ enum CursorShape: Codable, CaseIterable, Equatable, CustomStringConvertible { return "Block" case .bar: return "Bar" + case .underline: + return "Underline" } } } +struct CursorType: Codable, Equatable, CustomStringConvertible { + var cursorShape: CursorShape = .block + var blink: Bool = true + + var stCursorStyle: SwiftTerm.CursorStyle { + switch cursorShape { + case .block: + return blink ? .blinkBlock : .steadyBlock + case .bar: + return blink ? .blinkBar : .steadyBar + case .underline: + return blink ? .blinkUnderline : .steadyUnderline + } + } + + var description: String { + return (blink ? "Blinking" : "Steady") + " " + cursorShape.description + } +} + enum TerminalFilter: Codable, CaseIterable, Equatable, CustomStringConvertible { case none case crt diff --git a/ShhShell/Views/Settings/SettingsView.swift b/ShhShell/Views/Settings/SettingsView.swift index efdd814..4b040c5 100644 --- a/ShhShell/Views/Settings/SettingsView.swift +++ b/ShhShell/Views/Settings/SettingsView.swift @@ -26,12 +26,18 @@ struct SettingsView: View { } Slider( value: $hostsManager.settings.scrollback, - in: 1_000...50_000, + in: 100...10_000, step: 1_000.0 ) } - Picker("Cursor", selection: $hostsManager.settings.cursorStyle) { + Picker("Blink", selection: $hostsManager.settings.cursorType.blink) { + Text("Blink").tag(true) + Text("Steady").tag(false) + } + .pickerStyle(.segmented) + + Picker("Cursor", selection: $hostsManager.settings.cursorType.cursorShape) { ForEach(CursorShape.allCases, id: \.self) { type in Text(type.description).tag(type) }