Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua AwesomeWM:在代码中关闭提示框而不按Enter/Escape_Lua_Awesome Wm - Fatal编程技术网

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今天所做的事情。