v0.1.13
v0.1.13
三大块新功能:
-
host ↔ guest 剪贴板双向共享
- 自家实现 spice-vdagent 协议 (ANNOUNCE_CAPABILITIES 协商 + GRAB/REQUEST/CLIPBOARD
状态机 + multi-chunk reassembly), 不依赖 spice-gtk - PasteboardBridge: 1Hz NSPasteboard 轮询 + UTF-8 文本双向桥, 防 echo loop
- vdagent socket 由 VMHost 唯一持有 (single-client 限制), GUI 走 IPC
display.setMonitors / clipboard.setEnabled - per-VM 配置 (clipboardSharingEnabled), 运行中可即时切换
- 自家实现 spice-vdagent 协议 (ANNOUNCE_CAPABILITIES 协商 + GRAB/REQUEST/CLIPBOARD
-
macOS 风快捷键 (cmd → ctrl 映射)
- host cmd+c/v/x/a/... 自动映射成 guest ctrl+c/v/x/a/...
- 修了 macOS 已知 "按住 cmd 字符键 keyUp 不送 view" 卡键问题
(NSEvent local monitor 拦截 + flagsChanged 兜底) - per-VM 配置 (macStyleShortcuts), 默认开
-
detached 独立窗口完全重写 (borderless + 自家 chrome)
- styleMask 改 .borderless 彻底去掉系统 titlebar (之前 fullSizeContentView
仍残留 titlebar 概念跟自家 toolbar 重叠) - BorderlessKeyableWindow subclass + 自家 TrafficLights 三按钮
(close→关 detached / min→miniaturize / zoom→toggleFullScreen) - 单条 28px toolbar: 红绿灯 + GuestBadge + name + status + config + Pause/
Stop/Kill + clipboard toggle, 删原 DetailBottomBar - aspect ratio 严格保持 guest 比例 (chrome 真实高度 layout-pass 量出反算),
不再有大左右黑边 - resize 触发改用 NSWindow live resize (用户真拖动才 resize), 不再被
layout-driven drawableSizeWillChange 误触发 - broadcastSurface fd 顺序 race 修复 (close-before-dup 让 detached 永远收
不到新 surface)
- styleMask 改 .borderless 彻底去掉系统 titlebar (之前 fullSizeContentView
附加:
- VMConfig schema v2 yaml + 加 clipboardSharingEnabled / macStyleShortcuts
字段 (decodeIfPresent 兜底, 老 yaml 自动迁移) - 新 IPCOp: display.setMonitors / clipboard.setEnabled
- dbg.display.resize handler 改用 state 内持久 vdagent
- README 更新: 删过时不做项 (QEMU 嵌入主窗口已实现) + 修 install-vmnet
脚本名 + config.yaml 路径 + 加新功能描述