Я хочу, щоб Конкі відображав час, використовуючи слова, а не цифри.
Що я хочу зробити, це більш-менш те, як виглядає Pebble Watch ( Червоний годинник ).
Як і на зображенні, навіть якщо може бути показаний лише час, а не дата.
Чи можливо це?
Я хочу, щоб Конкі відображав час, використовуючи слова, а не цифри.
Що я хочу зробити, це більш-менш те, як виглядає Pebble 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
Тепер збережіть його десь, для цього питання припустімо, що ми збережемо його як ~/.config/conky/scripts/pretty_time.lua
Тепер відредагуйте свій .conkyrc
, перш ніж TEXT
додавати рядок
lua_load ~/.config/conky/scripts/pretty_time.lua
це завантажує сценарій, щоб ми могли отримати доступ до функцій.
Потім, у відповідному місці нижче 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}
...
Це призведе до
Якщо ви хочете секунди, це не повинно бути занадто важким, щоб додати себе.
Так, це можливо, але тільки через сценарії Луа. Вам знадобиться сценарій, який містить цифри і виводить слова. Багато функцій, таких як Django, мають цю функцію, але ви можете бути самостійно, якщо для неї не існує еквівалентної бібліотеки Lua:
function conky_translate_number(number) {
if (number == 1) {
return "one";
} else {
return "not a clue";
}
}
Ви можете просто просто написати сценарій Python, який використовує Django для перекладу, використовуючи його мову шаблонів.
ви можете написати сценарій python для цього за допомогою pynum2word
бібліотеки, доступної на цій сторінці sourceforge
В основному, це робить:
>>> import num2word
>>> num2word.to_card(10)
'ten'
>>> num2word.to_card(100)
'one hundred'
>>> num2word.to_card(1025)
'one thousand and twenty-five'
тривіальний приклад - те, що я тут зробив:
>>> import datetime
>>> import num2word
>>> now = datetime.datetime.now()
>>> t = datetime.time(now.hour, now.minute, now.second).strftime('%H:%M:%S').split(':')
>>> print "%s hours %s minutes and %s seconds" %(num2word.to_card(t[0]), num2word.to_card(t[1]), num2word.to_card(t[2]))
>>> two hours thirty one minutes and fifteen seconds
Тепер, щоб зробити це візуалізацією conky, створіть каталог всередині вашого каталогу conky config, наприклад, ~/.conky/pyscripts/
і помістіть pynum2word
всередину нього бібліотеку, тепер створіть інший файл сказати timeToWord
і введіть цей скрипт у цей файл:
#!/bin/python
import datetime
import num2word
now = datetime.datetime.now()
t = datetime.time(now.hour, now.minute, now.second).strftime('%H:%M:%S').split(':')
print "%s hours %s minutes and %s seconds" %(num2word.to_card(t[0]), num2word.to_card(t[1]), num2word.to_card(t[2]))
Ви можете змінити форматування часу і включити дату, якщо хочете. Для параметрів форматування ознайомтеся з цією сторінкою .
потім відкрийте файл conky config /etc/conky/conky.conf
та покладіть цей рядок десь:
{execpi 30 ~/.conky/pyscripts/timeToWord}
Цей рядок і полягає в тому, що він виконує файл сценарію кожні 30 секунд і оновлює вихід у conky вікні.
Звичайно, ви можете вільно розміщувати файли сценаріїв у будь-якому каталозі, але переконайтесь, що pynum2word
бібліотека знаходиться в одному каталозі.
Не могли б ви створити символ-шрифт, який складається із зображень написаного слова для кожної цифри? Тоді вам слід просто вибрати цей шрифт (якщо це можливо) для відображення часу.