Чи можна Конкі відображати час словами, а не цифрами?


10

Я хочу, щоб Конкі відображав час, використовуючи слова, а не цифри.

Що я хочу зробити, це більш-менш те, як виглядає Pebble Watch ( Червоний годинник ).

введіть тут опис зображення

Як і на зображенні, навіть якщо може бути показаний лише час, а не дата.

Чи можливо це?


насправді використання зображень для мене виглядає набагато важче ... Я ніколи не програмував у Луа і не використовував Конкі раніше, але побачив приємний виклик вранці в понеділок, і мені знадобилося 2 години від початку до кінця, включаючи написання відповіді вниз: P
Герхард Бургер

Гаразд, це була лише якась думка. Я досі не пробував, який із відповідей працює найкраще.
Урі Еррера

Відповіді:


9

Рішення сценаріїв Lua

Це дійсно можливо за допомогою сценаріїв 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}
...

Це призведе до

введіть тут опис зображення

Якщо ви хочете секунди, це не повинно бути занадто важким, щоб додати себе.


Чудово! добре працює, тепер, щоб знайти, як змінити розмір тексту.
Урі Еррера

3

Так, це можливо, але тільки через сценарії Луа. Вам знадобиться сценарій, який містить цифри і виводить слова. Багато функцій, таких як Django, мають цю функцію, але ви можете бути самостійно, якщо для неї не існує еквівалентної бібліотеки Lua:

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

Ви можете просто просто написати сценарій Python, який використовує Django для перекладу, використовуючи його мову шаблонів.


Добре дякую, ви можете додати приклад?
Урі Еррера

Зроблено, рудиментарний, але так. Я можу пояснити, якщо ви хочете, але це здається поза рамками питання, щоб навчити вас Python у повному обсязі :)
Naftuli Kay

Це трохи складніше, ніж я думав, я більше думав, можливо, навіть використовував зображення, що містять повні слова (один, два, три і т. Д.), І що кожне з цих зображень буде змінюватися відповідно до часу, так що якщо це 12 : 22 вона відобразила б дванадцять двадцять два.
Урі Еррера

@UriHerrera насправді це цілком можливо, дивіться мою відповідь
Герхард Бургер

2

ви можете написати сценарій 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 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 config /etc/conky/conky.confта покладіть цей рядок десь:

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

Цей рядок і полягає в тому, що він виконує файл сценарію кожні 30 секунд і оновлює вихід у conky вікні.

Звичайно, ви можете вільно розміщувати файли сценаріїв у будь-якому каталозі, але переконайтесь, що pynum2wordбібліотека знаходиться в одному каталозі.


Цікаво, але скажіть, що я не знаю, як додати це до Конкі. Як додати або що робити з файлом Conky, щоб він імпортував бібліотеку? тому він відображає такий час.
Урі Еррера

Щойно я оновив відповідь, будь ласка, перегляньте.
Гуфран

0

Не могли б ви створити символ-шрифт, який складається із зображень написаного слова для кожної цифри? Тоді вам слід просто вибрати цей шрифт (якщо це можливо) для відображення часу.


У цьому річ, дивовижно Conky завантажує не всі шрифти. У мене є шрифти, які Conky просто не завантажують, і вони за замовчуванням ставляться до Arial або Times New Roman. Не кажучи вже про те, що вся робота над створенням шрифту означає. Також приклад, який я використав, - це приклад, я хотів би мати Годинник жирним шрифтом та Хвилини шрифтом Thin / Light.
Урі Еррера

Це навіть не спрацювало б із числами, що перевищують дев'ять.
Алістер Бакстон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.