macos: swiftlint 'control_statement' rule

This commit is contained in:
Jon Parise
2026-02-19 18:34:37 -05:00
parent a8903c1bb1
commit 56d67ce88f
43 changed files with 285 additions and 286 deletions

View File

@@ -13,7 +13,6 @@ disabled_rules:
- type_body_length
# TODO
- control_statement
- deployment_target
- empty_enum_arguments
- empty_parentheses_with_trailing_closure

View File

@@ -197,7 +197,7 @@ class AppDelegate: NSObject,
applicationLaunchTime = ProcessInfo.processInfo.systemUptime
// Check if secure input was enabled when we last quit.
if (UserDefaults.standard.bool(forKey: "SecureInput") != SecureInput.shared.enabled) {
if UserDefaults.standard.bool(forKey: "SecureInput") != SecureInput.shared.enabled {
toggleSecureInput(self)
}
@@ -280,7 +280,7 @@ class AppDelegate: NSObject,
guard let appearance = change.newValue else { return }
guard let app = self.ghostty.app else { return }
let scheme: ghostty_color_scheme_e
if (appearance.isDark) {
if appearance.isDark {
scheme = GHOSTTY_COLOR_SCHEME_DARK
} else {
scheme = GHOSTTY_COLOR_SCHEME_LIGHT
@@ -332,7 +332,7 @@ class AppDelegate: NSObject,
self.setDockBadge(nil)
// First launch stuff
if (!applicationHasBecomeActive) {
if !applicationHasBecomeActive {
applicationHasBecomeActive = true
// Let's launch our first window. We only do this if we have no other windows. It
@@ -353,7 +353,7 @@ class AppDelegate: NSObject,
func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply {
let windows = NSApplication.shared.windows
if (windows.isEmpty) { return .terminateNow }
if windows.isEmpty { return .terminateNow }
// If we've already accepted to install an update, then we don't need to
// confirm quit. The user is already expecting the update to happen.
@@ -380,7 +380,7 @@ class AppDelegate: NSObject,
guard let keyword = AEKeyword("why?") else { break why }
if let why = event.attributeDescriptor(forKeyword: keyword) {
switch (why.typeCodeValue) {
switch why.typeCodeValue {
case kAEShutDown:
fallthrough
@@ -397,7 +397,7 @@ class AppDelegate: NSObject,
}
// If our app says we don't need to confirm, we can exit now.
if (!ghostty.needsConfirmQuit) { return .terminateNow }
if !ghostty.needsConfirmQuit { return .terminateNow }
// We have some visible window. Show an app-wide modal to confirm quitting.
let alert = NSAlert()
@@ -406,7 +406,7 @@ class AppDelegate: NSObject,
alert.addButton(withTitle: "Close Ghostty")
alert.addButton(withTitle: "Cancel")
alert.alertStyle = .warning
switch (alert.runModal()) {
switch alert.runModal() {
case .alertFirstButtonReturn:
return .terminateNow
@@ -460,7 +460,7 @@ class AppDelegate: NSObject,
// Initialize the surface config which will be used to create the tab or window for the opened file.
var config = Ghostty.SurfaceConfiguration()
if (isDirectory.boolValue) {
if isDirectory.boolValue {
// When opening a directory, check the configuration to decide
// whether to open in a new tab or new window.
config.workingDirectory = filename
@@ -498,7 +498,7 @@ class AppDelegate: NSObject,
alert.addButton(withTitle: "Allow")
alert.addButton(withTitle: "Cancel")
alert.alertStyle = .warning
switch (alert.runModal()) {
switch alert.runModal() {
case .alertFirstButtonReturn:
break
@@ -746,7 +746,7 @@ class AppDelegate: NSObject,
guard let ghostty = self.ghostty.app else { return event }
// Build our event input and call ghostty
if (ghostty_app_key(ghostty, event.ghosttyKeyEvent(GHOSTTY_ACTION_PRESS))) {
if ghostty_app_key(ghostty, event.ghosttyKeyEvent(GHOSTTY_ACTION_PRESS)) {
// The key was used so we want to stop it from going to our Mac app
Ghostty.logger.debug("local key event handled event=\(event)")
return nil
@@ -761,7 +761,7 @@ class AppDelegate: NSObject,
@objc private func quickTerminalDidChangeVisibility(_ notification: Notification) {
guard let quickController = notification.object as? QuickTerminalController else { return }
self.menuQuickTerminal?.state = if (quickController.visible) { .on } else { .off }
self.menuQuickTerminal?.state = if quickController.visible { .on } else { .off }
}
@objc private func ghosttyConfigDidChange(_ notification: Notification) {
@@ -777,11 +777,11 @@ class AppDelegate: NSObject,
}
@objc private func ghosttyBellDidRing(_ notification: Notification) {
if (ghostty.config.bellFeatures.contains(.system)) {
if ghostty.config.bellFeatures.contains(.system) {
NSSound.beep()
}
if (ghostty.config.bellFeatures.contains(.attention)) {
if ghostty.config.bellFeatures.contains(.attention) {
// Bounce the dock icon if we're not focused.
NSApp.requestUserAttention(.informationalRequest)
@@ -861,7 +861,7 @@ class AppDelegate: NSObject,
// Depending on the "window-save-state" setting we have to set the NSQuitAlwaysKeepsWindows
// configuration. This is the only way to carefully control whether macOS invokes the
// state restoration system.
switch (config.windowSaveState) {
switch config.windowSaveState {
case "never": UserDefaults.standard.setValue(false, forKey: "NSQuitAlwaysKeepsWindows")
case "always": UserDefaults.standard.setValue(true, forKey: "NSQuitAlwaysKeepsWindows")
case "default": fallthrough
@@ -900,7 +900,7 @@ class AppDelegate: NSObject,
DispatchQueue.main.async { self.syncAppearance(config: config) }
// Decide whether to hide/unhide app from dock and app switcher
switch (config.macosHidden) {
switch config.macosHidden {
case .never:
NSApp.setActivationPolicy(.regular)
@@ -911,16 +911,16 @@ class AppDelegate: NSObject,
// If we have configuration errors, we need to show them.
let c = ConfigurationErrorsController.sharedInstance
c.errors = config.errors
if (c.errors.count > 0) {
if (c.window == nil || !c.window!.isVisible) {
if c.errors.count > 0 {
if c.window == nil || !c.window!.isVisible {
c.showWindow(self)
}
}
// We need to handle our global event tap depending on if there are global
// events that we care about in Ghostty.
if (ghostty_app_has_global_keybinds(ghostty.app!)) {
if (timeSinceLaunch > 5) {
if ghostty_app_has_global_keybinds(ghostty.app!) {
if timeSinceLaunch > 5 {
// If the process has been running for awhile we enable right away
// because no windows are likely to pop up.
GlobalEventTap.shared.enable()
@@ -952,7 +952,7 @@ class AppDelegate: NSObject,
var appIcon: NSImage?
var appIconName: String? = config.macosIcon.rawValue
switch (config.macosIcon) {
switch config.macosIcon {
case let icon where icon.assetName != nil:
appIcon = NSImage(named: icon.assetName!)!
@@ -1108,7 +1108,7 @@ class AppDelegate: NSObject,
func setSecureInput(_ mode: Ghostty.SetSecureInput) {
let input = SecureInput.shared
switch (mode) {
switch mode {
case .on:
input.global = true
@@ -1118,7 +1118,7 @@ class AppDelegate: NSObject,
case .toggle:
input.global.toggle()
}
self.menuSecureInput?.state = if (input.global) { .on } else { .off }
self.menuSecureInput?.state = if input.global { .on } else { .off }
UserDefaults.standard.set(input.global, forKey: "SecureInput")
}
@@ -1288,7 +1288,7 @@ extension AppDelegate {
@IBAction func useAsDefault(_ sender: NSMenuItem) {
let ud = UserDefaults.standard
let key = TerminalWindow.defaultLevelKey
if (menuFloatOnTop?.state == .on) {
if menuFloatOnTop?.state == .on {
ud.set(NSWindow.Level.floating, forKey: key)
} else {
ud.removeObject(forKey: key)

View File

@@ -28,7 +28,7 @@ func requestIntentPermission() async -> Bool {
await withCheckedContinuation { continuation in
Task { @MainActor in
if let delegate = NSApp.delegate as? AppDelegate {
switch (delegate.ghostty.config.macosShortcuts) {
switch delegate.ghostty.config.macosShortcuts {
case .allow:
continuation.resume(returning: true)
return

View File

@@ -33,7 +33,7 @@ class ClipboardConfirmationController: NSWindowController {
override func windowDidLoad() {
guard let window = window else { return }
switch (request) {
switch request {
case .paste:
window.title = "Warning: Potentially Unsafe Paste"
case .osc_52_read, .osc_52_write:

View File

@@ -74,7 +74,7 @@ struct ClipboardConfirmationView: View {
// If we didn't unhide anything, we just send an unhide to be safe.
// I don't think the count can go negative on NSCursor so this handles
// scenarios cursor is hidden outside of our own NSCursor usage.
if (cursorHiddenCount == 0) {
if cursorHiddenCount == 0 {
_ = Cursor.unhide()
}
}

View File

@@ -19,7 +19,7 @@ struct ColorizedGhosttyIcon {
guard let crt = NSImage(named: "CustomIconCRT") else { return nil }
guard let gloss = NSImage(named: "CustomIconGloss") else { return nil }
let baseName = switch (frame) {
let baseName = switch frame {
case .aluminum: "CustomIconBaseAluminum"
case .beige: "CustomIconBaseBeige"
case .chrome: "CustomIconBaseChrome"

View File

@@ -106,7 +106,7 @@ struct CommandPaletteView: View {
VStack(alignment: .leading, spacing: 0) {
CommandPaletteQuery(query: $query, isTextFieldFocused: _isTextFieldFocused) { event in
switch (event) {
switch event {
case .exit:
isPresented = false

View File

@@ -33,7 +33,7 @@ class GlobalEventTap {
// If enabling fails due to permissions, this will start a timer to retry since
// accessibility permissions take affect immediately.
func enable() {
if (eventTap != nil) {
if eventTap != nil {
// Already enabled
return
}
@@ -44,7 +44,7 @@ class GlobalEventTap {
}
// Try to enable the event tap immediately. If this succeeds then we're done!
if (tryEnable()) {
if tryEnable() {
return
}
@@ -142,7 +142,7 @@ fileprivate func cgEventFlagsChangedHandler(
// Build our event input and call ghostty
let key_ev = event.ghosttyKeyEvent(GHOSTTY_ACTION_PRESS)
if (ghostty_app_key(ghostty, key_ev)) {
if ghostty_app_key(ghostty, key_ev) {
GlobalEventTap.logger.info("global key event handled event=\(event)")
return nil
}

View File

@@ -316,7 +316,7 @@ class QuickTerminalController: BaseTerminalController {
// MARK: Methods
func toggle() {
if (visible) {
if visible {
animateOut()
} else {
animateIn()
@@ -441,7 +441,7 @@ class QuickTerminalController: BaseTerminalController {
// If our dock position would conflict with our target location then
// we autohide the dock.
if position.conflictsWithDock(on: screen) {
if (hiddenDock == nil) {
if hiddenDock == nil {
hiddenDock = .init()
}
@@ -675,10 +675,10 @@ class QuickTerminalController: BaseTerminalController {
// We ignore the configured fullscreen style and always use non-native
// because the way the quick terminal works doesn't support native.
let mode: FullscreenMode
if (NSApp.isFrontmost) {
if NSApp.isFrontmost {
// If we're frontmost and we have a notch then we keep padding
// so all lines of the terminal are visible.
if (window?.screen?.hasNotch ?? false) {
if window?.screen?.hasNotch ?? false {
mode = .nonNativePaddedNotch
} else {
mode = .nonNative

View File

@@ -64,7 +64,7 @@ enum QuickTerminalPosition: String {
/// The initial point origin for this position.
func initialOrigin(for window: NSWindow, on screen: NSScreen) -> CGPoint {
switch (self) {
switch self {
case .top:
return .init(
x: round(screen.visibleFrame.origin.x + (screen.visibleFrame.width - window.frame.width) / 2),
@@ -92,7 +92,7 @@ enum QuickTerminalPosition: String {
/// The final point origin for this position.
func finalOrigin(for window: NSWindow, on screen: NSScreen) -> CGPoint {
switch (self) {
switch self {
case .top:
return .init(
x: round(screen.visibleFrame.origin.x + (screen.visibleFrame.width - window.frame.width) / 2),
@@ -128,7 +128,7 @@ enum QuickTerminalPosition: String {
// Depending on the orientation of the dock, we conflict if our quick terminal
// would potentially "hit" the dock. In the future we should probably consider
// the frame of the quick terminal.
return switch (orientation) {
return switch orientation {
case .top: self == .top || self == .left || self == .right
case .bottom: self == .bottom || self == .left || self == .right
case .left: self == .top || self == .bottom

View File

@@ -6,7 +6,7 @@ enum QuickTerminalScreen {
case menuBar
init?(fromGhosttyConfig string: String) {
switch (string) {
switch string {
case "main":
self = .main
@@ -22,7 +22,7 @@ enum QuickTerminalScreen {
}
var screen: NSScreen? {
switch (self) {
switch self {
case .main:
return NSScreen.main

View File

@@ -6,7 +6,7 @@ enum QuickTerminalSpaceBehavior {
case move
init?(fromGhosttyConfig string: String) {
switch (string) {
switch string {
case "move":
self = .move
@@ -24,7 +24,7 @@ enum QuickTerminalSpaceBehavior {
.fullScreenAuxiliary
]
switch (self) {
switch self {
case .move:
// We want this to move the window to the active space.
return NSWindow.CollectionBehavior([.canJoinAllSpaces] + commonBehavior)

View File

@@ -90,12 +90,12 @@ class SecureInput: ObservableObject {
guard enabled != desired else { return }
let err: OSStatus
if (enabled) {
if enabled {
err = DisableSecureEventInput()
} else {
err = EnableSecureEventInput()
}
if (err == noErr) {
if err == noErr {
enabled = desired
Self.logger.debug("secure input state=\(self.enabled)")
return
@@ -111,7 +111,7 @@ class SecureInput: ObservableObject {
// desire to be enabled.
guard !enabled && desired else { return }
let err = EnableSecureEventInput()
if (err == noErr) {
if err == noErr {
enabled = true
Self.logger.debug("secure input enabled on activation")
return
@@ -124,7 +124,7 @@ class SecureInput: ObservableObject {
// We only want to disable if we're enabled.
guard enabled else { return }
let err = DisableSecureEventInput()
if (err == noErr) {
if err == noErr {
enabled = false
Self.logger.debug("secure input disabled on deactivation")
return

View File

@@ -50,7 +50,7 @@ class ServiceProvider: NSObject {
var config = Ghostty.SurfaceConfiguration()
config.workingDirectory = url.path(percentEncoded: false)
switch (target) {
switch target {
case .window:
_ = TerminalController.newWindow(delegate.ghostty, withBaseConfig: config)

View File

@@ -12,7 +12,7 @@ class ConfigurationErrorsController: NSWindowController, NSWindowDelegate, Confi
/// The data model for this view. Update this directly and the associated view will be updated, too.
@Published var errors: [String] = [] {
didSet {
if (errors.count == 0) {
if errors.count == 0 {
self.window?.performClose(nil)
}
}

View File

@@ -222,7 +222,7 @@ extension SplitTree {
case .split:
// If the best candidate is a split node, use its the leaf/rightmost
// depending on our spatial direction.
return switch (spatialDirection) {
return switch spatialDirection {
case .up, .left: bestNode.node.leftmostLeaf()
case .down, .right: bestNode.node.rightmostLeaf()
}
@@ -422,7 +422,7 @@ extension SplitTree.Node {
/// Returns the node in the tree that contains the given view.
func node(view: ViewType) -> Node? {
switch (self) {
switch self {
case .leaf(view):
return self

View File

@@ -10,7 +10,7 @@ extension SplitView {
@Binding var split: CGFloat
private var visibleWidth: CGFloat? {
switch (direction) {
switch direction {
case .horizontal:
return visibleSize
case .vertical:
@@ -19,7 +19,7 @@ extension SplitView {
}
private var visibleHeight: CGFloat? {
switch (direction) {
switch direction {
case .horizontal:
return nil
case .vertical:
@@ -28,7 +28,7 @@ extension SplitView {
}
private var invisibleWidth: CGFloat? {
switch (direction) {
switch direction {
case .horizontal:
return visibleSize + invisibleSize
case .vertical:
@@ -37,7 +37,7 @@ extension SplitView {
}
private var invisibleHeight: CGFloat? {
switch (direction) {
switch direction {
case .horizontal:
return nil
case .vertical:
@@ -46,7 +46,7 @@ extension SplitView {
}
private var pointerStyle: BackportPointerStyle {
return switch (direction) {
return switch direction {
case .horizontal: .resizeLeftRight
case .vertical: .resizeUpDown
}
@@ -69,8 +69,8 @@ extension SplitView {
return
}
if (isHovered) {
switch (direction) {
if isHovered {
switch direction {
case .horizontal:
NSCursor.resizeLeftRight.push()
case .vertical:

View File

@@ -90,7 +90,7 @@ struct SplitView<L: View, R: View>: View {
private func dragGesture(_ size: CGSize, splitterPoint: CGPoint) -> some Gesture {
return DragGesture()
.onChanged { gesture in
switch (direction) {
switch direction {
case .horizontal:
let new = min(max(minSize, gesture.location.x), size.width - minSize)
split = new / size.width
@@ -106,7 +106,7 @@ struct SplitView<L: View, R: View>: View {
private func leftRect(for size: CGSize) -> CGRect {
// Initially the rect is the full size
var result = CGRect(x: 0, y: 0, width: size.width, height: size.height)
switch (direction) {
switch direction {
case .horizontal:
result.size.width = result.size.width * split
result.size.width -= splitterVisibleSize / 2
@@ -125,7 +125,7 @@ struct SplitView<L: View, R: View>: View {
private func rightRect(for size: CGSize, leftRect: CGRect) -> CGRect {
// Initially the rect is the full size
var result = CGRect(x: 0, y: 0, width: size.width, height: size.height)
switch (direction) {
switch direction {
case .horizontal:
// For horizontal layouts we offset the starting X by the left rect
// and make the width fit the remaining space.
@@ -144,7 +144,7 @@ struct SplitView<L: View, R: View>: View {
/// Calculates the point at which the splitter should be rendered.
private func splitterPoint(for size: CGSize, leftRect: CGRect) -> CGPoint {
switch (direction) {
switch direction {
case .horizontal:
return CGPoint(x: leftRect.size.width, y: size.height / 2)

View File

@@ -52,12 +52,12 @@ fileprivate struct TerminalSplitSubtreeView: View {
let action: (TerminalSplitOperation) -> Void
var body: some View {
switch (node) {
switch node {
case .leaf(let leafView):
TerminalSplitLeaf(surfaceView: leafView, isSplit: !isRoot, action: action)
case .split(let split):
let splitViewDirection: SplitViewDirection = switch (split.direction) {
let splitViewDirection: SplitViewDirection = switch split.direction {
case .horizontal: .horizontal
case .vertical: .vertical
}

View File

@@ -281,7 +281,7 @@ class BaseTerminalController: NSWindowController,
/// Subclasses should call super first.
func surfaceTreeDidChange(from: SplitTree<Ghostty.SurfaceView>, to: SplitTree<Ghostty.SurfaceView>) {
// If our surface tree becomes empty then we have no focused surface.
if (to.isEmpty) {
if to.isEmpty {
focusedSurface = nil
}
}
@@ -596,7 +596,7 @@ class BaseTerminalController: NSWindowController,
guard let directionAny = notification.userInfo?["direction"] else { return }
guard let direction = directionAny as? ghostty_action_split_direction_e else { return }
let splitDirection: SplitTree<Ghostty.SurfaceView>.NewDirection
switch (direction) {
switch direction {
case GHOSTTY_SPLIT_DIRECTION_RIGHT: splitDirection = .right
case GHOSTTY_SPLIT_DIRECTION_LEFT: splitDirection = .left
case GHOSTTY_SPLIT_DIRECTION_DOWN: splitDirection = .down
@@ -820,7 +820,7 @@ class BaseTerminalController: NSWindowController,
private func computeTitle(title: String, bell: Bool) -> String {
var result = title
if (bell && ghostty.config.bellFeatures.contains(.title)) {
if bell && ghostty.config.bellFeatures.contains(.title) {
result = "🔔 \(result)"
}
@@ -966,7 +966,7 @@ class BaseTerminalController: NSWindowController,
func performAction(_ action: String, on surfaceView: Ghostty.SurfaceView) {
guard let surface = surfaceView.surface else { return }
let len = action.utf8CString.count
if (len == 0) { return }
if len == 0 { return }
_ = action.withCString { cString in
ghostty_surface_binding_action(surface, cString, UInt(len - 1))
}
@@ -1109,7 +1109,7 @@ class BaseTerminalController: NSWindowController,
window?.endSheet(ccWindow)
}
switch (request) {
switch request {
case let .osc_52_write(pasteboard):
guard case .confirm = action else { break }
let pb = pasteboard ?? NSPasteboard.general
@@ -1117,7 +1117,7 @@ class BaseTerminalController: NSWindowController,
pb.setString(cc.contents, forType: .string)
case .osc_52_read, .paste:
let str: String
switch (action) {
switch action {
case .cancel:
str = ""

View File

@@ -160,7 +160,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr
}
// If our surface tree is now nil then we close our window.
if (to.isEmpty) {
if to.isEmpty {
self.window?.close()
}
}
@@ -253,7 +253,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr
DispatchQueue.main.async {
// Only cascade if we aren't fullscreen.
if let window = c.window {
if (!window.styleMask.contains(.fullScreen)) {
if !window.styleMask.contains(.fullScreen) {
Self.lastCascadePoint = window.cascadeTopLeft(from: Self.lastCascadePoint)
}
}
@@ -390,7 +390,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr
// If the parent is miniaturized, then macOS exhibits really strange behaviors
// so we have to bring it back out.
if (parent.isMiniaturized) { parent.deminiaturize(self) }
if parent.isMiniaturized { parent.deminiaturize(self) }
// If our parent tab group already has this window, macOS added it and
// we need to remove it so we can set the correct order in the next line.
@@ -405,7 +405,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr
}
// If we don't allow tabs then we create a new window instead.
if (window.tabbingMode != .disallowed) {
if window.tabbingMode != .disallowed {
// Add the window to the tab group and show it.
switch ghostty.config.windowNewTabPosition {
case "end":
@@ -491,7 +491,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr
] as? Ghostty.Config else { return }
// If this is an app-level config update then we update some things.
if (notification.object == nil) {
if notification.object == nil {
// Update our derived config
self.derivedConfig = DerivedConfig(config)
@@ -907,7 +907,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr
alert.addButton(withTitle: "Cancel")
alert.alertStyle = .warning
alert.beginSheetModal(for: confirmWindow, completionHandler: { response in
if (response == .alertFirstButtonReturn) {
if response == .alertFirstButtonReturn {
// This is important so that we avoid losing focus when Stage
// Manager is used (#8336)
alert.window.orderOut(nil)
@@ -1013,7 +1013,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr
// Setting all three of these is required for restoration to work.
window.isRestorable = restorable
if (restorable) {
if restorable {
window.restorationClass = TerminalWindowRestoration.self
window.identifier = .init(String(describing: TerminalWindowRestoration.self))
}
@@ -1035,7 +1035,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr
// If we have a default size, we want to apply it.
if let defaultSize {
switch (defaultSize) {
switch defaultSize {
case .frame:
// Frames can be applied immediately
defaultSize.apply(to: window)
@@ -1071,7 +1071,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr
// We don't run this logic in fullscreen because in fullscreen this will end up
// removing the window and putting it into its own dedicated fullscreen, which is not
// the expected or desired behavior of anyone I've found.
if (!window.styleMask.contains(.fullScreen)) {
if !window.styleMask.contains(.fullScreen) {
// If we have more than 1 window in our tab group we know we're a new window.
// Since Ghostty manages tabbing manually this will never be more than one
// at this point in the AppKit lifecycle (we add to the group after this).
@@ -1101,7 +1101,7 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr
override func windowShouldClose(_ sender: NSWindow) -> Bool {
tabGroupCloseCoordinator.windowShouldClose(sender) { [weak self] scope in
guard let self else { return }
switch (scope) {
switch scope {
case .tab: closeTab(nil)
case .window:
guard self.window?.isFirstWindowInTabGroup ?? false else { return }
@@ -1430,23 +1430,23 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr
let finalIndex: Int
// An index that is invalid is used to signal some special values.
if (tabIndex <= 0) {
if tabIndex <= 0 {
guard let selectedWindow = tabGroup.selectedWindow else { return }
guard let selectedIndex = tabbedWindows.firstIndex(where: { $0 == selectedWindow }) else { return }
if (tabIndex == GHOSTTY_GOTO_TAB_PREVIOUS.rawValue) {
if (selectedIndex == 0) {
if tabIndex == GHOSTTY_GOTO_TAB_PREVIOUS.rawValue {
if selectedIndex == 0 {
finalIndex = tabbedWindows.count - 1
} else {
finalIndex = selectedIndex - 1
}
} else if (tabIndex == GHOSTTY_GOTO_TAB_NEXT.rawValue) {
if (selectedIndex == tabbedWindows.count - 1) {
} else if tabIndex == GHOSTTY_GOTO_TAB_NEXT.rawValue {
if selectedIndex == tabbedWindows.count - 1 {
finalIndex = 0
} else {
finalIndex = selectedIndex + 1
}
} else if (tabIndex == GHOSTTY_GOTO_TAB_LAST.rawValue) {
} else if tabIndex == GHOSTTY_GOTO_TAB_LAST.rawValue {
finalIndex = tabbedWindows.count - 1
} else {
return

View File

@@ -98,7 +98,7 @@ class TerminalWindowRestoration: NSObject, NSWindowRestoration {
// no matter what. Note its safe to use "ghostty.config" directly here
// because window restoration is only ever invoked on app start so we
// don't have to deal with config reloads.
if (appDelegate.ghostty.config.windowSaveState == "never") {
if appDelegate.ghostty.config.windowSaveState == "never" {
completionHandler(nil, nil)
return
}
@@ -161,9 +161,9 @@ class TerminalWindowRestoration: NSObject, NSWindowRestoration {
// For the first attempt, we schedule it immediately. Subsequent events wait a bit
// so we don't just spin the CPU at 100%. Give up after some period of time.
let after: DispatchTime
if (attempts == 0) {
if attempts == 0 {
after = .now()
} else if (attempts > 40) {
} else if attempts > 40 {
// 2 seconds, give up
return
} else {
@@ -185,7 +185,7 @@ class TerminalWindowRestoration: NSObject, NSWindowRestoration {
// If the window is main, then we also make sure it comes forward. This
// prevents a bug found in #1177 where sometimes on restore the windows
// would be behind other applications.
if (viewWindow.isMainWindow) {
if viewWindow.isMainWindow {
viewWindow.orderFront(nil)
}
}

View File

@@ -76,7 +76,7 @@ struct TerminalView<ViewModel: TerminalViewModel>: View {
VStack(spacing: 0) {
// If we're running in debug mode we show a warning so that users
// know that performance will be degraded.
if (Ghostty.info.mode == GHOSTTY_BUILD_MODE_DEBUG || Ghostty.info.mode == GHOSTTY_BUILD_MODE_RELEASE_SAFE) {
if Ghostty.info.mode == GHOSTTY_BUILD_MODE_DEBUG || Ghostty.info.mode == GHOSTTY_BUILD_MODE_RELEASE_SAFE {
DebugBuildWarningView()
}

View File

@@ -112,7 +112,7 @@ class TerminalWindow: NSWindow {
}
// If window decorations are disabled, remove our title
if (!config.windowDecorations) { styleMask.remove(.titled) }
if !config.windowDecorations { styleMask.remove(.titled) }
// Set our window positioning to coordinates if config value exists, otherwise
// fallback to original centering behavior
@@ -510,7 +510,7 @@ class TerminalWindow: NSWindow {
private func setInitialWindowPosition(x: Int16?, y: Int16?) {
// If we don't have an X/Y then we try to use the previously saved window pos.
guard x != nil, y != nil else {
if (!LastWindowPosition.shared.restore(self)) {
if !LastWindowPosition.shared.restore(self) {
center()
}

View File

@@ -199,7 +199,7 @@ class TitlebarTabsTahoeTerminalWindow: TransparentTitlebarTerminalWindow, NSTool
// The padding for the tab bar. If we're showing window buttons then
// we need to offset the window buttons.
let leftPadding: CGFloat = switch(self.derivedConfig.macosWindowButtons) {
let leftPadding: CGFloat = switch self.derivedConfig.macosWindowButtons {
case .hidden: 0
case .visible: 70
}

View File

@@ -159,7 +159,7 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow {
titlebarColor = derivedConfig.backgroundColor.withAlphaComponent(derivedConfig.backgroundOpacity)
}
if (isOpaque || themeChanged) {
if isOpaque || themeChanged {
// If there is transparency, calling this will make the titlebar opaque
// so we only call this if we are opaque.
updateTabBar()
@@ -359,7 +359,7 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow {
override func addTitlebarAccessoryViewController(_ childViewController: NSTitlebarAccessoryViewController) {
let isTabBar = self.titlebarTabs && isTabBar(childViewController)
if (isTabBar) {
if isTabBar {
// Ensure it has the right layoutAttribute to force it next to our titlebar
childViewController.layoutAttribute = .right
@@ -374,7 +374,7 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow {
super.addTitlebarAccessoryViewController(childViewController)
if (isTabBar) {
if isTabBar {
pushTabsToTitlebar(childViewController)
}
}
@@ -382,7 +382,7 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow {
override func removeTitlebarAccessoryViewController(at index: Int) {
let isTabBar = titlebarAccessoryViewControllers[index].identifier == Self.tabBarIdentifier
super.removeTitlebarAccessoryViewController(at: index)
if (isTabBar) {
if isTabBar {
resetCustomTabBarViews()
}
}
@@ -403,7 +403,7 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow {
private func pushTabsToTitlebar(_ tabBarController: NSTitlebarAccessoryViewController) {
// We need a toolbar as a target for our titlebar tabs.
if (toolbar == nil) {
if toolbar == nil {
generateToolbar()
}
@@ -509,7 +509,7 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow {
fileprivate class WindowDragView: NSView {
override public func mouseDown(with event: NSEvent) {
// Drag the window for single left clicks, double clicks should bypass the drag handle.
if (event.type == .leftMouseDown && event.clickCount == 1) {
if event.type == .leftMouseDown && event.clickCount == 1 {
window?.performDrag(with: event)
NSCursor.closedHand.set()
} else {

View File

@@ -10,7 +10,7 @@ extension UpdateDriver: SPUUpdaterDelegate {
// Sparkle supports a native concept of "channels" but it requires that
// you share a single appcast file. We don't want to do that so we
// do this instead.
switch (appDelegate.ghostty.config.autoUpdateChannel) {
switch appDelegate.ghostty.config.autoUpdateChannel {
case .tip: return "https://tip.files.ghostty.org/appcast.xml"
case .stable: return "https://release.files.ghostty.org/appcast.xml"
}

View File

@@ -192,7 +192,7 @@ enum UpdateState: Equatable {
/// This is true if we're in a state that can be force installed.
var isInstallable: Bool {
switch (self) {
switch self {
case .checking,
.updateAvailable,
.downloading,
@@ -339,7 +339,7 @@ enum UpdateState: Equatable {
}
var label: String {
switch (self) {
switch self {
case .commit: return "View GitHub Commit"
case .compareTip: return "Changes Since This Tip Release"
case .tagged: return "View Release Notes"

View File

@@ -18,7 +18,7 @@ extension Ghostty.Action {
}
init(c: ghostty_action_color_change_s) {
switch (c.kind) {
switch c.kind {
case GHOSTTY_ACTION_COLOR_KIND_FOREGROUND:
self.kind = .foreground
case GHOSTTY_ACTION_COLOR_KIND_BACKGROUND:

View File

@@ -140,7 +140,7 @@ extension Ghostty {
guard let app = self.app else { return }
// Soft updates just call with our existing config
if (soft) {
if soft {
ghostty_app_update_config(app, config.config!)
return
}
@@ -158,7 +158,7 @@ extension Ghostty {
func reloadConfig(surface: ghostty_surface_t, soft: Bool = false) {
// Soft updates just call with our existing config
if (soft) {
if soft {
ghostty_surface_update_config(surface, config.config!)
return
}
@@ -183,14 +183,14 @@ extension Ghostty {
func newTab(surface: ghostty_surface_t) {
let action = "new_tab"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
logger.warning("action failed action=\(action)")
}
}
func newWindow(surface: ghostty_surface_t) {
let action = "new_window"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
logger.warning("action failed action=\(action)")
}
}
@@ -213,14 +213,14 @@ extension Ghostty {
func splitToggleZoom(surface: ghostty_surface_t) {
let action = "toggle_split_zoom"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
logger.warning("action failed action=\(action)")
}
}
func toggleFullscreen(surface: ghostty_surface_t) {
let action = "toggle_fullscreen"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
logger.warning("action failed action=\(action)")
}
}
@@ -241,21 +241,21 @@ extension Ghostty {
case .reset:
action = "reset_font_size"
}
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
logger.warning("action failed action=\(action)")
}
}
func toggleTerminalInspector(surface: ghostty_surface_t) {
let action = "inspector:toggle"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
logger.warning("action failed action=\(action)")
}
}
func resetTerminal(surface: ghostty_surface_t) {
let action = "reset"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
logger.warning("action failed action=\(action)")
}
}
@@ -463,7 +463,7 @@ extension Ghostty {
static func action(_ app: ghostty_app_t, target: ghostty_target_s, action: ghostty_action_s) -> Bool {
// Make sure it a target we understand so all our action handlers can assert
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP, GHOSTTY_TARGET_SURFACE:
break
@@ -473,7 +473,7 @@ extension Ghostty {
}
// Action dispatch
switch (action.tag) {
switch action.tag {
case GHOSTTY_ACTION_QUIT:
quit(app)
@@ -722,7 +722,7 @@ extension Ghostty {
private static func undo(_ app: ghostty_app_t, target: ghostty_target_s) -> Bool {
let undoManager: UndoManager?
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
undoManager = (NSApp.delegate as? AppDelegate)?.undoManager
@@ -743,7 +743,7 @@ extension Ghostty {
private static func redo(_ app: ghostty_app_t, target: ghostty_target_s) -> Bool {
let undoManager: UndoManager?
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
undoManager = (NSApp.delegate as? AppDelegate)?.undoManager
@@ -763,7 +763,7 @@ extension Ghostty {
}
private static func newWindow(_ app: ghostty_app_t, target: ghostty_target_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
NotificationCenter.default.post(
name: Notification.ghosttyNewWindow,
@@ -789,7 +789,7 @@ extension Ghostty {
}
private static func newTab(_ app: ghostty_app_t, target: ghostty_target_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
NotificationCenter.default.post(
name: Notification.ghosttyNewTab,
@@ -829,7 +829,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
direction: ghostty_action_split_direction_e) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
// New split does nothing with an app target
Ghostty.logger.warning("new split does nothing with an app target")
@@ -858,7 +858,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s
) -> Bool {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
return false
@@ -879,7 +879,7 @@ extension Ghostty {
}
private static func closeTab(_ app: ghostty_app_t, target: ghostty_target_s, mode: ghostty_action_close_tab_mode_e) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("close tabs does nothing with an app target")
return
@@ -888,7 +888,7 @@ extension Ghostty {
guard let surface = target.target.surface else { return }
guard let surfaceView = self.surfaceView(from: surface) else { return }
switch (mode) {
switch mode {
case GHOSTTY_ACTION_CLOSE_TAB_MODE_THIS:
NotificationCenter.default.post(
name: .ghosttyCloseTab,
@@ -921,7 +921,7 @@ extension Ghostty {
}
private static func closeWindow(_ app: ghostty_app_t, target: ghostty_target_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("close window does nothing with an app target")
return
@@ -949,7 +949,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
mode raw: ghostty_action_fullscreen_e) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("toggle fullscreen does nothing with an app target")
return
@@ -978,7 +978,7 @@ extension Ghostty {
private static func toggleCommandPalette(
_ app: ghostty_app_t,
target: ghostty_target_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("toggle command palette does nothing with an app target")
return
@@ -1001,7 +1001,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s
) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("toggle maximize does nothing with an app target")
return
@@ -1031,7 +1031,7 @@ extension Ghostty {
private static func ringBell(
_ app: ghostty_app_t,
target: ghostty_target_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
// Technically we could still request app attention here but there
// are no known cases where the bell is rang with an app target so
@@ -1056,7 +1056,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_readonly_e) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("set readonly does nothing with an app target")
return
@@ -1081,7 +1081,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
move: ghostty_action_move_tab_s) -> Bool {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("move tab does nothing with an app target")
return false
@@ -1112,7 +1112,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
tab: ghostty_action_goto_tab_e) -> Bool {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("goto tab does nothing with an app target")
return false
@@ -1144,7 +1144,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
direction: ghostty_action_goto_split_e) -> Bool {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("goto split does nothing with an app target")
return false
@@ -1250,7 +1250,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
resize: ghostty_action_resize_split_s) -> Bool {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("resize split does nothing with an app target")
return false
@@ -1283,7 +1283,7 @@ extension Ghostty {
private static func equalizeSplits(
_ app: ghostty_app_t,
target: ghostty_target_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("equalize splits does nothing with an app target")
return
@@ -1305,7 +1305,7 @@ extension Ghostty {
private static func toggleSplitZoom(
_ app: ghostty_app_t,
target: ghostty_target_s) -> Bool {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("toggle split zoom does nothing with an app target")
return false
@@ -1335,7 +1335,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
mode: ghostty_action_inspector_e) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("toggle inspector does nothing with an app target")
return
@@ -1359,7 +1359,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
n: ghostty_action_desktop_notification_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("toggle split zoom does nothing with an app target")
return
@@ -1395,7 +1395,7 @@ extension Ghostty {
) {
guard let mode = SetFloatWIndow.from(mode_raw) else { return }
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("toggle float window does nothing with an app target")
return
@@ -1405,7 +1405,7 @@ extension Ghostty {
guard let surfaceView = self.surfaceView(from: surface) else { return }
guard let window = surfaceView.window as? TerminalWindow else { return }
switch (mode) {
switch mode {
case .on:
window.level = .floating
@@ -1429,7 +1429,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s
) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("toggle background opacity does nothing with an app target")
return
@@ -1453,7 +1453,7 @@ extension Ghostty {
) {
guard let mode = SetSecureInput.from(mode_raw) else { return }
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
guard let appDelegate = NSApplication.shared.delegate as? AppDelegate else { return }
appDelegate.setSecureInput(mode)
@@ -1464,7 +1464,7 @@ extension Ghostty {
guard let appState = self.appState(fromView: surfaceView) else { return }
guard appState.config.autoSecureInput else { return }
switch (mode) {
switch mode {
case .on:
surfaceView.passwordInput = true
@@ -1492,7 +1492,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_set_title_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("set title does nothing with an app target")
return
@@ -1511,7 +1511,7 @@ extension Ghostty {
private static func copyTitleToClipboard(
_ app: ghostty_app_t,
target: ghostty_target_s) -> Bool {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_SURFACE:
guard let surface = target.target.surface else { return false }
guard let surfaceView = self.surfaceView(from: surface) else { return false }
@@ -1534,7 +1534,7 @@ extension Ghostty {
let promptTitle = Action.PromptTitle(v)
switch promptTitle {
case .surface:
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("set title prompt does nothing with an app target")
return false
@@ -1551,7 +1551,7 @@ extension Ghostty {
}
case .tab:
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
guard let window = NSApp.mainWindow ?? NSApp.keyWindow,
let controller = window.windowController as? BaseTerminalController
@@ -1579,7 +1579,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_pwd_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("pwd change does nothing with an app target")
return
@@ -1599,7 +1599,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
shape: ghostty_action_mouse_shape_e) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("set mouse shapes nothing with an app target")
return
@@ -1619,7 +1619,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_mouse_visibility_e) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("set mouse shapes nothing with an app target")
return
@@ -1627,7 +1627,7 @@ extension Ghostty {
case GHOSTTY_TARGET_SURFACE:
guard let surface = target.target.surface else { return }
guard let surfaceView = self.surfaceView(from: surface) else { return }
switch (v) {
switch v {
case GHOSTTY_MOUSE_VISIBLE:
surfaceView.setCursorVisibility(true)
@@ -1648,7 +1648,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_mouse_over_link_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("mouse over link does nothing with an app target")
return
@@ -1674,7 +1674,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_initial_size_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("initial size does nothing with an app target")
return
@@ -1693,7 +1693,7 @@ extension Ghostty {
private static func resetWindowSize(
_ app: ghostty_app_t,
target: ghostty_target_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("reset window size does nothing with an app target")
return
@@ -1716,7 +1716,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_cell_size_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("mouse over link does nothing with an app target")
return
@@ -1738,7 +1738,7 @@ extension Ghostty {
private static func renderInspector(
_ app: ghostty_app_t,
target: ghostty_target_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("mouse over link does nothing with an app target")
return
@@ -1760,7 +1760,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_renderer_health_e) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("mouse over link does nothing with an app target")
return
@@ -1785,7 +1785,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_key_sequence_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("key sequence does nothing with an app target")
return
@@ -1817,7 +1817,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_key_table_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("key table does nothing with an app target")
return
@@ -1842,7 +1842,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_progress_report_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("progress report does nothing with an app target")
return
@@ -1869,7 +1869,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_scrollbar_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("scrollbar does nothing with an app target")
return
@@ -1896,7 +1896,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_start_search_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("start_search does nothing with an app target")
return
@@ -1926,7 +1926,7 @@ extension Ghostty {
private static func endSearch(
_ app: ghostty_app_t,
target: ghostty_target_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("end_search does nothing with an app target")
return
@@ -1948,7 +1948,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_search_total_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("search_total does nothing with an app target")
return
@@ -1971,7 +1971,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
v: ghostty_action_search_selected_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("search_selected does nothing with an app target")
return
@@ -2000,7 +2000,7 @@ extension Ghostty {
guard let app_ud = ghostty_app_userdata(app) else { return }
let ghostty = Unmanaged<App>.fromOpaque(app_ud).takeUnretainedValue()
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
ghostty.reloadConfig(soft: v.soft)
return
@@ -2026,7 +2026,7 @@ extension Ghostty {
// something so apprt's do not have to do this.
let config = Config(clone: v.config)
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
// Notify the world that the app config changed
NotificationCenter.default.post(
@@ -2066,7 +2066,7 @@ extension Ghostty {
_ app: ghostty_app_t,
target: ghostty_target_s,
change: ghostty_action_color_change_s) {
switch (target.tag) {
switch target.tag {
case GHOSTTY_TARGET_APP:
Ghostty.logger.warning("color change does nothing with an app target")
return
@@ -2097,7 +2097,7 @@ extension Ghostty {
let uuid = UUID(uuidString: uuidString),
let surface = delegate?.findSurface(forUUID: uuid) else { return }
switch (response.actionIdentifier) {
switch response.actionIdentifier {
case UNNotificationDefaultActionIdentifier, Ghostty.userNotificationActionShow:
// The user clicked on a notification
surface.handleUserNotification(notification: response.notification, focus: true)

View File

@@ -427,7 +427,7 @@ extension Ghostty {
var backgroundColor: Color {
var color: ghostty_config_color_s = .init();
let bg_key = "background"
if (!ghostty_config_get(config, &color, bg_key, UInt(bg_key.lengthOfBytes(using: .utf8)))) {
if !ghostty_config_get(config, &color, bg_key, UInt(bg_key.lengthOfBytes(using: .utf8))) {
#if os(macOS)
return Color(NSColor.windowBackgroundColor)
#elseif os(iOS)
@@ -473,7 +473,7 @@ extension Ghostty {
var color: ghostty_config_color_s = .init();
let key = "unfocused-split-fill"
if (!ghostty_config_get(config, &color, key, UInt(key.lengthOfBytes(using: .utf8)))) {
if !ghostty_config_get(config, &color, key, UInt(key.lengthOfBytes(using: .utf8))) {
let bg_key = "background"
_ = ghostty_config_get(config, &color, bg_key, UInt(bg_key.lengthOfBytes(using: .utf8)));
}
@@ -494,7 +494,7 @@ extension Ghostty {
var color: ghostty_config_color_s = .init();
let key = "split-divider-color"
if (!ghostty_config_get(config, &color, key, UInt(key.lengthOfBytes(using: .utf8)))) {
if !ghostty_config_get(config, &color, key, UInt(key.lengthOfBytes(using: .utf8))) {
return Color(newColor)
}
@@ -801,28 +801,28 @@ extension Ghostty.Config {
case bottom_right = "bottom-right"
func top() -> Bool {
switch (self) {
switch self {
case .top_left, .top_center, .top_right: return true;
default: return false;
}
}
func bottom() -> Bool {
switch (self) {
switch self {
case .bottom_left, .bottom_center, .bottom_right: return true;
default: return false;
}
}
func left() -> Bool {
switch (self) {
switch self {
case .top_left, .bottom_left: return true;
default: return false;
}
}
func right() -> Bool {
switch (self) {
switch self {
case .top_right, .bottom_right: return true;
default: return false;
}

View File

@@ -18,7 +18,7 @@ extension Ghostty {
/// be used for things like NSMenu that only support keyboard shortcuts anyways.
static func keyboardShortcut(for trigger: ghostty_input_trigger_s) -> KeyboardShortcut? {
let key: KeyEquivalent
switch (trigger.tag) {
switch trigger.tag {
case GHOSTTY_TRIGGER_PHYSICAL:
// Only functional keys can be converted to a KeyboardShortcut. Other physical
// mappings cannot because KeyboardShortcut in Swift is inherently layout-dependent.
@@ -50,10 +50,10 @@ extension Ghostty {
/// Returns the event modifier flags set for the Ghostty mods enum.
static func eventModifierFlags(mods: ghostty_input_mods_e) -> NSEvent.ModifierFlags {
var flags = NSEvent.ModifierFlags(rawValue: 0);
if (mods.rawValue & GHOSTTY_MODS_SHIFT.rawValue != 0) { flags.insert(.shift) }
if (mods.rawValue & GHOSTTY_MODS_CTRL.rawValue != 0) { flags.insert(.control) }
if (mods.rawValue & GHOSTTY_MODS_ALT.rawValue != 0) { flags.insert(.option) }
if (mods.rawValue & GHOSTTY_MODS_SUPER.rawValue != 0) { flags.insert(.command) }
if mods.rawValue & GHOSTTY_MODS_SHIFT.rawValue != 0 { flags.insert(.shift) }
if mods.rawValue & GHOSTTY_MODS_CTRL.rawValue != 0 { flags.insert(.control) }
if mods.rawValue & GHOSTTY_MODS_ALT.rawValue != 0 { flags.insert(.option) }
if mods.rawValue & GHOSTTY_MODS_SUPER.rawValue != 0 { flags.insert(.command) }
return flags
}
@@ -61,19 +61,19 @@ extension Ghostty {
static func ghosttyMods(_ flags: NSEvent.ModifierFlags) -> ghostty_input_mods_e {
var mods: UInt32 = GHOSTTY_MODS_NONE.rawValue
if (flags.contains(.shift)) { mods |= GHOSTTY_MODS_SHIFT.rawValue }
if (flags.contains(.control)) { mods |= GHOSTTY_MODS_CTRL.rawValue }
if (flags.contains(.option)) { mods |= GHOSTTY_MODS_ALT.rawValue }
if (flags.contains(.command)) { mods |= GHOSTTY_MODS_SUPER.rawValue }
if (flags.contains(.capsLock)) { mods |= GHOSTTY_MODS_CAPS.rawValue }
if flags.contains(.shift) { mods |= GHOSTTY_MODS_SHIFT.rawValue }
if flags.contains(.control) { mods |= GHOSTTY_MODS_CTRL.rawValue }
if flags.contains(.option) { mods |= GHOSTTY_MODS_ALT.rawValue }
if flags.contains(.command) { mods |= GHOSTTY_MODS_SUPER.rawValue }
if flags.contains(.capsLock) { mods |= GHOSTTY_MODS_CAPS.rawValue }
// Handle sided input. We can't tell that both are pressed in the
// Ghostty structure but that's okay -- we don't use that information.
let rawFlags = flags.rawValue
if (rawFlags & UInt(NX_DEVICERSHIFTKEYMASK) != 0) { mods |= GHOSTTY_MODS_SHIFT_RIGHT.rawValue }
if (rawFlags & UInt(NX_DEVICERCTLKEYMASK) != 0) { mods |= GHOSTTY_MODS_CTRL_RIGHT.rawValue }
if (rawFlags & UInt(NX_DEVICERALTKEYMASK) != 0) { mods |= GHOSTTY_MODS_ALT_RIGHT.rawValue }
if (rawFlags & UInt(NX_DEVICERCMDKEYMASK) != 0) { mods |= GHOSTTY_MODS_SUPER_RIGHT.rawValue }
if rawFlags & UInt(NX_DEVICERSHIFTKEYMASK) != 0 { mods |= GHOSTTY_MODS_SHIFT_RIGHT.rawValue }
if rawFlags & UInt(NX_DEVICERCTLKEYMASK) != 0 { mods |= GHOSTTY_MODS_CTRL_RIGHT.rawValue }
if rawFlags & UInt(NX_DEVICERALTKEYMASK) != 0 { mods |= GHOSTTY_MODS_ALT_RIGHT.rawValue }
if rawFlags & UInt(NX_DEVICERCMDKEYMASK) != 0 { mods |= GHOSTTY_MODS_SUPER_RIGHT.rawValue }
return ghostty_input_mods_e(mods)
}

View File

@@ -40,7 +40,7 @@ extension Ghostty {
@MainActor
func sendText(_ text: String) {
let len = text.utf8CString.count
if (len == 0) { return }
if len == 0 { return }
text.withCString { ptr in
// len includes the null terminator so we do len - 1
@@ -149,7 +149,7 @@ extension Ghostty {
@MainActor
func perform(action: String) -> Bool {
let len = action.utf8CString.count
if (len == 0) { return false }
if len == 0 { return false }
return action.withCString { cString in
ghostty_surface_binding_action(surface, cString, UInt(len - 1))
}

View File

@@ -100,7 +100,7 @@ extension Ghostty {
case toggle
static func from(_ c: ghostty_action_float_window_e) -> Self? {
switch (c) {
switch c {
case GHOSTTY_FLOAT_WINDOW_ON:
return .on
@@ -122,7 +122,7 @@ extension Ghostty {
case toggle
static func from(_ c: ghostty_action_secure_input_e) -> Self? {
switch (c) {
switch c {
case GHOSTTY_SECURE_INPUT_ON:
return .on
@@ -144,7 +144,7 @@ extension Ghostty {
/// Initialize from a Ghostty API enum.
static func from(direction: ghostty_action_goto_split_e) -> Self? {
switch (direction) {
switch direction {
case GHOSTTY_GOTO_SPLIT_PREVIOUS:
return .previous
@@ -169,7 +169,7 @@ extension Ghostty {
}
func toNative() -> ghostty_action_goto_split_e {
switch (self) {
switch self {
case .previous:
return GHOSTTY_GOTO_SPLIT_PREVIOUS
@@ -196,7 +196,7 @@ extension Ghostty {
case up, down, left, right
static func from(direction: ghostty_action_resize_split_direction_e) -> Self? {
switch (direction) {
switch direction {
case GHOSTTY_RESIZE_SPLIT_UP:
return .up;
case GHOSTTY_RESIZE_SPLIT_DOWN:
@@ -211,7 +211,7 @@ extension Ghostty {
}
func toNative() -> ghostty_action_resize_split_direction_e {
switch (self) {
switch self {
case .up:
return GHOSTTY_RESIZE_SPLIT_UP;
case .down:
@@ -268,7 +268,7 @@ extension Ghostty {
/// The text to show in the clipboard confirmation prompt for a given request type
func text() -> String {
switch (self) {
switch self {
case .paste:
return """
Pasting this text to the terminal may be dangerous as it looks like some commands may be executed.
@@ -287,7 +287,7 @@ extension Ghostty {
}
static func from(request: ghostty_clipboard_request_e) -> ClipboardRequest? {
switch (request) {
switch request {
case GHOSTTY_CLIPBOARD_REQUEST_PASTE:
return .paste
case GHOSTTY_CLIPBOARD_REQUEST_OSC_52_READ:

View File

@@ -23,7 +23,7 @@ extension Ghostty {
let pubInspector = center.publisher(for: Notification.didControlInspector, object: surfaceView)
ZStack {
if (!surfaceView.inspectorVisible) {
if !surfaceView.inspectorVisible {
SurfaceWrapper(surfaceView: surfaceView, isSplit: isSplit)
} else {
SplitView(.vertical, $split, dividerColor: ghostty.config.splitDividerColor, left: {
@@ -42,7 +42,7 @@ extension Ghostty {
.onChange(of: surfaceView.inspectorVisible) { inspectorVisible in
// When we show the inspector, we want to focus on the inspector.
// When we hide the inspector, we want to move focus back to the surface.
if (inspectorVisible) {
if inspectorVisible {
// We need to delay this until SwiftUI shows the inspector.
DispatchQueue.main.async {
_ = surfaceView.resignFirstResponder()
@@ -59,7 +59,7 @@ extension Ghostty {
guard let modeAny = notification.userInfo?["mode"] else { return }
guard let mode = modeAny as? ghostty_action_inspector_e else { return }
switch (mode) {
switch mode {
case GHOSTTY_INSPECTOR_TOGGLE:
surfaceView.inspectorVisible = !surfaceView.inspectorVisible
@@ -180,7 +180,7 @@ extension Ghostty {
override func becomeFirstResponder() -> Bool {
let result = super.becomeFirstResponder()
if (result) {
if result {
if let inspector = self.inspector {
inspector.setFocus(true)
}
@@ -190,7 +190,7 @@ extension Ghostty {
override func resignFirstResponder() -> Bool {
let result = super.resignFirstResponder()
if (result) {
if result {
if let inspector = self.inspector {
inspector.setFocus(false)
}
@@ -275,7 +275,7 @@ extension Ghostty {
// Determine our momentum value
var momentum: ghostty_input_mouse_momentum_e = GHOSTTY_MOUSE_MOMENTUM_NONE
switch (event.momentumPhase) {
switch event.momentumPhase {
case .began:
momentum = GHOSTTY_MOUSE_MOMENTUM_BEGAN
case .stationary:
@@ -310,7 +310,7 @@ extension Ghostty {
override func flagsChanged(with event: NSEvent) {
let mod: UInt32;
switch (event.keyCode) {
switch event.keyCode {
case 0x39: mod = GHOSTTY_MODS_CAPS.rawValue
case 0x38, 0x3C: mod = GHOSTTY_MODS_SHIFT.rawValue
case 0x3B, 0x3E: mod = GHOSTTY_MODS_CTRL.rawValue
@@ -325,7 +325,7 @@ extension Ghostty {
// If the key that pressed this is active, its a press, else release
var action = GHOSTTY_ACTION_RELEASE
if (mods.rawValue & mod != 0) { action = GHOSTTY_ACTION_PRESS }
if mods.rawValue & mod != 0 { action = GHOSTTY_ACTION_PRESS }
keyAction(action, event: event)
}
@@ -392,7 +392,7 @@ extension Ghostty {
// We want the string view of the any value
var chars = ""
switch (string) {
switch string {
case let v as NSAttributedString:
chars = v.string
case let v as String:
@@ -402,7 +402,7 @@ extension Ghostty {
}
let len = chars.utf8CString.count
if (len == 0) { return }
if len == 0 { return }
inspector.text(chars)
}

View File

@@ -84,7 +84,7 @@ extension Ghostty {
.onReceive(pubResign) { notification in
guard let window = notification.object as? NSWindow else { return }
guard let surfaceWindow = surfaceView.window else { return }
if (surfaceWindow == window) {
if surfaceWindow == window {
windowFocus = false
}
}
@@ -177,10 +177,10 @@ extension Ghostty {
#if canImport(AppKit)
// If we have secure input enabled and we're the focused surface and window
// then we want to show the secure input overlay.
if (ghostty.config.secureInputIndication &&
if ghostty.config.secureInputIndication &&
secureInput.enabled &&
surfaceFocus &&
windowFocus) {
windowFocus {
SecureInputOverlay()
}
#endif
@@ -200,7 +200,7 @@ extension Ghostty {
}
// Show bell border if enabled
if (ghostty.config.bellFeatures.contains(.border)) {
if ghostty.config.bellFeatures.contains(.border) {
BellBorderOverlay(bell: surfaceView.bell)
}
@@ -208,10 +208,10 @@ extension Ghostty {
HighlightOverlay(highlighted: surfaceView.highlighted)
// If our surface is not healthy, then we render an error view over it.
if (!surfaceView.healthy) {
if !surfaceView.healthy {
Rectangle().fill(ghostty.config.backgroundColor)
SurfaceRendererUnhealthyView()
} else if (surfaceView.error != nil) {
} else if surfaceView.error != nil {
Rectangle().fill(ghostty.config.backgroundColor)
SurfaceErrorView()
}
@@ -220,9 +220,9 @@ extension Ghostty {
// rectangle above our view to make it look unfocused. We use "surfaceFocus"
// because we want to keep our focused surface dark even if we don't have window
// focus.
if (isSplit && !surfaceFocus) {
if isSplit && !surfaceFocus {
let overlayOpacity = ghostty.config.unfocusedSplitOpacity;
if (overlayOpacity > 0) {
if overlayOpacity > 0 {
Rectangle()
.fill(ghostty.config.unfocusedSplitFill)
.allowsHitTesting(false)
@@ -312,16 +312,16 @@ extension Ghostty {
// This computed boolean is set to true when the overlay should be hidden.
private var hidden: Bool {
// If we aren't ready yet then we wait...
if (!ready) { return true; }
if !ready { return true; }
// Hidden if we already processed this size.
if (lastSize == geoSize) { return true; }
if lastSize == geoSize { return true; }
// If we were focused recently we hide it as well. This avoids showing
// the resize overlay when SwiftUI is lazily resizing.
if let instant = focusInstant {
let d = instant.duration(to: ContinuousClock.now)
if (d < .milliseconds(500)) {
if d < .milliseconds(500) {
// Avoid this size completely. We can't set values during
// view updates so we have to defer this to another tick.
DispatchQueue.main.async {
@@ -333,7 +333,7 @@ extension Ghostty {
}
// Hidden depending on overlay config
switch (overlay) {
switch overlay {
case .never: return true;
case .always: return false;
case .after_first: return lastSize == nil;
@@ -342,12 +342,12 @@ extension Ghostty {
var body: some View {
VStack {
if (!position.top()) {
if !position.top() {
Spacer()
}
HStack {
if (!position.left()) {
if !position.left() {
Spacer()
}
@@ -361,12 +361,12 @@ extension Ghostty {
.lineLimit(1)
.truncationMode(.tail)
if (!position.right()) {
if !position.right() {
Spacer()
}
}
if (!position.bottom()) {
if !position.bottom() {
Spacer()
}
}
@@ -386,7 +386,7 @@ extension Ghostty {
// We only sleep if we're ready. If we're not ready then we want to set
// our last size right away to avoid a flash.
if (ready) {
if ready {
try? await Task.sleep(nanoseconds: UInt64(duration) * 1_000_000)
}

View File

@@ -151,7 +151,7 @@ extension Ghostty {
// We need to update our state within the SecureInput manager.
let input = SecureInput.shared
let id = ObjectIdentifier(self)
if (passwordInput) {
if passwordInput {
input.setScoped(id, focused: focused)
} else {
input.removeScoped(id)
@@ -183,7 +183,7 @@ extension Ghostty {
// True if the inspector should be visible
@Published var inspectorVisible: Bool = false {
didSet {
if (oldValue && !inspectorVisible) {
if oldValue && !inspectorVisible {
guard let surface = self.surface else { return }
ghostty_inspector_free(surface)
}
@@ -431,11 +431,11 @@ extension Ghostty {
ghostty_surface_set_focus(surface, focused)
// Update our secure input state if we are a password input
if (passwordInput) {
if passwordInput {
SecureInput.shared.setScoped(ObjectIdentifier(self), focused: focused)
}
if (focused) {
if focused {
// On macOS 13+ we can store our continuous clock...
focusInstant = ContinuousClock.now
@@ -480,7 +480,7 @@ extension Ghostty {
}
func setCursorShape(_ shape: ghostty_action_mouse_shape_e) {
switch (shape) {
switch shape {
case GHOSTTY_MOUSE_SHAPE_DEFAULT:
pointerStyle = .default
@@ -656,7 +656,7 @@ extension Ghostty {
private func localEventKeyUp(_ event: NSEvent) -> NSEvent? {
// We only care about events with "command" because all others will
// trigger the normal responder chain.
if (!event.modifierFlags.contains(.command)) { return event }
if !event.modifierFlags.contains(.command) { return event }
// Command keyUp events are never sent to the normal responder chain
// so we send them here.
@@ -722,7 +722,7 @@ extension Ghostty {
SwiftUI.Notification.Name.GhosttyColorChangeKey
] as? Ghostty.Action.ColorChange else { return }
switch (change.kind) {
switch change.kind {
case .background:
DispatchQueue.main.async { [weak self] in
self?.backgroundColor = change.color
@@ -767,7 +767,7 @@ extension Ghostty {
override func becomeFirstResponder() -> Bool {
let result = super.becomeFirstResponder()
if (result) { focusDidChange(true) }
if result { focusDidChange(true) }
return result
}
@@ -776,7 +776,7 @@ extension Ghostty {
// We sometimes call this manually (see SplitView) as a way to force us to
// yield our focus state.
if (result) { focusDidChange(false) }
if result { focusDidChange(false) }
return result
}
@@ -878,12 +878,12 @@ extension Ghostty {
guard let surface = self.surface else { return super.rightMouseDown(with: event) }
let mods = Ghostty.ghosttyMods(event.modifierFlags)
if (ghostty_surface_mouse_button(
if ghostty_surface_mouse_button(
surface,
GHOSTTY_MOUSE_PRESS,
GHOSTTY_MOUSE_RIGHT,
mods
)) {
) {
// Consumed
return
}
@@ -896,12 +896,12 @@ extension Ghostty {
guard let surface = self.surface else { return super.rightMouseUp(with: event) }
let mods = Ghostty.ghosttyMods(event.modifierFlags)
if (ghostty_surface_mouse_button(
if ghostty_surface_mouse_button(
surface,
GHOSTTY_MOUSE_RELEASE,
GHOSTTY_MOUSE_RIGHT,
mods
)) {
) {
// Handled
return
}
@@ -963,9 +963,9 @@ extension Ghostty {
if let window,
let controller = window.windowController as? BaseTerminalController,
!controller.commandPaletteIsShowing,
(window.isKeyWindow &&
window.isKeyWindow &&
!self.focused &&
controller.focusFollowsMouse)
controller.focusFollowsMouse
{
Ghostty.moveFocus(to: self)
}
@@ -1048,7 +1048,7 @@ extension Ghostty {
// for exact states and set them.
var translationMods = event.modifierFlags
for flag in [NSEvent.ModifierFlags.shift, .control, .option, .command] {
if (translationModsGhostty.contains(flag)) {
if translationModsGhostty.contains(flag) {
translationMods.insert(flag)
} else {
translationMods.remove(flag)
@@ -1061,7 +1061,7 @@ extension Ghostty {
// this keeps things like Korean input working. There must be some object
// equality happening in AppKit somewhere because this is required.
let translationEvent: NSEvent
if (translationMods == event.modifierFlags) {
if translationMods == event.modifierFlags {
translationEvent = event
} else {
translationEvent = NSEvent.keyEvent(
@@ -1093,7 +1093,7 @@ extension Ghostty {
// We need to know the keyboard layout before below because some keyboard
// input events will change our keyboard layout and we don't want those
// going to the terminal.
let keyboardIdBefore: String? = if (!markedTextBefore) {
let keyboardIdBefore: String? = if !markedTextBefore {
KeyboardLayout.id
} else {
nil
@@ -1108,7 +1108,7 @@ extension Ghostty {
// If our keyboard changed from this we just assume an input method
// grabbed it and do nothing.
if (!markedTextBefore && keyboardIdBefore != KeyboardLayout.id) {
if !markedTextBefore && keyboardIdBefore != KeyboardLayout.id {
return
}
@@ -1192,7 +1192,7 @@ extension Ghostty {
// Besides C-/, its important we don't process key equivalents if unfocused
// because there are other event listeners for that (i.e. AppDelegate's
// local event handler).
if (!focused) {
if !focused {
return false
}
@@ -1227,11 +1227,11 @@ extension Ghostty {
}
let equivalent: String
switch (event.charactersIgnoringModifiers) {
switch event.charactersIgnoringModifiers {
case "\r":
// Pass C-<return> through verbatim
// (prevent the default context menu equivalent)
if (!event.modifierFlags.contains(.control)) {
if !event.modifierFlags.contains(.control) {
return false
}
@@ -1240,8 +1240,8 @@ extension Ghostty {
case "/":
// Treat C-/ as C-_. We do this because C-/ makes macOS make a beep
// sound and we don't like the beep sound.
if (!event.modifierFlags.contains(.control) ||
!event.modifierFlags.isDisjoint(with: [.shift, .command, .option])) {
if !event.modifierFlags.contains(.control) ||
!event.modifierFlags.isDisjoint(with: [.shift, .command, .option]) {
return false
}
@@ -1265,8 +1265,8 @@ extension Ghostty {
// Ignore all other non-command events. This lets the event continue
// through the AppKit event systems.
if (!event.modifierFlags.contains(.command) &&
!event.modifierFlags.contains(.control)) {
if !event.modifierFlags.contains(.command) &&
!event.modifierFlags.contains(.control) {
// Reset since we got a non-command event.
lastPerformKeyEvent = nil
return false
@@ -1305,7 +1305,7 @@ extension Ghostty {
override func flagsChanged(with event: NSEvent) {
let mod: UInt32;
switch (event.keyCode) {
switch event.keyCode {
case 0x39: mod = GHOSTTY_MODS_CAPS.rawValue
case 0x38, 0x3C: mod = GHOSTTY_MODS_SHIFT.rawValue
case 0x3B, 0x3E: mod = GHOSTTY_MODS_CTRL.rawValue
@@ -1323,13 +1323,13 @@ extension Ghostty {
// If the key that pressed this is active, its a press, else release.
var action = GHOSTTY_ACTION_RELEASE
if (mods.rawValue & mod != 0) {
if mods.rawValue & mod != 0 {
// If the key is pressed, its slightly more complicated, because we
// want to check if the pressed modifier is the correct side. If the
// correct side is pressed then its a press event otherwise its a release
// event with the opposite modifier still held.
let sidePressed: Bool
switch (event.keyCode) {
switch event.keyCode {
case 0x3C:
sidePressed = event.modifierFlags.rawValue & UInt(NX_DEVICERSHIFTKEYMASK) != 0;
case 0x3E:
@@ -1342,7 +1342,7 @@ extension Ghostty {
sidePressed = true
}
if (sidePressed) {
if sidePressed {
action = GHOSTTY_ACTION_PRESS
}
}
@@ -1483,7 +1483,7 @@ extension Ghostty {
@IBAction func copy(_ sender: Any?) {
guard let surface = self.surface else { return }
let action = "copy_to_clipboard"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@@ -1491,7 +1491,7 @@ extension Ghostty {
@IBAction func paste(_ sender: Any?) {
guard let surface = self.surface else { return }
let action = "paste_from_clipboard"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@@ -1500,7 +1500,7 @@ extension Ghostty {
@IBAction func pasteAsPlainText(_ sender: Any?) {
guard let surface = self.surface else { return }
let action = "paste_from_clipboard"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@@ -1508,7 +1508,7 @@ extension Ghostty {
@IBAction func pasteSelection(_ sender: Any?) {
guard let surface = self.surface else { return }
let action = "paste_from_selection"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@@ -1516,7 +1516,7 @@ extension Ghostty {
@IBAction override func selectAll(_ sender: Any?) {
guard let surface = self.surface else { return }
let action = "select_all"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@@ -1524,7 +1524,7 @@ extension Ghostty {
@IBAction func find(_ sender: Any?) {
guard let surface = self.surface else { return }
let action = "start_search"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@@ -1532,7 +1532,7 @@ extension Ghostty {
@IBAction func selectionForFind(_ sender: Any?) {
guard let surface = self.surface else { return }
let action = "search_selection"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@@ -1540,7 +1540,7 @@ extension Ghostty {
@IBAction func scrollToSelection(_ sender: Any?) {
guard let surface = self.surface else { return }
let action = "scroll_to_selection"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@@ -1548,7 +1548,7 @@ extension Ghostty {
@IBAction func findNext(_ sender: Any?) {
guard let surface = self.surface else { return }
let action = "search:next"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@@ -1556,7 +1556,7 @@ extension Ghostty {
@IBAction func findPrevious(_ sender: Any?) {
guard let surface = self.surface else { return }
let action = "search:previous"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@@ -1564,7 +1564,7 @@ extension Ghostty {
@IBAction func findHide(_ sender: Any?) {
guard let surface = self.surface else { return }
let action = "end_search"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@@ -1572,7 +1572,7 @@ extension Ghostty {
@IBAction func toggleReadonly(_ sender: Any?) {
guard let surface = self.surface else { return }
let action = "toggle_readonly"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@@ -1608,7 +1608,7 @@ extension Ghostty {
@objc func resetTerminal(_ sender: Any) {
guard let surface = self.surface else { return }
let action = "reset"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@@ -1616,7 +1616,7 @@ extension Ghostty {
@objc func toggleTerminalInspector(_ sender: Any) {
guard let surface = self.surface else { return }
let action = "inspector:toggle"
if (!ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8)))) {
if !ghostty_surface_binding_action(surface, action, UInt(action.lengthOfBytes(using: .utf8))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@@ -1657,7 +1657,7 @@ extension Ghostty {
// If we're focused then we schedule to remove the notification
// after a few seconds. If we gain focus we automatically remove it
// in focusDidChange.
if (self.focused) {
if self.focused {
Task { @MainActor [weak self] in
try await Task.sleep(for: .seconds(3))
self?.notificationIdentifiers.remove(uuid)
@@ -1913,7 +1913,7 @@ extension Ghostty.SurfaceView: NSTextInputClient {
// We want the string view of the any value
var chars = ""
switch (string) {
switch string {
case let v as NSAttributedString:
chars = v.string
case let v as String:
@@ -2052,7 +2052,7 @@ extension Ghostty.SurfaceView: NSServicesMenuRequestor {
guard let str = pboard.getOpinionatedStringContents() else { return false }
let len = str.utf8CString.count
if (len == 0) { return true }
if len == 0 { return true }
str.withCString { ptr in
// len includes the null terminator so we do len - 1
ghostty_surface_text(surface, ptr, UInt(len - 1))

View File

@@ -98,7 +98,7 @@ extension Ghostty {
ghostty_surface_set_focus(surface, focused)
// On macOS 13+ we can store our continuous clock...
if (focused) {
if focused {
focusInstant = ContinuousClock.now
}
}

View File

@@ -9,7 +9,7 @@ extension NSAppearance {
/// Initialize a desired NSAppearance for the Ghostty configuration.
convenience init?(ghosttyConfig config: Ghostty.Config) {
guard let theme = config.windowTheme else { return nil }
switch (theme) {
switch theme {
case "dark":
self.init(named: .darkAqua)

View File

@@ -18,7 +18,7 @@ extension NSApplication {
func releasePresentationOption(_ option: NSApplication.PresentationOptions.Element) {
guard let value = Self.presentationOptionCounts[option] else { return }
guard value > 0 else { return }
if (value == 1) {
if value == 1 {
presentationOptions.remove(option)
Self.presentationOptionCounts.removeValue(forKey: option)
} else {

View File

@@ -50,7 +50,7 @@ extension NSPasteboard {
/// The pasteboard for the Ghostty enum type.
static func ghostty(_ clipboard: ghostty_clipboard_e) -> NSPasteboard? {
switch (clipboard) {
switch clipboard {
case GHOSTTY_CLIPBOARD_STANDARD:
return Self.general

View File

@@ -19,7 +19,7 @@ extension NSScreen {
var hasDock: Bool {
// If the dock autohides then we don't have a dock ever.
if let dockAutohide = UserDefaults.standard.persistentDomain(forName: "com.apple.dock")?["autohide"] as? Bool {
if (dockAutohide) { return false }
if dockAutohide { return false }
}
// There is no public API to directly ask about dock visibility, so we have to figure it out
@@ -29,7 +29,7 @@ extension NSScreen {
// which triggers showing the dock.
// If our visible width is less than the frame we assume its the dock.
if (visibleFrame.width < frame.width) {
if visibleFrame.width < frame.width {
return true
}

View File

@@ -204,12 +204,12 @@ class NonNativeFullscreen: FullscreenBase, FullscreenStyle {
// We must hide the dock FIRST then hide the menu:
// If you specify autoHideMenuBar, it must be accompanied by either hideDock or autoHideDock.
// https://developer.apple.com/documentation/appkit/nsapplication/presentationoptions-swift.struct
if (savedState.dock) {
if savedState.dock {
hideDock()
}
// Hide the menu if requested
if (properties.hideMenu && savedState.menu) {
if properties.hideMenu && savedState.menu {
hideMenu()
}
@@ -261,7 +261,7 @@ class NonNativeFullscreen: FullscreenBase, FullscreenStyle {
if savedState.dock {
unhideDock()
}
if (properties.hideMenu && savedState.menu) {
if properties.hideMenu && savedState.menu {
unhideMenu()
}
@@ -328,8 +328,8 @@ class NonNativeFullscreen: FullscreenBase, FullscreenStyle {
// calculate this ourselves.
var frame = screen.frame
if (!NSApp.presentationOptions.contains(.autoHideMenuBar) &&
!NSApp.presentationOptions.contains(.hideMenuBar)) {
if !NSApp.presentationOptions.contains(.autoHideMenuBar) &&
!NSApp.presentationOptions.contains(.hideMenuBar) {
// We need to subtract the menu height since we're still showing it.
frame.size.height -= NSApp.mainMenu?.menuBarHeight ?? 0
@@ -339,7 +339,7 @@ class NonNativeFullscreen: FullscreenBase, FullscreenStyle {
// put an #available check, but it was in a bug fix release so I think
// if a bug is reported to Ghostty we can just advise the user to
// update.
} else if (properties.paddedNotch) {
} else if properties.paddedNotch {
// We are hiding the menu, we may need to avoid the notch.
frame.size.height -= screen.safeAreaInsets.top
}
@@ -413,7 +413,7 @@ class NonNativeFullscreen: FullscreenBase, FullscreenStyle {
self.toolbarStyle = window.toolbarStyle
self.dock = window.screen?.hasDock ?? false
self.titlebarAccessoryViewControllers = if (window.hasTitleBar) {
self.titlebarAccessoryViewControllers = if window.hasTitleBar {
// Accessing titlebarAccessoryViewControllers without a titlebar triggers a crash.
window.titlebarAccessoryViewControllers
} else {