Kann Conky die Zeit in Worten und nicht in Zahlen anzeigen?

10

Ich möchte, dass Conky die Zeit mit Wörtern und nicht mit Zahlen anzeigt.

Was ich tun möchte, ist mehr oder weniger, wie die Pebble Watch aussieht ( rote Uhr ).

Geben Sie hier die Bildbeschreibung ein

Wie im Bild, auch wenn nur die Uhrzeit und nicht das Datum angezeigt werden kann.

Ist das möglich?

Uri Herrera
quelle
Die Verwendung von Bildern sieht für mich viel schwieriger aus ... Ich habe noch nie in Lua programmiert oder Conky verwendet, aber ich habe eine schöne Herausforderung am Montagmorgen gesehen, und es dauerte 2 Stunden von Anfang bis Ende, einschließlich des Aufschreibens der Antwort: P
Gerhard Burger
Es ist in Ordnung, es war nur ein Gedanke, den ich hatte. Ich habe immer noch nicht versucht, welche der Antworten am besten funktioniert.
Uri Herrera

Antworten:

9

Lua-Skriptlösung

Dies ist in der Tat mit Lua-Skripten möglich. Sie können das folgende Skript verwenden (die Nummernkonvertierung stammt von rosettacode.org ).

Das Skript kann eine langweilige Option ausführen, die 12:45 in "zwölf fünfundvierzig" übersetzt, und eine fantastische Option, die es in "ein Viertel vor eins" übersetzt. Es gibt auch eine Uri Herrera-Option, die die Stunde fett macht;)

Außerdem wird es automatisch aktualisiert, wenn sich die Zeit ändert.

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

Speichern Sie es jetzt irgendwo, für den Zweck dieser Frage nehmen wir an, wir speichern es als ~/.config/conky/scripts/pretty_time.lua

Bearbeiten Sie nun Ihre .conkyrc, bevor TEXTSie eine Zeile hinzufügen

lua_load ~/.config/conky/scripts/pretty_time.lua

Dadurch wird das Skript geladen, damit wir auf die Funktionen zugreifen können.

Dann können Sie an der entsprechenden Stelle unten TEXTdie Funktionen folgendermaßen aufrufen (conky fügt automatisch das conky_Präfix hinzu).

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

Dies führt zu

Geben Sie hier die Bildbeschreibung ein

Wenn Sie die Sekunden möchten, sollte es nicht zu schwierig sein, sich selbst hinzuzufügen.

Gerhard Burger
quelle
Groß! funktioniert gut, jetzt finden Sie heraus, wie Sie die Größe des Textes ändern können.
Uri Herrera
3

Ja, das ist möglich, aber nur durch Lua-Skripte. Sie benötigen ein Skript, das Zahlen aufnimmt und Wörter ausgibt. Viele Frameworks wie Django haben diese Funktion, aber Sie sind möglicherweise allein, es sei denn, es gibt eine entsprechende Lua-Bibliothek dafür:

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

Vielleicht möchten Sie einfach nur ein Python-Skript schreiben, das Django für die Übersetzung in seiner Vorlagensprache nutzt.

Naftuli Kay
quelle
Ok danke, kannst du ein Beispiel hinzufügen?
Uri Herrera
Fertig, rudimentär, aber ja. Ich kann
näher darauf eingehen,
Es ist ein bisschen kompliziert als ich dachte, ich habe mehr darüber nachgedacht, möglicherweise sogar Bilder zu verwenden, die vollständige Wörter (eins, zwei, drei usw.) enthalten, und dass sich jedes dieser Bilder mit der Zeit ändern würde, wenn es also 12 ist : 22 es würde zwölfundzwanzig anzeigen.
Uri Herrera
@ UrriHerrera eigentlich ist es ziemlich machbar, siehe meine Antwort
Gerhard Burger
2

Sie können ein Python-Skript dafür mithilfe der pynum2wordBibliothek schreiben, die auf dieser SourceForge-Seite verfügbar ist

Grundsätzlich ist es:

>>> import num2word
>>> num2word.to_card(10)
'ten'
>>> num2word.to_card(100)
'one hundred'
>>> num2word.to_card(1025)
'one thousand and twenty-five'

Ein triviales Beispiel ist das, was ich hier gemacht habe:

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

Um dies von conky gerendert zu machen, erstellen Sie ein Verzeichnis in Ihrem conky-Konfigurationsverzeichnis, z. B. ~/.conky/pyscripts/und fügen Sie eine pynum2wordBibliothek darin ein. Erstellen Sie nun eine weitere Datei, sagen Sie, timeToWordund fügen Sie dieses Skript in diese Datei ein:

#!/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]))

Sie können die Formatierung der Uhrzeit ändern und bei Bedarf auch das Datum angeben. Formatierungsoptionen finden Sie auf dieser Seite .

Öffnen Sie dann die Conky-Konfigurationsdatei /etc/conky/conky.confund setzen Sie diese Zeile irgendwo ein:

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

Diese Zeile führt die Skriptdatei alle 30 Sekunden aus und aktualisiert die Ausgabe im Conky-Fenster.

Natürlich können Sie die Skriptdateien frei in einem beliebigen Verzeichnis ablegen, aber stellen Sie sicher, dass sich die pynum2wordBibliothek im selben Verzeichnis befindet.

Gufran
quelle
Interessant, aber sagen Sie, dass ich nicht weiß, wie ich das zu Conky hinzufügen soll. Wie füge ich der Conky-Datei hinzu oder was mache ich, damit die Bibliothek importiert wird? so zeigt es die Zeit so an.
Uri Herrera
Ich habe gerade die Antwort aktualisiert, bitte überprüfen Sie.
Gufran
0

Könnten Sie nicht eine Symbolschrift erstellen, die aus Bildern des geschriebenen Wortes für jede Ziffer besteht? Dann sollten Sie nur diese Schriftart (wenn möglich) für die Anzeige der Zeit auswählen müssen.

diamy27
quelle
Das ist die Sache, erstaunlicherweise lädt Conky nicht alle Schriftarten. Ich habe Schriftarten, die Conky einfach nicht lädt, und sie verwenden standardmäßig Arial oder Times New Roman. Ganz zu schweigen davon, dass all die Arbeit, die eine Schrift macht, bedeutet. Das Bild, das ich verwendet habe, ist auch ein Beispiel. Ich möchte Stunden in Fettdruck und Minuten in Dünn / Hell-Schrift haben.
Uri Herrera
Dies würde sowieso nicht einmal für Zahlen größer als neun funktionieren.
Alistair Buxton