AwesomeWM 的“按钮”概念可以分为 2 个 API。首先是按钮小部件,它实际上并没有做太多,只是一个美化的wibox.widget.imagebox。这是与您的问题无关的部分。
另一个相关的部分是事件模型。当您单击一个小部件时,有两种方法可以让某些事情发生。第一个是信号。每个小部件都有一个button::press、button::release、mouse::enter 和mouse::leave 信号。您可以通过这种方式将函数附加到信号:
mytextclock:connect_signal("button::press", function(self, lx, ly, button, mods, metadata)
wibox.widget.calendar.year(os.date('*t'))
end)
该 API 比一个简单的按钮更丰富。您可以从awful.button 获得很多几何和布局信息。但是,对于简单的按钮来说它是多余的,因此awful.button。
每个小部件在 AwesomeWM :buttons() 方法,在 AwesomeWM >= v4.4 中有一个 .buttons 对象属性。 rc.lua 中有几个示例说明如何向这些小部件添加一些 awful.buttons。以下是mylayoutbox 小部件的 sn-ps:
对于 s.mylayoutbox:buttons(gears.table.join(
awful.button({ }, 1, function () awful.layout.inc( 1) end),
awful.button({ }, 3, function () awful.layout.inc(-1) end),
awful.button({ }, 4, function () awful.layout.inc( 1) end),
awful.button({ }, 5, function () awful.layout.inc(-1) end)))
对于 >= v4.4:
s.mylayoutbox = awful.widget.layoutbox {
screen = s
}
s.mylayoutbox.buttons = {
awful.button({ }, 1, function () awful.layout.inc( 1) end),
awful.button({ }, 3, function () awful.layout.inc(-1) end),
awful.button({ }, 4, function () awful.layout.inc(-1) end),
awful.button({ }, 5, function () awful.layout.inc( 1) end),
}
-- That works too.
s.mylayoutbox:add_button(awful.button({ }, 1, function () awful.layout.inc( 1) end))
至于文档中缺少示例。这是一个公平的观点。我会添加一些。