Ubuntu için Bulanık Saat


9

Uzun zaman önce, bir panel uygulamasında zaman, sabah, gündüz, akşam, gece gibi şeyleri söyleyecek bir saatim vardı. Geniş vuruş, çok spesifik değil, bir KDE masaüstü olabilir. Ben şimdi Ubuntu Mate'deyim, dostça panelde bu belirsiz zaman açıklamasını almanın bir yolu var mı?


1
eğer yardımcı olursa, buna bulanık bir saat denir
Dmiters

Yardım eder. :)
j0h

1
İşte kaynak kodu: code.google.com/archive/p/fuzzy-clock Şimdi bir uygulama haline getirmek için @jacobvlijm gerekir>: - D
Rinzwind

Panel uygulamaları yapmak için Mate-Üniversitesi okumaya başladım. Im emin böyle bir şey programlayabilirsiniz, ama nasıl bir panel uygulaması yapmak hakkında hiçbir fikrim yok
j0h

1
Bu KDE'daydı, bundan eminim ve tercüme edildi!
Antek

Yanıtlar:


15

Mate ve diğer Ubuntu varyantları için metin / konuşma saati

Soru aslen Ubuntu Mate ile ilgili olmasına rağmen , neyse ki, 15.10'dan itibaren göstergeler de kullanılabilir Mate. Sonuç olarak, aşağıda cevap en az çalışır Unityve Mateve üzerinde (test) Xubuntu.

Ayarları değiştirmek için bir GUI hala takip ediliyor (üzerinde çalışıyor), ancak aşağıdaki göstergeyi en az 20 saat boyunca test ettim ve (beklendiği gibi) işi hatasız yaptı.

Seçenekler

Gösterge aşağıdaki seçenekleri sunar:

  • Metin zamanını göster

    resim açıklamasını buraya girin

  • Metinsel "gündüz alanı" nı göster ( gece , sabah , gün , akşam )

    resim açıklamasını buraya girin

  • Öö / ös

    resim açıklamasını buraya girin

  • Hepsini bir kerede göster (veya üçünün herhangi bir kombinasyonunu)

    resim açıklamasını buraya girin

  • Bir saatin her çeyreğinde zamanı söyleyin ( espeakzorunlu)

  • İsteğe bağlı olarak, zaman bulanık görüntülenir ; beş dakika boyunca yuvarlandı, örneğin
    10:43 -> quarter to eleven.

Komut dosyası, modül ve bir simge

Çözüm, bir komut dosyası, ayrı bir modül ve bir ve aynı dizinde depolamanız gereken bir simge var .

Simge:

resim açıklamasını buraya girin

Üzerine sağ tıklayıp kaydedin (tam olarak) indicator_icon.png

Modül:

Bu, metin zamanını ve görüntülenen diğer tüm bilgileri üreten modüldür. Kodu kopyalayın, yukarıdaki simgeyle birlikte bir ve aynı dizine (tekrar, tam olarak ) kaydedin .tcalc.py

#!/usr/bin/env python3
import time

# --- set starttime of morning, day, evening, night (whole hrs)
limits = [6, 9, 18, 21]
# ---

periods = ["night", "morning", "day", "evening", "night"]

def __fig(n):
    singles = [
        "midnight", "one", "two", "three", "four", "five", "six",
        "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen",
        "fourteen", "quarter", "sixteen", "seventeen", "eighteen", "nineteen",
        ]
    tens = ["twenty", "half"]
    if n < 20:
        return singles[n]
    else:
        if n%10 == 0:
            return tens[int((n/10)-2)]
        else:
            fst = tens[int(n/10)-2]
            lst = singles[int(str(n)[-1])]
            return fst+"-"+lst

def __fuzzy(currtime):
    minutes = round(currtime[1]/5)*5
    if minutes == 60:
        currtime[1] = 0
        currtime[0] = currtime[0] + 1
    else:
        currtime[1] = minutes
    currtime[0] = 0 if currtime[0] == 24 else currtime[0]
    return currtime

def textualtime(fuzz):
    currtime = [int(n) for n in time.strftime("%H %M %S").split()]
    currtime = __fuzzy(currtime) if fuzz == True else currtime
    speak = True if currtime[1]%15 == 0 else False
    period = periods[len([n for n in limits if currtime[0] >= n])]
    # define a.m. / p.m.
    if currtime[0] >= 12:
        daytime = "p.m."
        if currtime[0] == 12:
            if currtime[1] > 30:
                currtime[0] = currtime[0] - 12
        else:
            currtime[0] = currtime[0] - 12
    else:
        daytime = "a.m."
    # convert time to textual time
    if currtime[1] == 0:
        t = __fig(currtime[0])+" o'clock" if currtime[0] != 0 else __fig(currtime[0])
    elif currtime[1] > 30:
        t = __fig((60 - currtime[1]))+" to "+__fig(currtime[0]+1)
    else:
        t = __fig(currtime[1])+" past "+__fig(currtime[0])
    return [t, period, daytime, currtime[2], speak]

Senaryo:

Bu gerçek göstergedir. Kodu kopyalayın, moderntimes.pyyukarıdaki simge ve th modülü ile birlikte bir ve aynı dizine kaydedin .

#!/usr/bin/env python3
import os
import signal
import subprocess
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, AppIndicator3, GObject
import time
from threading import Thread
import tcalc

# --- define what to show:
# showtime = textual time, daytime = a.m./p.m. period = "night"/"morning"/day"/"evening"
# speak = speak out time every quarter, fuzzy = round time on 5 minutes
showtime = True; daytime = False; period = True; speak = True; fuzzy = True

class Indicator():
    def __init__(self):
        self.app = 'about_time'
        path = os.path.dirname(os.path.abspath(__file__))
        self.indicator = AppIndicator3.Indicator.new(
            self.app, os.path.abspath(path+"/indicator_icon.png"),
            AppIndicator3.IndicatorCategory.OTHER)
        self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)       
        self.indicator.set_menu(self.create_menu())

        self.update = Thread(target=self.get_time)
        self.update.setDaemon(True)
        self.update.start()

    def get_time(self):
        # the first loop is 0 seconds, the next loop is 60 seconds,
        # in phase with computer clock
        loop = 0; timestring1 = ""
        while True:
            time.sleep(loop)
            tdata = tcalc.textualtime(fuzzy)
            timestring2 = tdata[0]
            loop = (60 - tdata[3])+1
            mention = (" | ").join([tdata[item[1]] for item in [
                [showtime, 0], [period, 1], [daytime, 2]
                ]if item[0] == True])
            if all([
                tdata[4] == True,
                speak == True,
                timestring2 != timestring1,
                ]):
                subprocess.Popen(["espeak", '"'+timestring2+'"', "-s", "130"])
            # [4] edited
            GObject.idle_add(
                self.indicator.set_label,
                mention, self.app,
                priority=GObject.PRIORITY_DEFAULT
                )
            timestring1 = timestring2

    def create_menu(self):
        menu = Gtk.Menu()
        item_quit = Gtk.MenuItem('Quit')
        item_quit.connect('activate', self.stop)
        menu.append(item_quit)
        menu.show_all()
        return menu

    def stop(self, source):
        Gtk.main_quit()

Indicator()
GObject.threads_init()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()

Nasıl kullanılır

  1. Betiğin ihtiyacı espeak:

    sudo apt-get install espeak
    
  2. Yukarıdaki üç dosyayı da Komut dosyasında, modülde ve bir simgede gösterildiği gibi adlandırılmış bir ve aynı dizine kopyalayın

  3. Komut dosyasının ( moderntimes.py) başında, hangi bilgilerin görüntüleneceğini ve nasıl yapılacağını tanımlayın. Basitçe ayarlayın Trueveya Falsehatta:

    # --- define what to show:
    # time = textual time, daytime = a.m./p.m. period = "night"/"morning"/day"/"evening"
    # speak = speak out time every quarter, fuzzy = round time on 5 minutes
    showtime = True; daytime = False; period = True; speak = False; fuzzy = True
  4. Başkanı olarak modülüne sonradan ne zaman başlatılacağını, sen saat değiştirebilir sabah , gün , akşam , gece hattında,:

    # --- set starttime of morning, day, evening, night (whole hrs)
    limits = [6, 9, 18, 21]
    # ---
    

    Şimdilik komut dosyasında başka bir şeye dokunma :)

  5. Ubuntu Mate kullanıcılarının sistemlerinde göstergelerin kullanımını etkinleştirmesi gerekir: Sistem> Tercihler> Bak ve hisset> Mate ayarları> Arayüz> "Göstergeleri etkinleştir" i seçin

    resim açıklamasını buraya girin

  6. Göstergeyi şu komutla çalıştırın:

    python3 /path/to/moderntimes.py
    

Başlangıç ​​Uygulamalarından Çalıştırma

Komutu Başlangıç ​​Uygulamaları'ndan çalıştırırsanız, çoğu durumda, özellikle (diğerleri arasında) göstergelere biraz mola eklemeniz gerektiğini unutmayın:

/bin/bash -c "sleep 15 && python3 /path/to/moderntimes.py"

notlar

  • Şüphesiz, senaryo önümüzdeki birkaç gün içinde birçok kez değiştirilecek / güncellenecektir. Özellikle geri bildirimde bulunmak istediğim bir şey, dijital zamanın metinsel zamana dönüştürüldüğü "stil" dir. Şimdi yapılış şekli:

    • tüm saatler, örneğin:

      six o'clock
      
    • saatten sonra 30 dakikadan az, ör.

      twenty past eleven
      
    • 30 dakika sonra örneğin:

      half past five
      
    • 30 dakikadan fazla örneğin:

      twenty to five
      
    • 15 dakika bahsedildi quarter, örneğin:

      quarter past six
      
    • istisna, çağrılmayan zero, ancak midnightörneğin:

      quarter past midnight
      
  • İlk zaman kontrol döngüsünden sonra, döngünün bilgisayar saatinde otomatik olarak senkronize edilmesi nedeniyle, komut dosyası suyunda son derece düşüktür. Bu nedenle komut dosyası zamanı kontrol eder / görüntülenen zamanı dakikada bir kez düzenler ve kalan süreyi düzenler.


Düzenle

Bugün (2016-4-9) uyarınca, cilalı versiyonun bir ppa mevcuttur. Ppa'dan yüklemek için:

sudo apt-add-repository ppa:vlijm/abouttime
sudo apt-get update
sudo apt-get install abouttime

Bu sürümdeki gün periyotları, yukarıdaki komut dosyası sürümüne kıyasla değiştirildi, şimdi:

morning 6:00-12:00
afternoon 12:00-18:00
evening 18:00-24:00
night 24:00-6:00

... ve göstergenin gündüz simgesini değiştirme seçeneği vardır:
sabah / öğleden sonra / akşam / gece :resim açıklamasını buraya girin resim açıklamasını buraya girin resim açıklamasını buraya girin resim açıklamasını buraya girin

Belirtildiği gibi, bu sürüm hem test edildi Mate(orijinal soruya itibaren) Unityve Xubuntu.

resim açıklamasını buraya girin


1
Şunu söyleyebilirim: Bulanık, yanlış olabileceğiniz anlamına gelir. Yani 15:12 ile 15:23 arasında 3'ü çeyrek geçirdim. Sadece şunu kullanın derim: 5/10 / çeyrek / yarım geçmiş / saat. Hiçbir şey için bulanık değil.
Rinzwind

Yine harika bir cevap. Umarım bu PPA'nıza entegre olur .... :)
Parto

@Parto wow tekrar teşekkürler :) Kesinlikle bunun için bir ppa oluşturacağım :)
Jacob Vlijm

1

Kubuntu'nuz varsa (Plazma Desktop Ubuntu distro), "bulanık saat" adı verilen yerleşik bir widget'ınız var - en azından 14.04'ten beri veya Plazma 4 çıktığı sürece ve hala Plazma 5'te Kubuntu 16.04'te bulundu.

Bulanık Saat, analog bir saat okumak gibi beş dakikalık artışlarla "doğru" olarak ayarlanabilir (diyelim "dördün ondan sonra"), ancak biri "öğleden sonra" gibi okumalar veren üç "bulanık" ayara sahiptir ve sadece "Haftasonu!" (Pazar öğleden sonra - yarın "Pazartesi" diyecek).

Bulanık saatin diğer Ubuntu tatlarında mevcut olup olmadığını bilmiyorum - sistemimde xfce'de (Xubuntu'da olduğu gibi) gördüm, ancak işletim sistemi Kubuntu olarak kuruldu, bu yüzden bulanık saatin KDE / Plazma kadar xfce'ye özgüdür veya Unity veya Mate'de mevcut olup olmadığı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.