在Awaome Window Manager的Lua脚本中更改全局变量的内容?

时间:2018-01-26 19:57:46

标签: lua awesome-wm

所以我一直在尝试配置我的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的打印都是调试打印。

Notification Output

除了不时更改我的配置外,我不会使用Lua,因此我很难理解如何更改我的全局变量modkey并重置它。我尝试的其他方法是将函数定义为一个函数我调用setModKey作为参数传递给easy_async我尝试使用_G设置modkey将其设置为_G.modkey,但我最终得到相同的结果。

我是否遗漏了对Lua至关重要的东西,还是受到Awesome WM如何使用Lua的影响?任何帮助将非常感激。

1 个答案:

答案 0 :(得分:0)

使用io.popen代替awful.spawn.easy_async。是的,通常不建议使用io.popen,但以下情况会发生:

  • 真棒开始
  • 您致电easy_async以捕获xinput list
  • 的输出
  • 由于它是异步的,因此您的配置会继续加载,例如所有的键绑定都已设置
  • easy_async完成其工作,并将modkey设置为其他内容。

这意味着从现在开始定义的任何键绑定都使用新的modkey,但是所有已存在的键绑定都不会被修改。所以,基本上没有任何事情发生。

对于naughty.notify的调试调用:首先触发函数之后的那个,之后,内部函数会触发。所以它不会回头,而是先显示旧值,然后再显示新值。