3

如何awesome/rc.lua在交互式迭代器中运行 lua 命令?

我正在尝试~/.config/awesome/rc.lua为新的键绑定创建一些功能。有时我得到一个错误,我想通过在命令行中打印表和变量来测试这些函数。我下载lua5.2并开始使用交互式解释器。我编写了一个在交互模式开始时运行的小脚本。

当我require("gears")require("awful")几乎所有其他库在/usr/share/awesome/lib/. 这里有些例子:

  1. 尝试时require("gears"),我收到错误: /usr/share/awesome/lib/gears/wallpaper.lua:17: attempt to index global 'screen' (a nil value)
  2. 当删除线时require("gears"),线require("awful"),给我: /usr/share/awesome/lib/awful/tag.lua:603: attempt to index field 'client' (a nil value)

似乎对于真棒库中的每个模块,都有一些组件不为 lua 解释器所知。我如何告诉 lua 解释器注意这些组件?

我对lua编码不是很有经验。我挖错地方了吗?是否有另一种可能更好的方法来测试功能awesome/rc.lua

4

2 回答 2

2

Mod4 + x运行 Lua 解释器。

rc.lua并将各种 Lua lib 文件加载到宿主程序(用 C 编写)提供的环境中。这就是您可以访问所提供的API元素(如screen和)的原因client在此处查看(部分)负责的文件。

如果你只是想在配置文件中调试一些基本的 Lua 函数,你可以考虑简单地写入文件或管道,而不是标准输出,然后监控它。

Mod4 + Control + r重新启动 Awesome,并重新加载配置文件。

于 2016-08-20T17:52:36.497 回答
1

您面临的问题是由于您在awesome. 您可以做的一件事是添加调试语句

naughty = require('naughty')  -- if not yet loaded
naughty.notify({text='some message'})
naughty.notify({text=some_string})
naughty.notify({text=tostring(some_number)})
naughty.notify({text=tostring(#some_array)})  -- for array w/o holes

并重新启动awesomeMod4 + Control + r)。

或者,您可以要求awesome运行您提供的脚本

$ awesome-client '
  naughty = require("naughty")
  naughty.notify({
    text="some message"})
'

这种方法的问题是,只要您调试代码,它可能就可以了。但是,如果您想弄清楚某个库中发生了什么,例如lain...require不需要两次文件。如果您想要一个自(重新)启动以来已更改的文件awesome,您必须dofile(具有绝对路径和扩展名,package.path仅由 使用require):

bat = dofile "/usr/share/lua/5.3/lain/widget/bat.lua"
bat({})

您还可以在中定义一些函数rc.lua

function f1()
    naughty.notify{text='some text'}
end

然后通过Mod4 + x.

rc.lua您可以通过调用来检查awesome -k.

在一些不需要awesome环境的简单情况下,您可以只运行独立脚本(lua5.3 /tmp/a.lua,或者/tmp/a.lua如果它有 shabang)。

于 2021-12-28T06:23:32.520 回答