właściwie używanie obrazów wygląda dla mnie o wiele trudniej ... Nigdy wcześniej nie programowałem w Lua ani nie używałem Conky, ale widziałem fajne wyzwanie w poniedziałek rano i zajęło mi to 2 godziny od początku do końca, w tym zapisanie odpowiedzi: P
Gerhard Burger
W porządku, to tylko jakaś myśl, którą miałem. Nadal nie próbowałem, które z odpowiedzi działają najlepiej.
Uri Herrera
Odpowiedzi:
9
Rozwiązanie skryptowe Lua
Jest to rzeczywiście możliwe przy użyciu skryptów Lua. Możesz użyć skryptu poniżej (konwersja liczb pochodzi z rosettacode.org ).
Skrypt może zrobić nudną opcję, która przełoży 12:45 na „dwanaście czterdzieści pięć”, i niesamowitą opcję, która przełoży go na „kwadrans do jednej”. Robi też opcję Uri Herrera, która odważa godzinę;)
Również automatycznie odświeża się, gdy zmienia się czas.
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
Teraz zapisz gdzieś, dla celów tego pytania załóżmy, że zapisujemy jako ~/.config/conky/scripts/pretty_time.lua
Teraz edytuj swój .conkyrc, zanim TEXTdodasz linię
lua_load ~/.config/conky/scripts/pretty_time.lua
to ładuje skrypt, abyśmy mogli uzyskać dostęp do funkcji.
Następnie w odpowiednim miejscu poniżej TEXTmożesz wywoływać funkcje w następujący sposób (conky automatycznie dodaje conky_prefiks)
Świetny! działa dobrze, aby dowiedzieć się, jak zmienić rozmiar tekstu.
Uri Herrera
3
Tak, jest to możliwe, ale tylko poprzez skrypt Lua. Będziesz potrzebował skryptu, który pobierze liczby i wyświetli słowa. Wiele frameworków, takich jak Django, ma tę funkcję, ale możesz być sam, chyba że istnieje odpowiednia biblioteka Lua:
function conky_translate_number(number) {
if (number == 1) {
return "one";
} else {
return "not a clue";
}
}
Możesz po prostu napisać skrypt w języku Python, który wykorzystuje Django do tłumaczenia przy użyciu języka szablonów.
Zrobione, szczątkowe, ale tak. Mogę rozwinąć, jeśli chcesz, ale wydaje się, że poza zakresem pytania nauczysz cię Pythona w całości :)
Naftuli Kay
Jest to trochę bardziej skomplikowane niż myślałem, myślałem raczej o zastosowaniu nawet obrazów zawierających pełne słowa (jeden, dwa, trzy itd.) I że każdy z tych obrazów zmieniłby się w zależności od czasu, więc jeśli to 12 : 22 wyświetlałoby dwanaście dwadzieścia dwa.
Uri Herrera
@UriHerrera faktycznie jest całkiem wykonalne, patrz moja odpowiedź
Gerhard Burger
2
możesz napisać do tego skrypt Pythona, używając pynum2wordbiblioteki dostępnej na tej stronie sourceforge
>>> 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
Teraz, aby renderować to przez conky, utwórz katalog w swoim conky katalogu konfiguracyjnym np. ~/.conky/pyscripts/I umieść pynum2wordw nim bibliotekę, teraz utwórz inny plik powiedz timeToWordi umieść ten skrypt w tym pliku:
#!/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]))
Jeśli chcesz, możesz zmienić formatowanie godziny i dołączyć także datę. Opcje formatowania znajdziesz na tej stronie .
następnie otwórz plik konfiguracyjny conky /etc/conky/conky.confi umieść gdzieś tę linię:
{execpi 30 ~/.conky/pyscripts/timeToWord}
Ta linia wykonuje plik skryptu co 30 sekund i aktualizuje dane wyjściowe w oknie Conky.
Oczywiście możesz swobodnie umieszczać pliki skryptów w dowolnym katalogu, ale upewnij się, że pynum2wordbiblioteka znajduje się w tym samym katalogu.
Ciekawe, ale powiedz, że nie wiem, jak to dodać do Conky. Jak dodać lub Co zrobić w pliku Conky, aby importował bibliotekę? więc wyświetla taki czas.
Uri Herrera
Właśnie zaktualizowałem odpowiedź, proszę przejrzeć.
Gufran
0
Czy nie można stworzyć czcionki symbolicznej, która składałaby się z obrazów słowa zapisanego dla każdej cyfry? Następnie powinieneś po prostu wybrać tę czcionkę (jeśli to możliwe) do wyświetlania czasu.
To jest to, że Conky nie ładuje wszystkich czcionek. Mam czcionki, których Conky po prostu nie ładuje, i domyślnie są to Arial lub Times New Roman. Nie wspominając już o tym, że cała praca nad stworzeniem czcionki oznacza. Również obraz, którego użyłem, jest przykładem, chciałbym mieć Godziny pogrubioną czcionką, a Minuty czcionką Cienka / Lekka.
Uri Herrera
To i tak nie działałoby nawet w przypadku liczb większych niż dziewięć.
Odpowiedzi:
Rozwiązanie skryptowe Lua
Jest to rzeczywiście możliwe przy użyciu skryptów Lua. Możesz użyć skryptu poniżej (konwersja liczb pochodzi z rosettacode.org ).
Skrypt może zrobić nudną opcję, która przełoży 12:45 na „dwanaście czterdzieści pięć”, i niesamowitą opcję, która przełoży go na „kwadrans do jednej”. Robi też opcję Uri Herrera, która odważa godzinę;)
Również automatycznie odświeża się, gdy zmienia się czas.
Teraz zapisz gdzieś, dla celów tego pytania załóżmy, że zapisujemy jako
~/.config/conky/scripts/pretty_time.lua
Teraz edytuj swój
.conkyrc
, zanimTEXT
dodasz linięto ładuje skrypt, abyśmy mogli uzyskać dostęp do funkcji.
Następnie w odpowiednim miejscu poniżej
TEXT
możesz wywoływać funkcje w następujący sposób (conky automatycznie dodajeconky_
prefiks)Spowoduje to
Jeśli chcesz sekund, nie powinno być zbyt trudno dodać siebie.
źródło
Tak, jest to możliwe, ale tylko poprzez skrypt Lua. Będziesz potrzebował skryptu, który pobierze liczby i wyświetli słowa. Wiele frameworków, takich jak Django, ma tę funkcję, ale możesz być sam, chyba że istnieje odpowiednia biblioteka Lua:
Możesz po prostu napisać skrypt w języku Python, który wykorzystuje Django do tłumaczenia przy użyciu języka szablonów.
źródło
możesz napisać do tego skrypt Pythona, używając
pynum2word
biblioteki dostępnej na tej stronie sourceforgeZasadniczo to, co robi:
trywialnym przykładem jest to, co tutaj zrobiłem:
Teraz, aby renderować to przez conky, utwórz katalog w swoim conky katalogu konfiguracyjnym np.
~/.conky/pyscripts/
I umieśćpynum2word
w nim bibliotekę, teraz utwórz inny plik powiedztimeToWord
i umieść ten skrypt w tym pliku:Jeśli chcesz, możesz zmienić formatowanie godziny i dołączyć także datę. Opcje formatowania znajdziesz na tej stronie .
następnie otwórz plik konfiguracyjny conky
/etc/conky/conky.conf
i umieść gdzieś tę linię:Ta linia wykonuje plik skryptu co 30 sekund i aktualizuje dane wyjściowe w oknie Conky.
Oczywiście możesz swobodnie umieszczać pliki skryptów w dowolnym katalogu, ale upewnij się, że
pynum2word
biblioteka znajduje się w tym samym katalogu.źródło
Czy nie można stworzyć czcionki symbolicznej, która składałaby się z obrazów słowa zapisanego dla każdej cyfry? Następnie powinieneś po prostu wybrać tę czcionkę (jeśli to możliwe) do wyświetlania czasu.
źródło