终端日历 khal:在 awesome wm 中使用 naughty.notify 生成时突出显示当前日期

terminal calendar khal: Highlight current date when spawning with naughty.notify in awesome wm

当鼠标按下 awesome wm 中的默认文本时钟小部件时,我正在尝试生成终端日历 khal。

local cal_notification
mytextclock:connect_signal("button::release",
    function()
        if cal_notification == nil then
            awful.spawn.easy_async(noisy,
                function(stdout, stderr, reason, exit_code)
                    cal_notification = naughty.notify{
                        text = stdout,
                        width = auto,
                        destroy = function() cal_notification = nil end
                    }
                end
            )
        else
            naughty.destroy(cal_notification)
        end
    end)

不幸的是,在执行时,khal 的所有语法突出显示都消失了。 有谁知道如何在不丢失 'look' 的情况下生成通知?

编辑: 这可能发生在任何其他终端日历上,例如 cal,我想。

使用 grep --color -EC6 "$(date +%e)" 它仍然不输出颜色。 使用 khal 的强制 --color 语句,它在每个突出显示的字符之前输出 001b 1m。

khal 这样的 CLI 应用程序使用所谓的 ASCII escape codes 来编码彩色突出显示。其中一部分是您在“每个突出显示的字符之前输出 001b 1m”看到的内容。 这些序列中的字符比您在此处粘贴的字符多,但这些字符可能被 Lua 的字符串处理或 awesome 的渲染吞没了。

这里的问题是,这种使用 ASCII 转义码突出显示文本的方式是终端和终端仿真器特有的。其他应用程序不使用或实现它们。

具体来说,文本标记是通过 Pango Markup 完成的。因此,为了让您的通知保留 khal 创建的突出显示,您需要创建一个转换层,将 ASCII 转义码转换为 Pango 标记。

另一个挑战是终端中的颜色使用基于主题的系统。终端配置有一组特定的颜色,转义码仅索引到该列表中。他们自己不持有任何实际的颜色信息。但是,对于 Pango,您需要在标记中指定实际颜色值。