native macOS codings agent orchestrator
6
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add 300ms delay before showing hotkey hints

Prevents hints from flashing during quick Command key presses.

khoi 701652f8 5b8a8a9b

+23 -4
+23 -4
supacode/App/CommandKeyObserver.swift
··· 4 4 @MainActor 5 5 @Observable 6 6 final class CommandKeyObserver { 7 + private static let holdDelay: Duration = .milliseconds(300) 8 + 7 9 var isPressed: Bool 8 10 private var monitor: Any? 9 11 private var didBecomeActiveObserver: NSObjectProtocol? 10 12 private var didResignActiveObserver: NSObjectProtocol? 13 + private var holdTask: Task<Void, Never>? 11 14 12 15 init() { 13 - isPressed = NSEvent.modifierFlags.contains(.command) 16 + isPressed = false 14 17 monitor = nil 15 18 didBecomeActiveObserver = nil 16 19 didResignActiveObserver = nil 20 + holdTask = nil 17 21 configureObservers() 18 22 } 19 23 20 24 private func configureObservers() { 21 25 monitor = NSEvent.addLocalMonitorForEvents(matching: .flagsChanged) { [weak self] event in 22 26 MainActor.assumeIsolated { 23 - self?.isPressed = event.modifierFlags.contains(.command) 27 + self?.handleCommandKeyChange(isDown: event.modifierFlags.contains(.command)) 24 28 } 25 29 return event 26 30 } ··· 31 35 queue: .main 32 36 ) { [weak self] _ in 33 37 MainActor.assumeIsolated { 34 - self?.isPressed = NSEvent.modifierFlags.contains(.command) 38 + self?.handleCommandKeyChange(isDown: NSEvent.modifierFlags.contains(.command)) 35 39 } 36 40 } 37 41 didResignActiveObserver = center.addObserver( ··· 40 44 queue: .main 41 45 ) { [weak self] _ in 42 46 MainActor.assumeIsolated { 43 - self?.isPressed = false 47 + self?.handleCommandKeyChange(isDown: false) 48 + } 49 + } 50 + } 51 + 52 + private func handleCommandKeyChange(isDown: Bool) { 53 + holdTask?.cancel() 54 + holdTask = nil 55 + 56 + if isDown { 57 + holdTask = Task { 58 + try? await Task.sleep(for: Self.holdDelay) 59 + guard !Task.isCancelled else { return } 60 + isPressed = true 44 61 } 62 + } else { 63 + isPressed = false 45 64 } 46 65 } 47 66 }