Conky가 숫자가 아닌 단어를 사용하여 시간을 표시하도록하고 싶습니다.
내가하고 싶은 일은 Pebble Watch가 어떻게 보이는지입니다 ( Red watch ).
이미지에서와 같이 날짜가 아닌 시간 만 표시 될 수 있습니다.
이것이 가능한가?
Conky가 숫자가 아닌 단어를 사용하여 시간을 표시하도록하고 싶습니다.
내가하고 싶은 일은 Pebble Watch가 어떻게 보이는지입니다 ( Red watch ).
이미지에서와 같이 날짜가 아닌 시간 만 표시 될 수 있습니다.
이것이 가능한가?
답변:
Lua 스크립팅을 사용하면 가능합니다. 아래 스크립트를 사용할 수 있습니다 (숫자 변환은 rosettacode.org 에서 가져옴 ).
이 스크립트는 12:45를 "12-15"로 변환하는 지루한 옵션과 "1/4"로 변환하는 멋진 옵션을 수행 할 수 있습니다. 또한 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";
}
}
템플릿 언어를 사용하여 Django를 번역에 사용하는 Python 스크립트를 작성하기 만하면됩니다.
이 sourceforge 페이지pynum2word
에서 사용 가능한 라이브러리를 사용하여 이것에 대한 python 스크립트를 작성할 수 있습니다
기본적으로 수행하는 작업은 다음과 같습니다.
>>> 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]))
원하는 경우 시간 형식을 변경하고 날짜도 포함 할 수 있습니다. 서식 지정 옵션은 이 페이지를 참조하십시오 .
conky 설정 파일을 열고이 /etc/conky/conky.conf
줄을 어딘가에 넣으십시오.
{execpi 30 ~/.conky/pyscripts/timeToWord}
이 줄은 30 초마다 스크립트 파일을 실행하고 conky 창에서 출력을 업데이트합니다.
물론 스크립트 파일을 임의의 디렉토리에 자유롭게 배치 할 수 있지만 pynum2word
라이브러리가 동일한 디렉토리에 있는지 확인하십시오 .
모든 숫자에 대해 쓰여진 단어의 이미지로 구성된 기호 글꼴을 만들 수 없습니까? 시간 표시를 위해이 글꼴을 선택해야합니다 (가능한 경우).