Fuzzy-Clock untuk Ubuntu

9

Beberapa waktu yang lalu, saya memiliki jam yang ditetapkan untuk mengatakan hal-hal seperti pagi, siang, malam, malam, untuk waktu dalam aplikasi panel. Stroke luas, tidak terlalu spesifik, Ini mungkin desktop KDE. Saya di Ubuntu Mate sekarang, apakah ada cara untuk mendapatkan deskripsi waktu yang tidak jelas ini di panel pasangan?

j0h
sumber
1
jika ini membantu, ini disebut jam fuzzy
Dmiters
Itu membantu. :)
j0h
1
Berikut ini adalah kode sumber: code.google.com/archive/p/fuzzy-clock Sekarang kita perlu @jacobvlijm untuk membuatnya menjadi aplikasi>: - D
Rinzwind
Saya mulai membaca Mate-University untuk membuat aplikasi panel. Saya yakin saya dapat memprogram sesuatu seperti ini, tetapi saya tidak memiliki petunjuk tentang cara menjadikannya aplikasi panel
j0h
1
ini ada di KDE, saya yakin akan hal ini, dan telah diterjemahkan juga!
Antek

Jawaban:

15

Jam tekstual / berbicara untuk Mate dan varian Ubuntu lainnya

Meskipun pertanyaan awalnya tentang Ubuntu Mate , untungnya, mulai pukul 15.10, indikator dapat digunakan Matejuga. Akibatnya, jawaban di bawah setidaknya berfungsi untuk Unitydan Matedan (diuji) pada Xubuntu.

GUI untuk mengubah pengaturan masih akan mengikuti (mengerjakannya), tapi saya menguji indikator di bawah ini selama setidaknya 20 jam, dan (seperti yang diharapkan) itu melakukan pekerjaan tanpa kesalahan.

Pilihan

Indikator menawarkan opsi berikut:

  • Tampilkan waktu tekstual

    masukkan deskripsi gambar di sini

  • Tampilkan "area-hari" tekstual ( malam , pagi , siang , malam )

    masukkan deskripsi gambar di sini

  • Tunjukkan pagi / sore

    masukkan deskripsi gambar di sini

  • Perlihatkan semuanya sekaligus (atau kombinasi ketiganya)

    masukkan deskripsi gambar di sini

  • Ucapkan waktu setiap seperempat jam ( espeakwajib)

  • Secara opsional, waktu ditampilkan fuzzy ; dibulatkan pada lima menit, mis.
    10:43 -> quarter to eleven.

Script, modul dan ikon

Solusinya ada skrip, modul terpisah dan ikon, yang perlu Anda simpan dalam satu dan direktori yang sama .

Ikon:

masukkan deskripsi gambar di sini

Klik kanan dan simpan sebagai (tepatnya) indicator_icon.png

Modul:

Ini adalah modul yang menghasilkan waktu tekstual dan semua informasi yang ditampilkan lainnya. Salin kode, simpan sebagai (lagi, persis ) tcalc.py, bersama dengan ikon di atas dalam satu dan direktori yang sama .

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

Naskah:

Ini adalah indikator yang sebenarnya. Salin kode, simpan sebagai moderntimes.py, bersama dengan ikon dan modul di atas dalam satu dan direktori yang sama .

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

Cara Penggunaan

  1. Kebutuhan skrip espeak:

    sudo apt-get install espeak
    
  2. Salin ketiga file di atas ke dalam satu dan direktori yang sama, persis dinamai seperti yang ditunjukkan dalam Skrip, modul, dan ikon

  3. Di kepala skrip ( moderntimes.py), tentukan informasi mana yang harus ditampilkan, dan bagaimana. Cukup atur Trueatau Falsedi baris:

    # --- 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. Di kepala modul , Anda dapat mengubah jam kapan memulai selanjutnya pagi , siang , sore , malam , di baris:

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

    Jangan menyentuh apa pun di skrip untuk saat ini :)

  5. Pengguna Ubuntu Mate perlu mengaktifkan penggunaan indikator pada sistem mereka: pilih System> Preferences> Look and feel> Mate tweak> Antarmuka> "Aktifkan indikator"

    masukkan deskripsi gambar di sini

  6. Jalankan indikator dengan perintah:

    python3 /path/to/moderntimes.py
    

Menjalankannya dari Aplikasi Startup

Ingat bahwa jika Anda menjalankan perintah dari Aplikasi Startup, dalam banyak kasus Anda perlu menambahkan sedikit istirahat, terutama (antara lain) pada indikator:

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

Catatan

  • Tidak diragukan lagi skrip akan diubah / diperbarui dalam beberapa hari ke depan berkali-kali. Satu hal yang saya suka umpan balik pada khususnya adalah "gaya" di mana waktu digital diubah menjadi waktu tekstual. Cara itu dilakukan sekarang:

    • jam penuh, misalnya:

      six o'clock
      
    • kurang dari 30 menit setelah jam kerja, mis

      twenty past eleven
      
    • 30 menit setelah jam mis:

      half past five
      
    • lebih 30 menit misalnya:

      twenty to five
      
    • 15 menit disebutkan quarter, misalnya:

      quarter past six
      
    • pengecualian adalah tengah malam, yang tidak disebut zero, tetapi midnight, misalnya:

      quarter past midnight
      
  • Skripnya sangat rendah jus, karena fakta bahwa setelah loop timecheck pertama, loop disinkronkan pada jam komputer secara otomatis. Oleh karena itu skrip memeriksa waktu / mengedit waktu yang ditampilkan hanya sekali per menit, tidur sisa waktu.


Edit

Per hari ini (2016-4-9), ppa dari versi yang dipoles tersedia. Untuk menginstal dari ppa:

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

Periode hari dalam versi ini diubah, dibandingkan dengan versi skrip di atas, sekarang adalah:

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

... dan indikator memiliki opsi untuk mengubah ikon di siang hari:
pagi / siang / malam / malam :masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Seperti disebutkan, versi ini diuji pada keduanya Mate(dari pertanyaan awal) Unitydan Xubuntu.

masukkan deskripsi gambar di sini

Yakub Vlijm
sumber
1
Saya akan mengatakan: fuzzy berarti Anda tidak akurat. Jadi 15:12 hingga 15:23 atau lebih tepatnya jam tiga lewat seperempat. Saya akan mengatakan hanya menggunakan: 5/10 / seperempat / setengah jam / untuk jam. Itu tidak disebut fuzzy untuk apa-apa.
Rinzwind
Namun jawaban luar biasa lainnya. Saya harap ini terintegrasi ke dalam AKP Anda .... :)
Parto
@Parto wow terima kasih lagi :) Saya pasti akan membuat ppa untuk yang satu ini :)
Jacob Vlijm
1

Jika Anda memiliki Kubuntu (distro Ubuntu Plasma Desktop), Anda memiliki widget bawaan yang disebut "fuzzy clock" - sudah ada setidaknya sejak 14,04, atau sejak Plasma 4 keluar, dan masih dalam Plasma 5 seperti yang ditemukan di Kubuntu 16.04.

Fuzzy Clock dapat disetel "seakurat" dengan peningkatan lima menit, seperti membaca jam analog (katakanlah, "sepuluh setelah empat"), tetapi juga memiliki tiga pengaturan "fuzzier", salah satunya memberikan bacaan seperti "siang" dan yang hanya memberi "Akhir Pekan!" (pada hari Minggu sore - saya kira itu akan mengatakan "Senin" besok).

Saya tidak tahu apakah jam fuzzy tersedia dalam rasa Ubuntu lainnya - saya melihatnya di xfce (seperti yang ditemukan di Xubuntu) pada sistem saya, tetapi OS diinstal sebagai Kubuntu, jadi saya tidak yakin apakah jam fuzzy adalah asli xfce serta KDE / Plasma, juga tidak tersedia di Unity atau Mate.

Zeiss Ikon
sumber