簡要描述 Bug:
Squirrel 的菜单栏状态图标(显示"中"/"A"的位置),用 Command + 拖拽调整顺序后,锁屏再解锁(或注销重新登录)会回到最前面(最左侧),无法固定位置。
預期行爲:
调整后的菜单栏图标位置应在锁屏/重启/注销后保持。
實際行爲:
锁屏再解锁后,Squirrel 的状态图标总是回到菜单栏的最前面(最左侧),需要每次手动重新拖拽排列。
環境
- 系統版本: macOS 15.x(macOS 11 Big Sur 起均受影响)
- 鼠鬚管版本: 1.1.2 / master (latest)
- 方案: 不限,与方案无关
我試過:
根因分析(由 AI 辅助完成):
macOS Big Sur 起要求 NSStatusItem 设置 autosaveName,系统才能记住其在菜单栏中的位置并在会话恢复(锁屏/注销/重启)后还原。Squirrel 在创建状态图标时未设置此项。
代码定位:
SquirrelApplicationDelegate.swift 中的 setupStatusItem() 方法(约 L353-362):
func setupStatusItem() {
let item = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
if let button = item.button {
button.font = NSFont.systemFont(ofSize: NSFont.systemFontSize, weight: .semibold)
button.toolTip = NSLocalizedString("Squirrel", comment: "")
}
statusItem = item
applyStatusIcon(asciiMode: false, schemaLabel: nil)
updateStatusItemVisibility()
}
缺少 item.autosaveName = "SquirrelStatusItem"。
修复建议:
在 L354 之后添加一行:
item.autosaveName = "SquirrelStatusItem"
即可让 macOS 记住该状态项的位置。改动极小,不存在兼容性问题(autosaveName 是 NSStatusItem 从 macOS 10.x 就有的属性,Big Sur 起成为必选项)。
簡要描述 Bug:
Squirrel 的菜单栏状态图标(显示"中"/"A"的位置),用 Command + 拖拽调整顺序后,锁屏再解锁(或注销重新登录)会回到最前面(最左侧),无法固定位置。
預期行爲:
调整后的菜单栏图标位置应在锁屏/重启/注销后保持。
實際行爲:
锁屏再解锁后,Squirrel 的状态图标总是回到菜单栏的最前面(最左侧),需要每次手动重新拖拽排列。
環境
我試過:
朙月拼音)後問題仍存在根因分析(由 AI 辅助完成):
macOS Big Sur 起要求
NSStatusItem设置autosaveName,系统才能记住其在菜单栏中的位置并在会话恢复(锁屏/注销/重启)后还原。Squirrel 在创建状态图标时未设置此项。代码定位:
SquirrelApplicationDelegate.swift中的setupStatusItem()方法(约 L353-362):缺少
item.autosaveName = "SquirrelStatusItem"。修复建议:
在 L354 之后添加一行:
即可让 macOS 记住该状态项的位置。改动极小,不存在兼容性问题(
autosaveName是 NSStatusItem 从 macOS 10.x 就有的属性,Big Sur 起成为必选项)。