ฉันต้องการให้ Conky แสดงเวลาโดยใช้คำไม่ใช่ตัวเลข
สิ่งที่ฉันต้องการจะทำคือนาฬิกา Pebble Watch มีลักษณะมากขึ้นหรือน้อยลง ( นาฬิกาสีแดง )
เช่นเดียวกับในรูปภาพแม้ว่าจะแสดงเฉพาะเวลาและไม่ใช่วันที่
เป็นไปได้ไหม
ฉันต้องการให้ Conky แสดงเวลาโดยใช้คำไม่ใช่ตัวเลข
สิ่งที่ฉันต้องการจะทำคือนาฬิกา Pebble Watch มีลักษณะมากขึ้นหรือน้อยลง ( นาฬิกาสีแดง )
เช่นเดียวกับในรูปภาพแม้ว่าจะแสดงเฉพาะเวลาและไม่ใช่วันที่
เป็นไปได้ไหม
คำตอบ:
นี่เป็นไปได้จริง ๆ โดยใช้การเขียนสคริปต์ Lua คุณสามารถใช้สคริปต์ด้านล่าง (การแปลงหมายเลขนำมาจากrosettacode.org )
สคริปต์สามารถทำตัวเลือกที่น่าเบื่อซึ่งจะแปล 12:45 ถึง "สิบสี่สิบห้า" และตัวเลือกที่ยอดเยี่ยมซึ่งจะแปลเป็น "หนึ่งในสี่ส่วนหนึ่ง" นอกจากนี้ยังมีตัวเลือก Uri Herrera ซึ่งทำให้ตัวหนาชั่วโมง)
นอกจากนี้ยังรีเฟรชโดยอัตโนมัติเมื่อเวลามีการเปลี่ยนแปลง
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 เพิ่ม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}
...
ซึ่งจะส่งผลให้
ถ้าคุณต้องการวินาทีมันก็ไม่ยากที่จะเพิ่มตัวคุณเอง
ใช่เป็นไปได้ แต่ผ่านการเขียนสคริปต์ Lua เท่านั้น คุณจะต้องมีสคริปต์ที่ใช้ตัวเลขและคำพูด เฟรมเวิร์กจำนวนมากเช่น Django มีคุณสมบัตินี้ แต่คุณอาจเป็นเจ้าของด้วยตัวคุณเองเว้นแต่ว่าจะมีห้องสมุด Lua ที่เทียบเท่ากับมัน:
function conky_translate_number(number) {
if (number == 1) {
return "one";
} else {
return "not a clue";
}
}
คุณเพียงแค่อาจต้องการเขียนสคริปต์ Python ซึ่งใช้ประโยชน์จาก Django สำหรับการแปลโดยใช้ภาษาเทมเพลต
คุณสามารถเขียนสคริปต์ python สำหรับสิ่งนี้โดยใช้pynum2word
ไลบรารีที่มีอยู่ในหน้า sourceforge นี้
โดยพื้นฐานแล้วมันคืออะไร:
>>> 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 ของคุณเช่น~/.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]))
คุณสามารถเปลี่ยนการจัดรูปแบบของเวลาและรวมวันที่ได้ด้วยหากต้องการ สำหรับตัวเลือกการจัดรูปแบบดูที่หน้านี้
จากนั้นเปิดไฟล์ config conky /etc/conky/conky.conf
และวางบรรทัดนี้ที่อื่น:
{execpi 30 ~/.conky/pyscripts/timeToWord}
สิ่งที่บรรทัดนี้ทำคือมันรันไฟล์สคริปต์ทุก ๆ 30 วินาทีและอัปเดตผลลัพธ์ในหน้าต่าง conky
แน่นอนคุณสามารถวางไฟล์สคริปต์ในไดเรกทอรีใดก็ได้ แต่ต้องแน่ใจว่าpynum2word
ไลบรารีนั้นอยู่ในไดเรกทอรีเดียวกัน
คุณไม่สามารถสร้างแบบอักษรสัญลักษณ์ซึ่งประกอบด้วยภาพของคำที่เขียนสำหรับทุกตัวเลขได้หรือไม่? คุณควรเลือกแบบอักษรนี้ (ถ้าเป็นไปได้) สำหรับการแสดงเวลา