所以我一直在尝试配置我的Awesome WM配置(rc.lua)以检测登录/重置时我的IBM型号M13是否连接到我的笔记本电脑。这是为了改变modkey应该是什么,因为M13没有超级键。
以下代码对我有意义,并且在为awful.spawn.easy_async函数执行的函数中更改了modkey,但在完成modkey之后更改回Mod4。
modkey = "Mod4"
awful.spawn.easy_async(
"xinput list",
function(stdout, stderr, reason, code)
local msg = "Regular keyboard Modkey = Super"
-- Debug notification that shows that the modkey is
-- at its default for the superkey Mod4
naughty.notify({
text = modkey,
timeout =7
})
if code ~= 0 then
msg = "Missing xinput to see devices\nModkey = Super"
elseif stdout:match("CHESEN") == "CHESEN" then
-- CHESEN is my PS/2 to USB adapter
msg = "IBM M13 detected\nModkey = Alt"
modkey = "Mod1" -- Sets new modkey to Alt
end
-- Notification message
naughty.notify({
text = msg,
timeout =7
})
end
)
-- Debug notification to verify key but key goes back to Mod4
naughty.notify({
text = modkey,
timeout =7
})
输出可以在这里看到。它不按顺序打印通知,但Mod 4的打印都是调试打印。
除了不时更改我的配置外,我不会使用Lua,因此我很难理解如何更改我的全局变量modkey并重置它。我尝试的其他方法是将函数定义为一个函数我调用setModKey作为参数传递给easy_async我尝试使用_G设置modkey将其设置为_G.modkey,但我最终得到相同的结果。
我是否遗漏了对Lua至关重要的东西,还是受到Awesome WM如何使用Lua的影响?任何帮助将非常感激。
答案 0 :(得分:0)
使用io.popen
代替awful.spawn.easy_async
。是的,通常不建议使用io.popen
,但以下情况会发生:
easy_async
以捕获xinput list
easy_async
完成其工作,并将modkey
设置为其他内容。这意味着从现在开始定义的任何键绑定都使用新的modkey,但是所有已存在的键绑定都不会被修改。所以,基本上没有任何事情发生。
对于naughty.notify
的调试调用:首先触发函数之后的那个,之后,内部函数会触发。所以它不会回头,而是先显示旧值,然后再显示新值。