Нечіткі годинники для Ubuntu


9

Дуже давно у мене було встановлено годинник, щоб говорити такі речі, як ранок, день, вечір, ніч, час у програмі на панелі. Широкий хід, не дуже специфічний, це може бути робочий стіл KDE. Зараз я перебуваю в Ubuntu Mate, чи є спосіб отримати цей розпливчастий опис часу на панелі матерів?


1
якщо це допоможе, це називається нечітким годинником
Дмитрів

Це допомагає. :)
j0h

1
Ось вихідний код: code.google.com/archive/p/fuzzy- clock Тепер нам потрібно @jacobvlijm, щоб перетворити його у додаток>: - D
Rinzwind

Я почав читати Mate-University для виготовлення панельних програм. Я впевнений, що я можу запрограмувати щось подібне, але у мене немає поняття про те, як зробити це панельним додатком
j0h

1
це було в KDE, я впевнений у цьому, і це було також перекладено!
Антек

Відповіді:


15

Текстовий / розмовний годинник для Mate та інших варіантів Ubuntu

Хоча питання спочатку стосувалося Ubuntu Mate , на щастя, з 15.10, індикатори також можна використовувати Mate. В результаті, відповідь нижче , по крайней мере працює Unityі Mateта (перевірено) на Xubuntu.

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

Параметри

Індикатор пропонує такі варіанти:

  • Покажіть текстовий час

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

  • Показати текстовий "денний район" ( ніч , ранок , день , вечір )

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

  • Покажіть ранку / вечора

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

  • Показати їх усі одразу (або будь-яку комбінацію трьох)

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

  • Розмовляйте час кожні чверть години ( espeakобов’язково)

  • За бажанням час відображається нечітко ; округлюється на п'ять хвилин, наприклад,
    10:43 -> quarter to eleven.

Сценарій, модуль та значок

Рішення існує у сценарії, окремому модулі та піктограмі, які потрібно зберігати в одній і тій же директорії .

Піктограма:

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

Клацніть правою кнопкою миші та збережіть її (точно) indicator_icon.png

Модуль:

Це модуль, який виробляє текстовий час та всю іншу відображену інформацію. Скопіюйте код, збережіть його як (знову ж таки саме ) 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]

Сценарій:

Це фактичний показник. Скопіюйте код, збережіть його як moderntimes.pyі разом із піктограмою та модулем вище в одному і тому ж каталозі .

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

Як користуватись

  1. Сценарій потребує espeak:

    sudo apt-get install espeak
    
  2. Скопіюйте всі три вищевказані файли в один і той же каталог, точно названий так, як зазначено в сценарії, модулі та піктограмі

  3. У голові скрипту ( moderntimes.py) визначте, яку інформацію слід відображати та як. Просто встановіть Trueабо Falseв рядку:

    # --- 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. В голові модуля , ви можете змінити годинник , коли почати згодом ранок , день , вечір , ніч , в рядку:

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

    На даний момент не торкайтеся нічого іншого в сценарії :)

  5. Користувачам Ubuntu Mate потрібно ввімкнути використання індикаторів у своїй системі: виберіть Система> Налаштування> Вигляд і відчуття> Mate tweak> Інтерфейс> "Увімкнути індикатори"

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

  6. Запустіть індикатор командою:

    python3 /path/to/moderntimes.py
    

Запускається з програм запуску

Пам'ятайте, що якщо ви запускаєте команду із запуску програм, у багатьох випадках вам потрібно додати невелику перерву, особливо (серед інших) щодо показників:

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

Примітки

  • Без сумніву, сценарій буде змінено / оновлено протягом найближчих кількох днів багато разів. Одне, про що я хотів би отримати відгук, зокрема, це "стиль", в якому цифровий час перетворюється на текстовий час. Як це робиться зараз:

    • цілих годин, наприклад:

      six o'clock
      
    • менше 30 хвилин після години, наприклад

      twenty past eleven
      
    • 30 хвилин після години, наприклад:

      half past five
      
    • більше 30 хвилин, наприклад:

      twenty to five
      
    • Згадується 15 хвилин quarter, наприклад:

      quarter past six
      
    • Виняток - опівночі, які не називаються zero, але midnight, наприклад:

      quarter past midnight
      
  • Сценарій надзвичайно низький, ніж через сік, через те, що після першого циклу перевірки цикл циклічно синхронізується на комп'ютерному годиннику. Тому сценарій перевіряє час / редагує відображений час лише один раз на хвилину, сплячи решту часу.


Редагувати

Станом на сьогодні (2016-4-9) доступна версія відшліфованої версії PPA. Щоб встановити з ppa:

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

Періоди днів у цій версії змінені, порівняно з версією сценарію, наведеною вище, тепер це:

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

... і індикатор має можливість змінити піктограму вдень:
вранці / вдень / ввечері / вночі :введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення

Як уже згадувалося, ця версія була протестована як Mate(з оригінального питання), так Unityі Xubuntu.

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


1
Я б сказав: нечіткий означає, що ви можете бути неточними. Отже, 15:12 до 15:23 або так би було чверть минулого. Я б сказав просто використовувати: 5/10 / чверть / пів на минулу / годину. Це не називається не дарма.
Rinzwind

Ще одна дивовижна відповідь. Я сподіваюся, що це інтегрується у ваш PPA .... :)
Парто

@Parto wow дякую ще раз :) Я обов'язково створять таку програму для цього :)
Jacob Vlijm

1

Якщо у вас є Kubuntu (Plasma Desktop Ubuntu distro), у вас є вбудований віджет під назвою "нечіткий годинник" - він існував щонайменше з 14.04, або так довго, як вийшов Plasma 4, і він все ще знаходиться в Plasma 5 як знайдено в Kubuntu 16.04.

Нечіткий годинник може бути таким же "точним", як і п'ятихвилинні кроки, як читання аналогового годинника (скажімо, "десять після чотирьох"), але він також має три "нечіткі" настройки, одне з яких дає показання типу "полудень" і такий, який просто дає "Вихідні!" (в неділю вдень - я припускаю, що завтра скажу "понеділок").

Я не знаю, чи доступні нечіткі годинники в інших ароматах Ubuntu - я бачив це в xfce (як це знайдено в Xubuntu) в моїй системі, але ОС була встановлена ​​як Kubuntu, тому я не впевнений, чи нечіткий годинник Народжений для xfce, а також KDE / Плазми, а також чи доступний він в Unity або Mate.

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