我想让 Conky 使用文字而不是数字来显示时间。
我想要做的或多或少是 Pebble Watch 的样子(Red watch)。

就像图像中一样,即使只能显示时间而不显示日期。
这可能吗?
这确实可以使用 Lua 脚本编写。您可以使用下面的脚本(数字转换取自rosettacode.org)。
脚本可以做一个无聊的选项,将 12:45 转换为“十二点四十五分”,以及一个很棒的选项,将其转换为“四分之一比一”。它也有一个 Uri Herrera 选项,它以粗体显示小时;)
当时间改变时,它也会自动刷新。
words = {"one ", "two ", "three ", "four ", "five ", "six ", "seven ", "eight ", "nine "}
levels = {"thousand ", "million ", "billion ", "trillion ", "quadrillion ", "quintillion ", "sextillion ", "septillion ", "octillion ", [0] = ""}
iwords = {"ten ", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy ", "eighty ", "ninety "}
twords = {"eleven ", "twelve ", "thirteen ", "fourteen ", "fifteen ", "sixteen ", "seventeen ", "eighteen ", "nineteen "}
function digits(n)
local i, ret = -1
return function()
i, ret = i + 1, n % 10
if n > 0 then
n = math.floor(n / 10)
return i, ret
end
end
end
level = false
function getname(pos, dig)
level = level or pos % 3 == 0
if(dig == 0) then return "" end
local name = (pos % 3 == 1 and iwords[dig] or words[dig]) .. (pos % 3 == 2 and "hundred " or "")
if(level) then name, level = name .. levels[math.floor(pos / 3)], false end
return name
end
function numberToWord(number)
if(number == 0) then return "zero" end
vword = ""
for i, v in digits(number) do
vword = getname(i, v) .. vword
end
for i, v in ipairs(words) do
vword = vword:gsub("ty " .. v, "ty-" .. v)
vword = vword:gsub("ten " .. v, twords[i])
end
return vword
end
function conky_boringTime()
hour = os.date("%H") + 0
minute = os.date("%M") + 0
return numberToWord(hour) .. numberToWord(minute)
end
function conky_awesomeTime()
hour = os.date("%H") + 0
minute = os.date("%M") + 0
hour = hour % 12
if(hour == 0) then
hour, nextHourWord = 12, "one "
else
nextHourWord = numberToWord(hour+1)
end
hourWord = numberToWord(hour)
if(minute == 0 ) then
return hourWord .. "o'clock"
elseif(minute == 30) then
return "half past " .. hourWord
elseif(minute == 15) then
return "a quarter past " .. hourWord
elseif(minute == 45) then
return "a quarter to " .. nextHourWord
else
if(minute < 30) then
return numberToWord(minute) .. "past " .. hourWord
else
return numberToWord(60-minute) .. "to " .. nextHourWord
end
end
end
function conky_getHourWord()
return numberToWord(os.date("%H") + 0)
end
function conky_getMinuteWord()
return numberToWord(os.date("%M") + 0)
end
Run Code Online (Sandbox Code Playgroud)
现在将其保存在某处,出于这个问题的目的,假设我们将其保存为 ~/.config/conky/scripts/pretty_time.lua
现在编辑您的.conkyrc, 在TEXT添加一行之前
lua_load ~/.config/conky/scripts/pretty_time.lua
Run Code Online (Sandbox Code Playgroud)
这将加载脚本,以便我们可以访问函数。
然后,在下面合适的地方TEXT,可以通过以下方式调用函数(conky自动添加conky_前缀)
TEXT
...
${color grey}Boring time:$color ${lua boringTime}
${color grey}Awesome time:$color ${lua awesomeTime}
${color grey}Special Uri Herrera:$color ${font Aria:bold} ${lua getHourWord}$font ${lua getMinuteWord}
...
Run Code Online (Sandbox Code Playgroud)
这将导致

如果您想要秒数,那么添加自己应该不会太难。