- M0: libghostty SSH 终端(渲染/输入/连接)+ 白屏修复(OutputGate) + 会话状态机/自动重连 - M1: tsnet 用户态组网 + SSH-over-tsnet(fd 桥),shell 级真机验证;R5(Go+gvisor+C+++Swift 同进程) retire - M1.5: tmux -CC 原生 tab(MVP) - 结构: packages/(TXCore·TXTransport), apps/TerminalX, vendor/(libghostty-spm/libssh2/mbedtls/tsnet-bridge), artifacts/ - 文档: CLAUDE.md + docs/HANDOFF.md(新会话入口) - 环境: 认证代理→依赖 vendor 本地化;Go 在 ~/.local/go;仅模拟器/未签名 - 待续: M2 mosh, tmux 多 pane, M4 安全(host key/SE) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1.7 KiB
1.7 KiB
MSDisplayLink
The missing DisplayLink driver for Apple platforms. Use CADisplayLink on UIKit and CVDisplayLink on AppKit.
Battle tested in ColorfulX
Called MS but it has nothing to do with Microsoft. :P
Preview
Installation
Swift Package Manager
.package(url: "https://github.com/Lakr233/MSDisplayLink.git", from: "2.0.8")
CocoaPods
Never thought about it.
Usage
UIKit/AppKit
Follow the steps to get called. The DisplayLinkDelegate is friendly to confirm for a UIView or NSView.
- Hold reference to
DisplayLinkobject. - Confirm to
DisplayLinkDelegateprotocol to get called withinsynchronization(). - Call
displayLink.delegatingObjectwith aDisplayLinkDelegateobject.
Tech Tips:
- Call to
synchronization()is performed at a background thread. - Scheduler is a serial queue unique to each
DisplayLinkDriverholds byDisplayLink.- Queue inherits the quality of service from the where you created the
DisplayLink. - Does not make scene to use concurrent queue.
- Does not share the queue across different
DisplayLinkobjects. - Queue names are same.
- Queue inherits the quality of service from the where you created the
SwiftUI
import MSDisplayLink
import SwiftUI
struct ContentView: View {
@State var frame: Int = 0
var body: some View {
VStack {
Text("MSDisplayLink Trigger: \(frame)")
.monospacedDigit()
.contentTransition(.numericText())
}
.animation(.interactiveSpring, value: frame)
.modifier(DisplayLinkModifier(scheduleToMainThread: true) {
frame += 1
})
.padding()
}
}
License
2024.08.14
