Нечеткие часы для Ubuntu

Давным-давно у меня были часы, чтобы говорить о времени, как день, день, вечер, ночь, время в приложении на панели. Широкий штрих, не очень специфичный, Это мог быть рабочий стол KDE. Сейчас я нахожусь в Ubuntu Mate, есть ли способ получить это смутное описание времени на панели помощников?

9
задан 1 April 2016 в 17:36

2 ответа

Текстовый / говорящий часы за Помощника и другие варианты Ubuntu

Хотя вопрос был первоначально о Помощнике Ubuntu, к счастью, от 15,10, индикаторы могут использоваться на Mateтакже. В результате ответ ниже, по крайней мере, работает на Unity и Mate и (протестированный) на Xubuntu.

GUI для изменения настроек должен все еще следовать (работающий над ним), но я протестировал индикатор ниже в течение по крайней мере 20 часов, и (как ожидалось) это сделало задание без ошибки.

Опции

Индикатор предлагает следующие опции:

  • Покажите текстовое время

    enter image description here

  • Покажите текстовую "дневную область" (ночь, утро, день, вечер)

    enter image description here

  • Покажите утра / пополудни.

    enter image description here

  • Покажите всем им сразу (или любая комбинация трех)

    enter image description here

  • Выскажитесь время каждая четверть часа (espeak требуемый)

  • Дополнительно, время отображено нечеткое; округленный на пяти минутах, например.
    10:43-> quarter to eleven.

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

Решение существует сценария, отдельного модуля и значка, который необходимо сохранить в одном и том же каталоге.

Значок:

enter image description here

Прямо на нем и сохраняют его как (точно) 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, вместе со значком и th модулем выше в одном и том же каталоге.

#!/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 должны включить использование индикаторов в их системе: выберите System> Preferences> Стиль> тонкая настройка Помощника>, Интерфейс> "Включает индикаторы"

    enter image description here

  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
      
  • Сценарий является чрезвычайно низким на соке, вследствие того, что после первого timecheck-цикла, цикл синхронизируется на компьютерных часах автоматически. Поэтому сценарий проверяет время/редактирования отображенное время только однажды в минуту, остальная часть сна времени.


Править

Согласно сегодня (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

... и индикатор имеет tho опцию изменить значок во время дневного времени:
утро/день/вечер/ночь: enter image description here enter image description here enter image description here enter image description here

Как упомянуто, эта версия была протестирована на обоих Mate (от исходного вопроса) Unity и Xubuntu.

enter image description here

15
ответ дан 2 April 2016 в 03:36

Если у Вас есть Kubuntu (Плазменный Рабочий стол дистрибутив Ubuntu), у Вас есть встроенный виджет, названный "нечеткие часы" - это было вокруг, по крайней мере, с тех пор 14.04, или все время, сколько Плазма 4 отсутствовала, и это находится все еще в Плазме 5, как найдено в Kubuntu 16.04.

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

я не знаю, доступны ли нечеткие часы в других разновидностях Ubuntu - я видел его в xfce (как найдено в Xubuntu) в моей системе, но ОС была установлена как Kubuntu, таким образом, я не уверен, являются ли нечеткие часы собственными к xfce, а также KDE/Plasma, ни доступно ли это в Единице или Помощнике.

1
ответ дан 2 April 2016 в 03:36

Другие вопросы по тегам:

Похожие вопросы: