【问题标题】:awesome wm/vicious widget: using a format function throws a bad argument error很棒的 wm/vicious 小部件:使用格式函数会引发错误的参数错误
【发布时间】:2014-09-25 16:15:14
【问题描述】:

我正在使用 vicious (v2.1.3-1) 在 awesome wm (v3.5.5-1) 中配置小部件。我想在小部件中显示时间。然后当我将鼠标悬停在时间小部件上时,在工具提示中显示日期。

在我的 rc.lua 文件中使用 vicious 的以下代码可以正常工作:

myclock = wibox.widget.textbox()
vicious.register(myclock, vicious.widgets.date, " <span color='#ffffff'>%H:%M</span> ") 
myclock_tooltip =  awful.tooltip ({ objects = { myclock } })
vicious.register(myclock_tooltip, vicious.widgets.date, " %a %d %b ", 60)

但是,当我尝试合并两个 vicious.register 语句时(基于 vicious readme file格式函数 部分):

myclock = wibox.widget.textbox()
myclock_tooltip =  awful.tooltip ({ objects = { myclock } })
vicious.register(myclock, vicious.widgets.date, 
    function (widget, args)
        myclock_tooltip.set_text(" %a %d %b ")
        return " <span color='#ffffff'>%H:%M</span> "
    end)

我收到以下错误:

/usr/share/lua/5.2/vicious/widgets/date.lua:23: bad argument #1 to 'date' (string expected, got function)

有什么建议我哪里出错了吗?

【问题讨论】:

    标签: lua archlinux awesome-wm


    【解决方案1】:

    你为什么需要那个格式化函数?以下方法不起作用吗?

    myclock = wibox.widget.textbox()
    myclock_tooltip =  awful.tooltip ({ objects = { myclock } })
    vicious.register(myclock, vicious.widgets.date, " <span color='#fffff'>%H:%M</span> ")
    myclock_tooltip_timer = timer({ timeout = 3600 })
    myclock_tooltip_timer:connect_signal("timeout", function()
        myclock_tooltip:set_text(os.date(" %a %d %b "))
    end)
    myclock_tooltip_timer:start()
    myclock_tooltip_timer:emit_signal("timeout")
    

    这对小部件使用“正常”的恶意内容,并使用每小时触发一次的单独计时器更新您的工具提示。

    【讨论】:

    • 感谢您的示例代码。我开始研究使用计时器,这给了我一个好的开始。但是,此代码只是将工具提示设置为字符串“%a %d %b”。此外,它不会初始化工具提示,它需要是myclock_tooltip:set_text
    • 以下行可用于初始化工具提示并更新它:myclock_tooltip:set_text(os.date(" %a %d %b "))
    • 哎呀,谢谢。添加了缺少的os.date 调用,切换到:set_text 并在末尾添加了一个新的:emit_signal() 以初始设置工具提示的文本。
    【解决方案2】:

    从技术角度来看,我认为您没有做错任何事情。我认为(快速查看源代码确认)该小部件不接受函数格式。

    看起来有些小部件采用格式字符串(由小部件函数使用)和一些接受格式函数(用小部件函数的结果调用),但我没有从该 README 中看到任何明确的指示是哪个。

    例如,将date.lua 中的worker 函数与uptime.lua 中的worker 函数进行比较。

    date.lua 函数在对 os.date 的调用中使用了 format 参数(这是导致您遇到的错误的原因,请尝试在本地调用 os.date(function()end))。

    uptime.lua 函数根本不使用format 参数(推测它在该函数的返回值上被vicious 在内部调用。

    可能值得要求更新文档以使其更清晰(或自己修复文档并为其提交补丁)。

    【讨论】:

    • 感谢您的指导 - 非常有帮助。我是 Lua 新手,所以还是习惯了语法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2016-11-23
    相关资源
    最近更新 更多