1

这是一个有点模糊的问题,所以我会尽力描述它以及我已经尝试过的内容。我刚开始使用 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 (!) 时代引入的一项功能,但我找不到有关如何合法使用它的提示。

4

0 回答 0