web-dev-qa-db-fra.com

Est-il possible que Conky affiche l'heure en mots et non en chiffres?

Je veux que Conky affiche l'heure en utilisant des mots et non des chiffres.

Ce que je veux faire, c'est plus ou moins l'aspect de la montre Pebble (montre rouge).

enter image description here

Comme dans l'image, même si seule l'heure et la date peuvent être affichées.

Est-ce possible?

10
Uri Herrera

Lua scripting solution

Ceci est en effet possible en utilisant les scripts Lua. Vous pouvez utiliser le script ci-dessous (la conversion du nombre provient de rosettacode.org ).

Le script peut faire une option ennuyeuse, qui traduira 12h45 en "douze heures quarante-cinq", et une option géniale qui le traduira en "une heure moins le quart". Il fait également une option Uri Herrera qui fait l'heure en gras;)

En outre, il actualise automatiquement, lorsque l'heure change.

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

Maintenant, sauvegardez-le quelque part, pour les besoins de cette question, supposons que nous l'enregistrions sous le nom ~/.config/conky/scripts/pretty_time.lua

Maintenant, éditez votre .conkyrc, avant TEXT ajoutez une ligne

lua_load ~/.config/conky/scripts/pretty_time.lua

cela charge le script pour que nous puissions accéder aux fonctions.

Ensuite, à l'endroit approprié en dessous de TEXT, vous pouvez appeler les fonctions de la manière suivante (conky ajoute automatiquement le préfixe 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}
...

Cela se traduira par

enter image description here

Si vous voulez les secondes, cela ne devrait pas être trop difficile à ajouter vous-même.

9
Gerhard Burger

Oui, c'est possible, mais seulement à travers le script Lua. Vous aurez besoin d'un script qui prend des nombres et des mots en sortie. Beaucoup de frameworks tels que Django ont cette fonctionnalité, mais vous pouvez vous débrouiller tout seul à moins d'une bibliothèque Lua équivalente pour cela:

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

Vous voudrez peut-être simplement écrire un script Python qui exploite Django pour la traduction à l'aide de son langage de modélisation.

3
Naftuli Kay

vous pouvez écrire un script python pour cela en utilisant la bibliothèque pynum2Word disponible à l'adresse cette page sourceforge

Fondamentalement, ce qu'il fait est:

>>> import num2Word
>>> num2Word.to_card(10)
'ten'
>>> num2Word.to_card(100)
'one hundred'
>>> num2Word.to_card(1025)
'one thousand and twenty-five'

voici un exemple trivial:

>>> 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

Maintenant, pour que cela soit rendu par conky, créez un répertoire dans votre répertoire de configuration conky, par exemple. ~/.conky/pyscripts/ et mettez la bibliothèque pynum2Word à l'intérieur, créez maintenant un autre fichier, par exemple timeToWord, et mettez ce script dans ce fichier:

#!/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]))

Vous pouvez modifier le formatage de l'heure et inclure également la date, si vous le souhaitez. Pour les options de formatage, regardez cette page .

puis ouvrez le fichier de configuration conky /etc/conky/conky.conf et mettez cette ligne quelque part:

{execpi 30 ~/.conky/pyscripts/timeToWord}

Cette ligne exécute le fichier de script toutes les 30 secondes et met à jour le résultat sur la fenêtre de conky.

Bien sûr, vous pouvez librement placer les fichiers de script dans n’importe quel répertoire, mais assurez-vous que la bibliothèque pynum2Word se trouve dans le même répertoire.

2
Gufran

Ne pourriez-vous pas créer une police de symboles composée d'images du mot écrit pour chaque chiffre? Ensuite, vous devriez simplement choisir cette police (si possible) pour l'affichage de l'heure.

0
diamy27