这是一个有点模糊的问题,所以我会尽力描述它以及我已经尝试过的内容。我刚开始使用 macOS Monterey,我怀疑新的 macOS 版本破坏了我的工作流程。
我在 Hammerspoon 中绑定了一个热键,它启动了一个非常轻量级的 GUI 选择器菜单应用程序(从 自动填充密码pass
)。它仍然有效(现在几年没有改变),除非密码字段(即,NSSecureTextField
)是关键并具有焦点。这在以前的 macOS 版本中不是问题,并且相同的设置(通过版本化的点文件)在 Big Sur 中运行良好,没有改变。
这是我的设置,大致如下:(它从我通常使用的内容中剥离出来,但重现了这个问题。keuze
指的是我一直在尝试的https://github.com/JodusNodus/keuzekeuze
的一个分支。“真正的”可以不会像这样调用,但我已经分叉了它并硬编码了提示文本和选项列表以用于测试目的。)
锤子键绑定:
hs.hotkey.bind({"alt", "shift"}, "i", function()
local output, status, exit_type, rc = hs.execute("~/src/keuze/build/Release/keuze", false)
if status then
hs.eventtap.keyStrokes(trim(output))
end
end)
当我~/src/keuze/build/Release/keuze
从终端运行时,它按预期显示,并且在使用我的 Hammerspoon 键绑定时也按预期显示。只有当一个NSSecureTextField
有焦点时,keuze
应用程序才会启动但没有焦点。
我应该补充一点,如果我尝试hs:chooser
如下使用本机 Hammerspoon,即使我从密码字段中调用它,它也会成功获得焦点:
hs.hotkey.bind({"alt", "shift"}, "o", function()
local chooser = hs.chooser.new(function(choice)
end)
local windows = {}
chooser
:placeholderText("Whatever bleep bloop")
:searchSubText(true)
:choices(windows)
:show()
end)
我确实注意到,当我启用 Console.app 的日志流功能,选择一个密码字段并触发键绑定时,有一个可疑条目似乎是一把确凿的证据:
错误18:20:36.254859 + 1100 WindowServer CPS:拒绝keuze在前面的权利,因为secureTextInput处于活动状态并且此进程未启用安全文本模式,并且此请求不是由用户活动引起的
子系统:com.apple.SkyLight
这让我想到需要将 Hammerspoon 添加到系统偏好设置 > 安全和隐私 > 隐私 > 可访问性,所以我也尝试将我的二进制文件 ( ~/src/keuze/build/Release/keuze
) 添加到该列表中。那没有任何区别。我如何才能以 macOS 认为它响应用户活动的方式启动该过程,或者他们所指的“启用安全文本模式”?
我已经用谷歌搜索了该错误消息的各个部分,例如“secureTextInput 处于活动状态,此过程没有安全文本模式”,但似乎没有任何好的线索!除了这个 Alfred 论坛帖子,它可能会也可能不会成功:https ://www.alfredforum.com/topic/17449-opening-problem-on-monterey-after-clicking-on-password-field/ 。
感谢您耐心阅读这篇长文
PS:据我所知,这种安全文本模式是指在 Carbon / 10.3-10.4 (!) 时代引入的一项功能,但我找不到有关如何合法使用它的提示。