क्या कॉन्की के लिए शब्दों में समय प्रदर्शित करना संभव है और संख्या में नहीं?


10

मैं शब्दों और संख्याओं का उपयोग करके कॉन्की को समय प्रदर्शित करना चाहता हूं।

मैं क्या करना चाहता हूं कमोबेश पेबल वॉच ( लाल घड़ी ) कैसे दिखती है ।

यहाँ छवि विवरण दर्ज करें

छवि में जैसे, भले ही केवल समय और दिनांक नहीं दिखाई जा सकती है।

क्या यह संभव है?


वास्तव में छवियों का उपयोग करना मेरे लिए बहुत कठिन लगता है ... मैंने पहले कभी लुआ में प्रोग्राम नहीं किया था या पहले कांकी का उपयोग नहीं किया था, लेकिन मैंने सोमवार की सुबह को एक अच्छी चुनौती दी, और मुझे शुरू से अंत तक 2 घंटे लगे, जिसमें उत्तर नीचे लिखना शामिल था: पी
गेरहार्ड बर्गर

यह ठीक है कि यह सिर्फ कुछ सोचा था कि मेरे पास था। मैंने अभी भी कोशिश नहीं की है कि कौन सा उत्तर सबसे अच्छा काम करता है।
उड़ी हरेरा

जवाबों:


9

लुआ पटकथा समाधान

लुआ स्क्रिप्टिंग का उपयोग करके यह वास्तव में संभव है। आप नीचे दी गई स्क्रिप्ट का उपयोग कर सकते हैं (नंबर रूपांतरण rosettacode.org से लिया गया है )।

स्क्रिप्ट एक उबाऊ विकल्प कर सकती है, जो 12:45 से "बारह पैंतालीस" का अनुवाद करेगी, और एक भयानक विकल्प जो इसे "एक चौथाई से एक" में अनुवाद करेगा। यह एक उरी हरेरा विकल्प भी करता है जो घंटे को बोल्ड करता है;)

इसके अलावा यह स्वचालित रूप से ताज़ा हो जाता है, जब समय बदल जाता है।

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

अब इसे कहीं सहेज लें, इस प्रश्न के उद्देश्य के लिए मान लें कि हम इसे सहेजते हैं ~/.config/conky/scripts/pretty_time.lua

अब एक पंक्ति जोड़ने .conkyrcसे पहले, अपना संपादन करेंTEXT

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

यह स्क्रिप्ट को लोड करता है ताकि हम फ़ंक्शन तक पहुंच सकें।

फिर, नीचे उपयुक्त स्थान पर TEXT, आप निम्न तरीके से फ़ंक्शन को कॉल कर सकते हैं (शंकुवृत्त स्वचालित रूप से 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}
...

इसके परिणामस्वरूप होगा

यहाँ छवि विवरण दर्ज करें

यदि आप सेकंड चाहते हैं, तो अपने आप को जोड़ना बहुत कठिन नहीं होना चाहिए।


महान! अच्छा काम करता है, अब यह पता लगाने के लिए कि पाठ का आकार कैसे बदलना है।
उरी हरेरा

3

हां, यह संभव है, लेकिन केवल लुआ पटकथा के माध्यम से। आपको एक स्क्रिप्ट की आवश्यकता होगी जो संख्याओं में ले जाती है और शब्दों को आउटपुट करती है। Django जैसी बहुत सारी रूपरेखाओं में यह सुविधा है, लेकिन आप अपने दम पर हो सकते हैं जब तक कि इसके लिए एक समान लुआ पुस्तकालय न हो:

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

आप बस एक पायथन लिपि लिखना चाह सकते हैं, जो अपनी टेम्प्लेटिंग भाषा का उपयोग करके अनुवाद के लिए Django का लाभ उठाती है।


ठीक है धन्यवाद, क्या आप एक उदाहरण जोड़ सकते हैं?
उड़ी हरेरा

हो गया, अल्पविकसित, लेकिन हाँ। यदि आप चाहें, तो मैं विस्तार से बता सकता हूं, लेकिन यह सवाल के दायरे से बाहर है कि आप इसकी संपूर्णता में पायथन को पढ़ाने के लिए :)
Naftuli Kay

यह थोड़ा जटिल है जितना मैंने सोचा था, मैं संभवतः उन पंक्तियों के साथ अधिक सोच रहा था, जिसमें पूर्ण शब्दों (एक, दो, तीन, आदि) का उपयोग करते हुए भी और इनमें से प्रत्येक चित्र समय के अनुसार बदल जाएगा, इसलिए यदि यह 12 है : 22 यह बारह बिसवां दशा प्रदर्शित करेगा।
उड़ी हेरेरा

@ युरीहेरा वास्तव में यह काफी उल्लेखनीय है, मेरा जवाब
गेरहार्ड बर्गर

2

आप इस स्रोत पृष्ठpynum2word पर उपलब्ध लाइब्रेरी का उपयोग करके इसके लिए एक पाइथन स्क्रिप्ट लिख सकते हैं

मूल रूप से यह क्या करता है:

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

एक तुच्छ उदाहरण है कि मैंने यहां क्या किया:

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

अब इसे conky द्वारा प्रस्तुत करने के लिए, अपने conky config निर्देशिका के अंदर एक निर्देशिका बनाएं उदा ~/.conky/pyscripts/और pynum2wordइसके अंदर पुस्तकालय रखें, अब एक और फ़ाइल बनाएं और timeToWordइस स्क्रिप्ट को इस फ़ाइल में डालें:

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

आप समय के प्रारूपण को बदल सकते हैं और यदि आप चाहें तो तिथि भी शामिल कर सकते हैं। स्वरूपण विकल्पों के लिए इस पृष्ठ पर एक नज़र है ।

फिर कॉन्की कॉन्फिग फ़ाइल खोलें /etc/conky/conky.confऔर इस लाइन को कहीं रखें:

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

यह लाइन क्या करती है, यह स्क्रिप्ट फाइल को हर 30 सेकंड में निष्पादित करती है और आउटपुट को कॉन्की विंडो पर अपडेट करती है।

बेशक आप स्वतंत्र रूप से स्क्रिप्ट फ़ाइलों को किसी भी निर्देशिका में रख सकते हैं, लेकिन सुनिश्चित करें कि pynum2wordलाइब्रेरी उसी निर्देशिका में है।


दिलचस्प है, लेकिन कहते हैं कि मुझे नहीं पता कि इसे कॉनकी से कैसे जोड़ा जाए। मैं Conky फ़ाइल को कैसे जोड़ूं या क्या करूं ताकि यह लाइब्रेरी को आयात करे? इसलिए यह इस तरह समय प्रदर्शित करता है।
उड़ी हेरेरा

मैंने अभी उत्तर को अपडेट किया है, कृपया समीक्षा करें।
गुफरान

0

क्या आप एक प्रतीक-फ़ॉन्ट नहीं बना सकते हैं जिसमें हर अंक के लिए लिखित शब्द की छवियां हों? समय के प्रदर्शन के लिए आपको बस इस फ़ॉन्ट (यदि संभव हो) को चुनना होगा।


यह बात है, आश्चर्यजनक रूप से कॉंकी सभी फोंट लोड नहीं करता है। मेरे पास फोंट हैं जो कॉनकी बस लोड नहीं करेंगे, और वे एरियल या टाइम्स न्यू रोमन के लिए डिफ़ॉल्ट हैं। यह उल्लेख करने के लिए नहीं कि फॉन्ट बनाने के सभी काम का मतलब है। इसके अलावा मैंने जो छवि का उपयोग किया है, वह एक उदाहरण है, मैं एक बोल्ड फ़ॉन्ट में घंटे और एक पतली / लाइट फ़ॉन्ट में मिनट्स करना चाहता हूं।
उड़ी हरेरा

यह भी नौ से अधिक संख्या के लिए वैसे भी काम नहीं करेगा।
एलिस्टेयर बुक्सटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.