Conky가 시간을 숫자가 아닌 단어로 표시 할 수 있습니까?


10

Conky가 숫자가 아닌 단어를 사용하여 시간을 표시하도록하고 싶습니다.

내가하고 싶은 일은 Pebble Watch가 어떻게 보이는지입니다 ( Red watch ).

여기에 이미지 설명을 입력하십시오

이미지에서와 같이 날짜가 아닌 시간 만 표시 될 수 있습니다.

이것이 가능한가?


실제로 이미지를 사용하는 것은 나에게 훨씬 더 어려워 보입니다 ... 나는 Lua에서 프로그래밍하지 않았거나 Conky를 전에 사용하지는 않았지만 월요일 아침에 좋은 도전을 보았고 답을 적어 쓰는 것을 포함하여 처음부터 끝까지 2 시간이 걸렸습니다. : P
Gerhard Burger

그것은 내가 가진 생각 중 하나였습니다. 나는 여전히 어떤 대답이 가장 효과가 좋은지를 시도하지 않았습니다.
Uri Herrera

답변:


9

루아 스크립팅 솔루션

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

결과는

여기에 이미지 설명을 입력하십시오

당신이 초를 원한다면, 이것은 자신을 추가하기 너무 어렵지 않아야합니다.


큰! 텍스트 크기를 변경하는 방법을 찾기 위해 지금은 잘 작동합니다.
Uri Herrera

3

예, 가능하지만 Lua 스크립팅을 통해서만 가능합니다. 숫자를 받아서 단어를 출력하는 스크립트가 필요합니다. Django와 같은 많은 프레임 워크에는이 기능이 있지만 동등한 Lua 라이브러리가 없다면 독자적으로있을 수 있습니다.

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

템플릿 언어를 사용하여 Django를 번역에 사용하는 Python 스크립트를 작성하기 만하면됩니다.


감사합니다. 예를 추가 할 수 있습니까?
Uri Herrera

초보적이지만 네. 원하는 경우 자세히 설명 할 수 있지만, 파이썬 전체를 가르치는 것은 질문의 범위를 벗어난 것 같습니다 :)
Naftuli Kay

생각보다 약간 복잡합니다. 전체 단어 (1, 2, 3 등)가 포함 된 이미지를 사용하는 경우에도 더 많은 생각을하고 있었으며이 이미지는 시간에 따라 변경 될 것이므로 12 인 경우 : 22 이십 이십을 표시합니다.
Uri Herrera

@UriHerrera 실제로 그것은 실제로 할 수 있습니다, 내 대답을
Gerhard Burger

2

이 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라이브러리가 동일한 디렉토리에 있는지 확인하십시오 .


흥미롭지 만 Conky에 이것을 추가하는 방법을 모른다고 말하십시오. Conky 파일을 추가하거나 라이브러리로 가져 오려면 어떻게해야합니까? 그런 시간을 표시합니다.
Uri Herrera

방금 답변을 업데이트했습니다. 검토하십시오.
Gufran

0

모든 숫자에 대해 쓰여진 단어의 이미지로 구성된 기호 글꼴을 만들 수 없습니까? 시간 표시를 위해이 글꼴을 선택해야합니다 (가능한 경우).


놀랍게도 Conky는 모든 글꼴을로드하지 않습니다. Conky가로드하지 않는 글꼴이 있으며 기본적으로 Arial 또는 Times New Roman으로 설정됩니다. 글꼴을 만드는 모든 작업이 의미하는 것은 말할 것도 없습니다. 또한 내가 사용한 이미지는 예입니다. 굵은 글꼴로 시간을 표시하고 얇고 가벼운 글꼴로 분을 설정하고 싶습니다.
Uri Herrera

이것은 9보다 큰 숫자의 경우에도 작동하지 않습니다.
Alistair Buxton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.