É possível para Conky exibir o Tempo em palavras e não em números?

10

Eu quero que o 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 ( Red watch ).

Como na imagem, mesmo que apenas a hora e não a data possam ser exibidas.

Isso é possível?

    
por Uri Herrera 11.01.2013 / 06:43

4 respostas

9

Solução de script Lua

Isso é realmente possível usando o script Lua. Você pode usar o script abaixo (a conversão do número é tirada de rosettacode.org ).

O script pode fazer uma opção chata, que irá traduzir 12:45 para "doze e quarenta e cinco", e uma opção incrível que irá traduzi-lo para "um quarto para um". Também faz uma opção Uri Herrera que faz a hora em negrito;)

Ele também é atualizado automaticamente quando a hora 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, vamos supor 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 de TEXT , você pode chamar as funções da seguinte maneira (o conky adiciona automaticamente o prefixo 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}
...

Isso resultará em

Se você quiser os segundos, isso não deve ser muito difícil de se adicionar.

    
por Gerhard Burger 14.01.2013 / 12:15
3

Sim, é possível, mas apenas através do script Lua. Você precisará de um script que receba números e produza palavras. Muitos frameworks como o Django possuem esse recurso, mas você pode estar por conta própria, a menos que exista uma biblioteca Lua equivalente para ele:

function conky_translate_number(number) {
    if (number == 1) { 
        return "one";
    } else {
        return "not a clue";
    }
}

Você pode simplesmente querer escrever um script Python que aproveite o Django para a tradução usando sua linguagem de templates.

    
por Naftuli Kay 11.01.2013 / 06:55
2

você pode escrever um script python para isso usando a biblioteca pynum2word disponível em esta página sourceforge

Basicamente, o que acontece é:

>>> 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 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 processado pelo conky, crie um diretório dentro do seu diretório conky config, por exemplo. ~/.conky/pyscripts/ e coloque a biblioteca pynum2word dentro dela, agora crie outro arquivo, digamos 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 do horário e incluir a data também, se desejar. Para as opções de formatação, consulte a 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 do conky.

É claro que você pode colocar livremente os arquivos de script em qualquer diretório, mas certifique-se de que a biblioteca pynum2word esteja no mesmo diretório.

    
por Gufran 13.01.2013 / 22:03
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 esta fonte (se possível) para a exibição do tempo.

    
por diamy27 13.01.2013 / 21:11

Tags