Voglio che Conky visualizzi l'ora usando parole e non numeri.
Quello che voglio fare è più o meno l'aspetto di Pebble Watch ( orologio rosso ).
Come nell'immagine, anche se è possibile visualizzare solo l'ora e non la data.
È possibile?
Voglio che Conky visualizzi l'ora usando parole e non numeri.
Quello che voglio fare è più o meno l'aspetto di Pebble Watch ( orologio rosso ).
Come nell'immagine, anche se è possibile visualizzare solo l'ora e non la data.
È possibile?
Risposte:
Questo è davvero possibile usando lo scripting Lua. È possibile utilizzare lo script seguente (la conversione del numero è tratta da rosettacode.org ).
Lo script può fare un'opzione noiosa, che tradurrà 12:45 in "dodici quarantacinque", e un'opzione fantastica che lo tradurrà in "un quarto a uno". Fa anche un'opzione Uri Herrera che fa l'ora in grassetto;)
Inoltre si aggiorna automaticamente quando il tempo cambia.
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
Ora salvalo da qualche parte, ai fini di questa domanda supponiamo che lo salviamo come ~/.config/conky/scripts/pretty_time.lua
Ora modifica il tuo .conkyrc
, prima di TEXT
aggiungere una riga
lua_load ~/.config/conky/scripts/pretty_time.lua
questo carica lo script in modo che possiamo accedere alle funzioni.
Quindi, nel punto appropriato di seguito TEXT
, è possibile chiamare le funzioni nel modo seguente (conky aggiunge automaticamente il conky_
prefisso)
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}
...
Ciò comporterà
Se vuoi i secondi, questo non dovrebbe essere troppo difficile da aggiungere.
Sì, è possibile, ma solo attraverso gli script di Lua. Avrai bisogno di uno script che contenga numeri e produca parole. Molti framework come Django hanno questa funzione, ma potresti essere da solo a meno che non ci sia una libreria Lua equivalente per questo:
function conky_translate_number(number) {
if (number == 1) {
return "one";
} else {
return "not a clue";
}
}
Potresti semplicemente scrivere uno script Python che sfrutta Django per la traduzione usando il suo linguaggio di template.
puoi scrivere uno script Python per questo usando la pynum2word
libreria disponibile in questa pagina di sourceforge
Fondamentalmente quello che fa è:
>>> import num2word
>>> num2word.to_card(10)
'ten'
>>> num2word.to_card(100)
'one hundred'
>>> num2word.to_card(1025)
'one thousand and twenty-five'
un esempio banale è quello che ho fatto qui:
>>> 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
Ora per renderlo reso da Conky, crea una directory all'interno della tua directory di configurazione Conky, ad esempio ~/.conky/pyscripts/
e inserisci la pynum2word
libreria al suo interno, ora crea un altro file timeToWord
e inserisci questo script in questo file:
#!/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]))
Puoi modificare la formattazione dell'ora e includere anche la data, se lo desideri. Per le opzioni di formattazione dai un'occhiata a questa pagina .
quindi apri il file di configurazione conky /etc/conky/conky.conf
e metti questa linea da qualche parte:
{execpi 30 ~/.conky/pyscripts/timeToWord}
Ciò che questa linea fa è, esegue il file di script ogni 30 secondi e aggiorna l'output su una finestra conky.
Ovviamente puoi posizionare liberamente i file di script in qualsiasi directory ma assicurati che la pynum2word
libreria sia nella stessa directory.
Non potresti creare un simbolo-carattere che consiste in immagini della parola scritta per ogni numero? Quindi dovresti solo scegliere questo carattere (se possibile) per la visualizzazione del tempo.