AwesomeWM:在代码中关闭提示框而不需要按回车/ Esc键

我正在尝试为关闭我的计算机添加一个键绑定到我的rc.lua上,它将显示一个提示,如"Shutdown (y/n)? ",如果按下"y"则将调用关机,但如果按下其他任何键,则关闭。到目前为止,这是我的尝试:

...
awful.key({ modkey, "Control", "Shift" }, "q",
      function ()
          awful.prompt.run {
            prompt       = "关机? (y/n) ",
            textbox      = awful.screen.focused().mypromptbox.widget,
            keypressed_callback = function (_, key, _)
                if key == "y" then
                    naughty.notify {
                        text = "关机中!"
                    }
                else
                    naughty.notify {
                        text = "不关闭!"
                    }
                end
                return
            end,
          }
      end,
  {description = "shutdown", group = "awesome"}),
...

但是,提示框在按下键后仍然保持活动状态-keypressed_callback将继续触发,直到我按下Return或Escape为止。

这是合理的默认行为,但在我的情况下,我希望提示框在第一个keypressed_callback事件后关闭。 我的第一个想法是在keypressed_callback中使用return尝试逃脱/取消/销毁提示框,但这并没有做任何事情。

有什么办法可以实现这个?

点赞
用户1672598
用户1672598

你可以调用 awful.keygrabber.stop()

我必须承认这并不理想,而且该函数实际上已被弃用。我认为这实际上是提示模块本身的一个功能缺陷。

对于单个字符提示,我建议直接使用 https://awesomewm.org/apidoc/core_components/awful.keygrabber.html 并使用文本框实现一个非交互的小部件。

(另一个选择是使用 root.fake_inputawful.keyboard 来模拟 Escape/Enter,但那是一个非常糟糕的 hack)

2021-05-04 08:11:05