Conky'nin zaman yerine rakamları değil kelimeleri kullanarak göstermesini istiyorum.
Ne yapmak istiyorum az çok nasıl Çakıl İzle görünüyor ( Kırmızı izle ).
Görüntüde olduğu gibi, tarih değil yalnızca saat gösterilse bile.
Mümkün mü?
Conky'nin zaman yerine rakamları değil kelimeleri kullanarak göstermesini istiyorum.
Ne yapmak istiyorum az çok nasıl Çakıl İzle görünüyor ( Kırmızı izle ).
Görüntüde olduğu gibi, tarih değil yalnızca saat gösterilse bile.
Mümkün mü?
Yanıtlar:
Bu gerçekten Lua komut dosyası kullanarak mümkündür. Aşağıdaki komut dosyasını kullanabilirsiniz (sayı dönüşümü rosettacode.org sitesinden alınmıştır ).
Komut dosyası, 12:45'i "on iki kırk beş" e çevirecek sıkıcı bir seçenek ve "çeyrekten bire" çevirecek harika bir seçenek yapabilir. Ayrıca saat kalın yapan bir Uri Herrera seçeneği yapar;)
Ayrıca zaman değiştiğinde otomatik olarak yenilenir.
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
Şimdi bir yere kaydedin, bu sorunun amacı için ~/.config/conky/scripts/pretty_time.lua
Şimdi bir satır eklemeden .conkyrc
önceTEXT
lua_load ~/.config/conky/scripts/pretty_time.lua
işlevlere erişebilmemiz için komut dosyasını yükler.
Ardından, aşağıdaki uygun yerde TEXT
, işlevleri aşağıdaki şekilde çağırabilirsiniz (conky otomatik olarak conky_
ön ek ekler )
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}
...
Bu,
Saniyeyi istiyorsanız, kendinizi eklemek çok zor olmamalı.
Evet, mümkün, ancak sadece Lua komut dosyası aracılığıyla. Sayıları alan ve kelimeleri çıkaran bir betiğe ihtiyacınız olacak. Django gibi birçok çerçeve bu özelliğe sahiptir, ancak bunun için eşdeğer bir Lua kütüphanesi yoksa kendi başınıza olabilirsiniz:
function conky_translate_number(number) {
if (number == 1) {
return "one";
} else {
return "not a clue";
}
}
Sadece şablon dilini kullanarak çeviri için Django'dan yararlanan bir Python betiği yazmak isteyebilirsiniz.
bu sourceforge sayfasındapynum2word
bulunan kütüphaneyi kullanarak bunun için bir python betiği yazabilirsiniz
Temel olarak yaptığı şey:
>>> import num2word
>>> num2word.to_card(10)
'ten'
>>> num2word.to_card(100)
'one hundred'
>>> num2word.to_card(1025)
'one thousand and twenty-five'
önemsiz bir örnek burada yaptığım şey:
>>> 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
Şimdi bunu conky ile render etmek için, conky yapılandırma dizininizde bir dizin oluşturun ~/.conky/pyscripts/
ve içine pynum2word
kitaplık koyun , şimdi başka bir dosya oluşturun timeToWord
ve bu betiği bu dosyaya koyun:
#!/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]))
İsterseniz saatin biçimlendirmesini değiştirebilir ve tarihi de ekleyebilirsiniz. Biçimlendirme seçenekleri için bu sayfaya bir göz atın .
sonra conky yapılandırma dosyasını açın /etc/conky/conky.conf
ve bu satırı bir yere koyun:
{execpi 30 ~/.conky/pyscripts/timeToWord}
Bu satırın yaptığı, komut dosyasını 30 saniyede bir yürütür ve çıktıyı conky penceresinde günceller.
Elbette komut dosyalarını herhangi bir dizine serbestçe yerleştirebilirsiniz, ancak pynum2word
kütüphanenin aynı dizinde olduğundan emin olun .
Her rakam için yazılı kelimenin görüntülerinden oluşan bir sembol-yazı tipi oluşturamaz mısınız? Daha sonra zamanın görüntülenmesi için bu yazı tipini (mümkünse) seçmeniz gerekir.