Quiero que Conky muestre la hora usando palabras y no números.
Lo que quiero hacer es más o menos cómo se ve el Pebble Watch ( reloj rojo ).
Al igual que en la imagen, incluso si solo se puede mostrar la hora y no la fecha.
es posible?
Quiero que Conky muestre la hora usando palabras y no números.
Lo que quiero hacer es más o menos cómo se ve el Pebble Watch ( reloj rojo ).
Al igual que en la imagen, incluso si solo se puede mostrar la hora y no la fecha.
es posible?
Respuestas:
De hecho, esto es posible utilizando la secuencia de comandos de Lua. Puede usar la secuencia de comandos a continuación (la conversión de números se toma de rosettacode.org ).
El guión puede hacer una opción aburrida, que traducirá 12:45 a "doce cuarenta y cinco", y una opción increíble que lo traducirá a "cuarto para la una". También hace una opción de Uri Herrera que hace la hora en negrita;)
También se actualiza automáticamente cuando cambia la hora.
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
Ahora guárdelo en algún lugar, para el propósito de esta pregunta, suponga que lo guardamos como ~/.config/conky/scripts/pretty_time.lua
Ahora edite su .conkyrc
, antes de TEXT
agregar una línea
lua_load ~/.config/conky/scripts/pretty_time.lua
Esto carga el script para que podamos acceder a las funciones.
Luego, en el lugar apropiado a continuación TEXT
, puede llamar a las funciones de la siguiente manera (conky agrega automáticamente el conky_
prefijo)
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}
...
Esto resultará en
Si quieres los segundos, esto no debería ser demasiado difícil de agregar.
Sí, es posible, pero solo a través de secuencias de comandos Lua. Necesitará un script que tome números y genere palabras. Muchos frameworks como Django tienen esta característica, pero puede estar solo a menos que haya una biblioteca Lua equivalente para ello:
function conky_translate_number(number) {
if (number == 1) {
return "one";
} else {
return "not a clue";
}
}
Es posible que simplemente desee escribir un script de Python que aproveche Django para la traducción utilizando su lenguaje de plantillas.
puede escribir un script de Python para esto usando la pynum2word
biblioteca disponible en esta página de sourceforge
Básicamente lo que hace es:
>>> import num2word
>>> num2word.to_card(10)
'ten'
>>> num2word.to_card(100)
'one hundred'
>>> num2word.to_card(1025)
'one thousand and twenty-five'
Un ejemplo trivial es lo que hice aquí:
>>> 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
Ahora para hacer que esto sea procesado por conky, cree un directorio dentro de su directorio de configuración de conky, por ejemplo, ~/.conky/pyscripts/
y coloque la pynum2word
biblioteca dentro de él, ahora cree otro archivo, diga timeToWord
y coloque este script en este archivo:
#!/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]))
Puede cambiar el formato de la hora e incluir la fecha también, si lo desea. Para ver las opciones de formato, eche un vistazo a esta página .
luego abra el archivo de configuración conky /etc/conky/conky.conf
y coloque esta línea en alguna parte:
{execpi 30 ~/.conky/pyscripts/timeToWord}
Lo que hace esta línea es ejecutar el archivo de script cada 30 segundos y actualizar la salida en la ventana conky.
Por supuesto, puede colocar libremente los archivos de script en cualquier directorio, pero asegúrese de que la pynum2word
biblioteca esté en el mismo directorio.
¿No podría crear una fuente de símbolos que conste de imágenes de la palabra escrita para cada número? De lo que debería tener que elegir esta fuente (si es posible) para la visualización del tiempo.