displaywatch.swift (1013B)
1 // Logs display add/remove/mode events with timestamps. 2 import AppKit 3 import CoreGraphics 4 setvbuf(stdout, nil, _IOLBF, 0) 5 func dump(_ tag: String) { 6 var ids = [CGDirectDisplayID](repeating: 0, count: 8); var n: UInt32 = 0 7 CGGetOnlineDisplayList(8, &ids, &n) 8 let d = ids.prefix(Int(n)).map { id -> String in 9 let m = CGDisplayCopyDisplayMode(id) 10 return "\(id):\(CGDisplayVendorNumber(id)) \(m?.pixelWidth ?? 0)x\(m?.pixelHeight ?? 0)@\(m?.refreshRate ?? 0)" 11 } 12 print(String(format: "%.3f ", Date().timeIntervalSince1970) + "\(tag): \(d.joined(separator: " | "))") 13 } 14 CGDisplayRegisterReconfigurationCallback({ id, flags, _ in 15 if flags.contains(.beginConfigurationFlag) { return } 16 var f: [String] = [] 17 if flags.contains(.addFlag) { f.append("ADD") } 18 if flags.contains(.removeFlag) { f.append("REMOVE") } 19 if flags.contains(.setModeFlag) { f.append("MODE") } 20 dump("display \(id) [\(f.joined(separator: ","))]") 21 }, nil) 22 dump("start") 23 NSApplication.shared.run()