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

48 lines
1.4 KiB
Swift

import AppKit
import SwiftTerm
import SwiftUI
typealias ViewState = State
@main
struct ByreApp: App {
@ViewState private var connection = Connection()
@ViewState private var spike = SpikeLog()
var body: some Scene {
Window("byre", id: "main") {
RootView()
.environment(connection)
.environment(spike)
.font(Fonts.font(13))
.onAppear {
installCtrlMonitor(spike)
}
}
.commands {
CommandGroup(after: .appInfo) {
Button("Change Server…") {
connection.changeServer()
}
}
PasteboardCommands()
}
}
}
@MainActor
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 {
spike.log("ctrl-\(key) passed to the terminal")
return event
}
spike.log("ctrl-\(key) taken as a Go shortcut")
return nil
}
}