41 lines
1.1 KiB
Swift
41 lines
1.1 KiB
Swift
import AppKit
|
|||
|
|
import SwiftTerm
|
||
|
|
import SwiftUI
|
||
|
|
|
||
|
|
typealias ViewState = State
|
||
|
|
|
||
|
|
@main
|
||
|
|
struct ByreApp: App {
|
||
|
|
@ViewState private var server = Server()
|
||
|
|
|
||
|
|
var body: some Scene {
|
||
|
|
Window("byre", id: "main") {
|
||
|
|
SpikeView()
|
||
|
|
.environment(server)
|
||
|
|
.font(Fonts.font(13))
|
||
|
|
.onAppear {
|
||
|
|
installCtrlMonitor(server)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
.commands {
|
||
|
|
PasteboardCommands()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@MainActor
|
||
|
|
private func installCtrlMonitor(_ server: Server) {
|
||
|
|
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 {
|
||
|
|
server.log("ctrl-\(key) passed to the terminal")
|
||
|
|
return event
|
||
|
|
}
|
||
|
|
server.log("ctrl-\(key) taken as a Go shortcut")
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
}
|