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).
Comme dans l'image, même si seule l'heure et la date peuvent être affichées.
Est-ce possible?
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
Si vous voulez les secondes, cela ne devrait pas être trop difficile à ajouter vous-même.
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.
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.
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.