Files
byre/mac/Sources/Byre/ByreApp.swift
T

48 lines
1.4 KiB
Swift
Raw Normal View History

import AppKit
import SwiftTerm
import SwiftUI
typealias ViewState = State
@main
struct ByreApp: App {
2026-10-16 22:46:54 -07:00
@ViewState private var connection = Connection()
@ViewState private var spike = SpikeLog()
var body: some Scene {
Window("byre", id: "main") {
2026-10-16 22:46:54 -07:00
RootView()
.environment(connection)
.environment(spike)
.font(Fonts.font(13))
.onAppear {
2026-10-16 22:46:54 -07:00
installCtrlMonitor(spike)
}
}
.commands {
2026-10-16 22:46:54 -07:00
CommandGroup(after: .appInfo) {
Button("Change Server…") {
connection.changeServer()
}
}
PasteboardCommands()
}
}
}
@MainActor
2026-10-16 22:46:54 -07:00
private func installCtrlMonitor(_ spike: SpikeLog) {
NSEvent.addLocalMonitorForEvents(matching: .keyDown) { event in
let flags = event.modifierFlags.intersection(.deviceIndependentFlagsMask)
guard flags.contains(.control), !flags.contains(.command), let key = event.charactersIgnoringModifiers, ["k", "p", "l", "s", "/"].contains(key) else {
return event
}
if event.window?.firstResponder is TerminalView {
2026-10-16 22:46:54 -07:00
spike.log("ctrl-\(key) passed to the terminal")
return event
}
2026-10-16 22:46:54 -07:00
spike.log("ctrl-\(key) taken as a Go shortcut")
return nil
}
}