Quero que Conky mostre o tempo usando palavras e não números.
O que eu quero fazer é mais ou menos a aparência do Pebble Watch ( relógio vermelho ).
Como na imagem, mesmo que apenas a hora e não a data possam ser exibidas.
Isso é possível?
Quero que Conky mostre o tempo usando palavras e não números.
O que eu quero fazer é mais ou menos a aparência do Pebble Watch ( relógio vermelho ).
Como na imagem, mesmo que apenas a hora e não a data possam ser exibidas.
Isso é possível?
Respostas:
Isso é realmente possível usando o script Lua. Você pode usar o script abaixo (a conversão numérica é obtida em rosettacode.org ).
O script pode fazer uma opção chata, que traduzirá 12:45 para "doze e quarenta e cinco" e uma ótima opção que o traduzirá para "um quarto para um". Ele também faz uma opção Uri Herrera, que faz a hora em negrito;)
Também atualiza automaticamente quando o tempo muda.
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
Agora salve-o em algum lugar, para o propósito desta pergunta, assuma que o salvamos como ~/.config/conky/scripts/pretty_time.lua
Agora edite seu .conkyrc
, antes de TEXT
adicionar uma linha
lua_load ~/.config/conky/scripts/pretty_time.lua
isso carrega o script para que possamos acessar as funções.
Em seguida, no local apropriado abaixo TEXT
, você pode chamar as funções da seguinte maneira (conky adiciona automaticamente o conky_
prefixo)
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}
...
Isso resultará em
Se você quer os segundos, não deve ser muito difícil se adicionar.
Sim, é possível, mas apenas através de scripts Lua. Você precisará de um script que capte números e produza palavras. Muitos frameworks como o Django possuem esse recurso, mas você pode estar sozinho, a menos que haja uma biblioteca Lua equivalente para ele:
function conky_translate_number(number) {
if (number == 1) {
return "one";
} else {
return "not a clue";
}
}
Você pode simplesmente escrever um script Python que aproveite o Django para a tradução usando sua linguagem de modelagem.
você pode escrever um script python para isso usando a pynum2word
biblioteca disponível nesta página do sourceforge
Basicamente, o que faz é:
>>> import num2word
>>> num2word.to_card(10)
'ten'
>>> num2word.to_card(100)
'one hundred'
>>> num2word.to_card(1025)
'one thousand and twenty-five'
um exemplo trivial é o que eu fiz aqui:
>>> 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
Agora, para tornar isso renderizado pelo conky, crie um diretório dentro do seu diretório de configuração conky, por exemplo, ~/.conky/pyscripts/
e coloque a pynum2word
biblioteca dentro dele, agora crie outro arquivo, diga timeToWord
e coloque este script neste arquivo:
#!/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]))
Você pode alterar a formatação da hora e incluir a data também, se desejar. Para opções de formatação, consulte esta página .
abra o arquivo de configuração conky /etc/conky/conky.conf
e coloque esta linha em algum lugar:
{execpi 30 ~/.conky/pyscripts/timeToWord}
O que essa linha faz é executar o arquivo de script a cada 30 segundos e atualizar a saída na janela conky.
É claro que você pode colocar livremente os arquivos de script em qualquer diretório, mas verifique se a pynum2word
biblioteca está no mesmo diretório.
Você não poderia criar uma fonte de símbolo que consiste em imagens da palavra escrita para cada numeral? Do que você deve apenas escolher essa fonte (se possível) para a exibição do tempo.