Conky'nin Zamanı rakamlarla değil kelimelerle göstermesi mümkün müdür?


10

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

resim açıklamasını buraya girin

Görüntüde olduğu gibi, tarih değil yalnızca saat gösterilse bile.

Mümkün mü?


aslında görüntüleri kullanmak benim için çok daha zor görünüyor ... Lua'da hiç programlamam ya da Conky'yi daha önce kullanmadım, ama güzel bir Pazartesi sabahı meydan okuması gördüm ve cevabı yazmak da dahil olmak üzere baştan sona 2 saat sürdü: P
Gerhard Burger

Tamam ben sadece bazı düşünce vardı. Hangi cevapların en iyi sonucu verdiğini hala denemedim.
Uri Herrera

Yanıtlar:


9

Lua betik çözümü

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,

resim açıklamasını buraya girin

Saniyeyi istiyorsanız, kendinizi eklemek çok zor olmamalı.


Harika! metnin boyutunu nasıl değiştireceğinizi bulmak için iyi çalışıyor.
Uri Herrera

3

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.


Tamam teşekkürler, bir örnek ekleyebilir misiniz?
Uri Herrera

Bitti, ilkel, ama evet. İsterseniz ayrıntılandırabilirim, ancak size Python'u bütünüyle öğretmek sorunun kapsamı dışında görünüyor :)
Naftuli Kay

Düşündüğümden biraz karmaşık, muhtemelen tam kelimeler içeren görüntüleri (bir, iki, üç, vb.) Kullanma çizgileri boyunca daha fazla düşünüyordum ve bu görüntülerin her birinin zamana göre değişeceğini düşünüyorum. : 22 on iki yirmi iki gösterecektir.
Uri Herrera

@UriHerrera aslında oldukça yapılabilir, cevabımı gör
Gerhard Burger

2

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 pynum2wordkitaplık koyun , şimdi başka bir dosya oluşturun timeToWordve 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.confve 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 pynum2wordkütüphanenin aynı dizinde olduğundan emin olun .


İlginç, ama bunu Conky'ye nasıl ekleyeceğimi bilmediğimi söyle. Conky dosyasına kütüphaneyi içe aktarmak için ne ekleyebilirim veya ne yapabilirim? böylece zamanı böyle gösterir.
Uri Herrera

Cevabı yeni güncelledim, lütfen inceleyin.
Gufran

0

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.


Conky tüm yazı tiplerini yüklemiyor. Conky'nin yüklemeyeceği yazı tipleri var ve varsayılan olarak Arial veya Times New Roman. Bir Yazı tipi yapmak tüm iş anlamına gelir bahsetmiyorum. Ayrıca kullandığım resim bir örnektir, kalın yazı tipinde Saat ve İnce / Hafif yazı tipinde Dakika olmak istiyorum.
Uri Herrera

Dokuzdan büyük sayılar için bu bile işe yaramaz.
Alistair Buxton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.