na verdade, usar imagens me parece muito mais difícil ... Eu nunca programei em Lua ou usei Conky antes, mas vi um bom desafio de segunda-feira de manhã e levei duas horas do início ao fim, incluindo a resposta: P
Gerhard Burger
Tudo bem, foi apenas um pensamento que eu tinha. Ainda não tentei qual das respostas funciona melhor.
Uri Herrera
Respostas:
9
Solução de script Lua
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 TEXTadicionar 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)
Ótimo! funciona bem, agora descubra como alterar o tamanho do texto.
Uri Herrera
3
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.
Feito, rudimentar, mas sim. I pode elaborar se você gostaria, mas parece fora do âmbito da pergunta para lhe ensinar Python em sua totalidade :)
Naftuli Kay
É um pouco complicado do que eu pensava, eu estava pensando mais sobre como usar imagens que contenham palavras completas (uma, duas, três etc.) e que cada uma dessas imagens mudaria de acordo com o tempo, por isso, se forem 12 : 22 exibiria doze vinte e dois.
Uri Herrera
@UriHerrera, na verdade, é bastante factível, veja a minha resposta
Gerhard Burger
2
você pode escrever um script python para isso usando a pynum2wordbiblioteca disponível nesta página do sourceforge
>>> 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 pynum2wordbiblioteca dentro dele, agora crie outro arquivo, diga timeToWorde 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.confe 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 pynum2wordbiblioteca está no mesmo diretório.
Interessante, mas diga que não sei como adicionar isso ao Conky. Como adiciono ou O que o arquivo Conky faz para importar a biblioteca? então mostra a hora assim.
Uri Herrera
Acabei de atualizar a resposta, revise.
Gufran
0
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.
É isso mesmo, surpreendentemente, o Conky não carrega todas as fontes. Eu tenho fontes que Conky simplesmente não carrega e são padronizadas como Arial ou Times New Roman. Sem mencionar que todo o trabalho de criação de uma fonte significa. Também a imagem que usei é um exemplo, gostaria de ter Horas em uma fonte em negrito e Minutos em uma fonte Fina / Leve.
Uri Herrera
Isso nem funcionaria para números maiores que nove.
Respostas:
Solução de script Lua
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.
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 deTEXT
adicionar uma linhaisso 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 oconky_
prefixo)Isso resultará em
Se você quer os segundos, não deve ser muito difícil se adicionar.
fonte
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:
Você pode simplesmente escrever um script Python que aproveite o Django para a tradução usando sua linguagem de modelagem.
fonte
você pode escrever um script python para isso usando a
pynum2word
biblioteca disponível nesta página do sourceforgeBasicamente, o que faz é:
um exemplo trivial é o que eu fiz aqui:
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 apynum2word
biblioteca dentro dele, agora crie outro arquivo, digatimeToWord
e coloque este script neste arquivo: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: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.fonte
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.
fonte