Giải pháp kịch bản Lua
Điều này thực sự có thể sử dụng kịch bản Lua. Bạn có thể sử dụng tập lệnh bên dưới (chuyển đổi số được lấy từ rosettacode.org ).
Kịch bản có thể thực hiện một tùy chọn nhàm chán, sẽ dịch 12:45 thành "mười hai bốn mươi lăm", và một tùy chọn tuyệt vời sẽ dịch nó thành "một phần tư thành một". Nó cũng thực hiện một tùy chọn Uri Herrera làm đậm giờ;)
Ngoài ra nó tự động làm mới, khi thời gian thay đổi.
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
Bây giờ hãy lưu nó ở đâu đó, vì mục đích của câu hỏi này giả sử chúng ta lưu nó dưới dạng ~/.config/conky/scripts/pretty_time.lua
Bây giờ chỉnh sửa của bạn .conkyrc
, trước khi TEXT
thêm một dòng
lua_load ~/.config/conky/scripts/pretty_time.lua
Điều này tải tập lệnh để chúng ta có thể truy cập các chức năng.
Sau đó, tại vị trí thích hợp bên dưới TEXT
, bạn có thể gọi các hàm theo cách sau (conky tự động thêm conky_
tiền tố)
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}
...
Điều này sẽ dẫn đến
Nếu bạn muốn vài giây, điều này không quá khó để thêm chính mình.