Lua AwesomeWM:在代码中关闭提示框而不按Enter/Escape
我正在尝试向我的Lua AwesomeWM:在代码中关闭提示框而不按Enter/Escape,lua,awesome-wm,Lua,Awesome Wm,我正在尝试向我的rc.lua添加一个键绑定以关闭我的计算机,它将显示一个类似于“Shutdown(y/n)”的提示,如果按下“y”,它将调用一个Shutdown,但如果按下任何其他按钮,它将关闭。以下是我迄今为止的尝试: ... awful.key({ modkey, "Control", "Shift" }, "q", function () awful.prompt.run {
rc.lua
添加一个键绑定以关闭我的计算机,它将显示一个类似于“Shutdown(y/n)”的提示,如果按下“y”,它将调用一个Shutdown,但如果按下任何其他按钮,它将关闭。以下是我迄今为止的尝试:
...
awful.key({ modkey, "Control", "Shift" }, "q",
function ()
awful.prompt.run {
prompt = "Shutdown? (y/n) ",
textbox = awful.screen.focused().mypromptbox.widget,
keypressed_callback = function (_, key, _)
if key == "y" then
naughty.notify {
text = "Shutting down!"
}
else
naughty.notify {
text = "Not shutting down!"
}
end
return
end,
}
end,
{description = "shutdown", group = "awesome"}),
...
但是,按键后提示仍处于活动状态-每按下一个键,keypressed\u回调将继续触发,直到我按下Return或Escape
这是合理的默认行为,但在我的例子中,我希望在第一次keypressed\u回调
事件之后关闭提示。我的第一个想法是在键按下的回调
中使用返回
,尝试逃避/取消/销毁提示,但这没有任何作用
还有其他方法可以实现这一点吗?您可以调用可怕的.keygrabber.stop()
我必须承认这并不理想,而且该函数实际上已被弃用。我认为这确实是prompt模块本身的一个功能缺陷
对于单字符提示,我建议直接使用并使用textbox实现一个非交互式小部件
(另一种选择是使用root.fake_input
或world.keyboard
来模拟Escape/Enter,但这是一种非常糟糕的黑客行为)当你说“非交互式小部件”时,你的意思是不使用world.prompt.run()
?你能建议我怎么做吗?我确实尝试过使用可怕的.prompt.run()
,但它有两个问题。首先,键盘抓取器并不总是在按下第一个键后停止,有时我可以在停止前按2或3个键。不知道为什么。此外,在调用可怕的.keygrabber.stop()
后,提示不会消失,我也不知道如何清除它。我的意思是使用可怕的.keygrabber
而不是此用例的提示小部件。它并不完美,但使“新用例”(如单字符提示)更容易实现。糟糕的.prompt.run
API在过去几年中有过一些油漆涂层,但在引擎盖下,大部分都有13年的历史,并且几乎仅限于is今天所做的事情。