测试和调试`awesome/rc.lua`
Testing and Debugging `awesome/rc.lua`
如何在交互式 iterpreter 中从 awesome/rc.lua
运行 lua 命令?
我正在尝试在 ~/.config/awesome/rc.lua
中为新的键绑定创建一些函数。有时我会遇到错误,我想通过在命令行中打印表和变量来测试这些函数。我下载了 lua5.2
并开始使用交互式解释器。我在交互模式的开头写了一个小脚本运行。
我在 require("gears")
和 require("awful")
以及 /usr/share/awesome/lib/
中找到的几乎所有其他库时遇到问题。以下是一些示例:
- 尝试
require("gears")
时,出现错误:
/usr/share/awesome/lib/gears/wallpaper.lua:17: attempt to index global 'screen' (a nil value)
- 当删除带有
require("gears")
的行时,require("awful")
行给我:
/usr/share/awesome/lib/awful/tag.lua:603: attempt to index field 'client' (a nil value)
似乎对于 awesome 库中的每个模块,都有一些不为 lua 解释器所知的组件。 如何让 lua 解释器知道这些组件?
我对 lua 编码不是很有经验。我挖错地方了吗?是否有不同的也许更好的方法来测试 awesome/rc.lua
中的函数?
Mod4 + x
运行 Lua 解释器。
rc.lua
和各种 Lua lib 文件被加载到主机程序(用 C 编写)提供的环境中。这就是为什么您可以访问提供的 API elements like screen
and client
. See the (partially) responsible file here.
如果您只是想在配置文件中调试一些基本的 Lua 功能,您可以考虑简单地写入文件或管道,而不是 stdout,然后监视它。
Mod4 + Control + r
重新启动 Awesome,并重新加载配置文件。
您面临的问题是由于您 运行 在 awesome
提供的环境之外运行脚本。您可以做的一件事是添加 debug statements:
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
并重新启动 awesome
(Mod4 + Control + r)。
或者您可以询问 awesome
到 run a script 您提供:
$ awesome-client '
naughty = require("naughty")
naughty.notify({
text="some message"})
'
这个方法的问题是,只要你调试你的代码,它可能就没问题。但是如果你想弄清楚某个库中发生了什么,比如 lain
... require
doesn't require files twice. If you want to require a file that has changed since the time awesome
was (re)started, you've got to dofile
(with an absolute path and extension, package.path
is used only by require
):
bat = dofile "/usr/share/lua/5.3/lain/widget/bat.lua"
bat({})
您也可以 define some function 在 rc.lua
:
function f1()
naughty.notify{text='some text'}
end
然后通过Mod4 + x
调用它。
您可以通过调用 awesome -k
.
检查 rc.lua
的语法
在一些不需要 awesome
环境的简单情况下,您可以只 运行 独立脚本(lua5.3 /tmp/a.lua
,或者 /tmp/a.lua
如果它有沙邦)。
如何在交互式 iterpreter 中从 awesome/rc.lua
运行 lua 命令?
我正在尝试在 ~/.config/awesome/rc.lua
中为新的键绑定创建一些函数。有时我会遇到错误,我想通过在命令行中打印表和变量来测试这些函数。我下载了 lua5.2
并开始使用交互式解释器。我在交互模式的开头写了一个小脚本运行。
我在 require("gears")
和 require("awful")
以及 /usr/share/awesome/lib/
中找到的几乎所有其他库时遇到问题。以下是一些示例:
- 尝试
require("gears")
时,出现错误:/usr/share/awesome/lib/gears/wallpaper.lua:17: attempt to index global 'screen' (a nil value)
- 当删除带有
require("gears")
的行时,require("awful")
行给我:/usr/share/awesome/lib/awful/tag.lua:603: attempt to index field 'client' (a nil value)
似乎对于 awesome 库中的每个模块,都有一些不为 lua 解释器所知的组件。 如何让 lua 解释器知道这些组件?
我对 lua 编码不是很有经验。我挖错地方了吗?是否有不同的也许更好的方法来测试 awesome/rc.lua
中的函数?
Mod4 + x
运行 Lua 解释器。
rc.lua
和各种 Lua lib 文件被加载到主机程序(用 C 编写)提供的环境中。这就是为什么您可以访问提供的 API elements like screen
and client
. See the (partially) responsible file here.
如果您只是想在配置文件中调试一些基本的 Lua 功能,您可以考虑简单地写入文件或管道,而不是 stdout,然后监视它。
Mod4 + Control + r
重新启动 Awesome,并重新加载配置文件。
您面临的问题是由于您 运行 在 awesome
提供的环境之外运行脚本。您可以做的一件事是添加 debug statements:
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
并重新启动 awesome
(Mod4 + Control + r)。
或者您可以询问 awesome
到 run a script 您提供:
$ awesome-client '
naughty = require("naughty")
naughty.notify({
text="some message"})
'
这个方法的问题是,只要你调试你的代码,它可能就没问题。但是如果你想弄清楚某个库中发生了什么,比如 lain
... require
doesn't require files twice. If you want to require a file that has changed since the time awesome
was (re)started, you've got to dofile
(with an absolute path and extension, package.path
is used only by require
):
bat = dofile "/usr/share/lua/5.3/lain/widget/bat.lua"
bat({})
您也可以 define some function 在 rc.lua
:
function f1()
naughty.notify{text='some text'}
end
然后通过Mod4 + x
调用它。
您可以通过调用 awesome -k
.
rc.lua
的语法
在一些不需要 awesome
环境的简单情况下,您可以只 运行 独立脚本(lua5.3 /tmp/a.lua
,或者 /tmp/a.lua
如果它有沙邦)。