Ubuntuのファジー時計


9

昔、私は、時計を設定して、朝、昼、夕、夜などの時間をパネルアプリで表示していました。大まかに言うと、それほど具体的ではありません。KDEデスクトップであった可能性があります。私は今Ubuntu Mateにいます、メイトパネルでこの漠然とした時間の説明を取得する方法はありますか?


1
それが役立つ場合、これはファジークロックと呼ばれます
Dmiters

それは役立ちます。:)
j0h 2016年

1
ここではソースコードは次のとおりです。code.google.com/archive/p/fuzzy-clockは 今はアプリにそれを作るために@jacobvlijm必要が>: - D
Rinzwind

パネルアプリを作るためにメイト大学を読み始めました。私はこのようなものをプログラムできると確信していますが、それをパネルアプリにする方法についての手がかりはありません
j0h

1
これはKDEにありましたが、確かにこれも翻訳されています!
ANTEK

回答:


15

Mate およびその他のUbuntuバリアントのテキスト/スピーキングクロック

質問はもともとUbuntu Mateに関するものでしたが、幸いにも15.10以降、インジケーターを使用することもできますMate。その結果、以下の回答少なくともはのために働きますUnityMateし、(テスト)でXubuntu

設定を変更するためのGUIは従います(作業中です)が、少なくとも20時間は以下のインジケーターをテストしました。

オプション

インジケーターには次のオプションがあります。

  • テキストの時間を表示する

    ここに画像の説明を入力してください

  • テキストの「デイエリア」を表示します(

    ここに画像の説明を入力してください

  • 午前/午後を表示

    ここに画像の説明を入力してください

  • それらのすべてを一度に表示する(または3つの任意の組み合わせ)

    ここに画像の説明を入力してください

  • 15 分ごとに時間を話します(espeak必須)

  • オプションで、時間はあいまいに表示されます。5分で丸めます。例:
    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、上記のアイコンとthモジュールを1つの同じディレクトリに保存します。

#!/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つのファイルすべてを1つの同じディレクトリにコピーします。スクリプト、モジュール、およびアイコンに示されているとおりに正確に名前を付けます。

  3. スクリプトの先頭(moderntimes.py)で、表示する情報とその方法を定義します。単に設定するTrueFalse、行に:

    # --- 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ユーザーは、システムでインジケーターの使用を有効にする必要があります。[システム]> [設定]> [ルックアンドフィール]> [メイトツイーク]> [インターフェース]> [インジケーターを有効にする]を選択します。

    ここに画像の説明を入力してください

  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
      
    • 例外は真夜中です。これは呼び出されませんzeromidnight、例:

      quarter past midnight
      
  • 最初のtimecheck-loopの後で、ループがコンピューターのクロックで自動的に同期されるため、スクリプトは非常に不足しています。したがって、スクリプトは時間をチェックし、表示された時間を1分に1回だけ編集し、残りの時間はスリープします。


編集する

今日(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までは3時4分過ぎになります。私は、次のように使用します。あいまいとは呼ばれません。
Rinzwind 2016

さらに別の素晴らしい答え。私は....これはあなたのPPAに統合されます願っています:)
Parto

@Partoすごく感謝します:)私は間違いなくこの1つのppaを作成します:)
Jacob Vlijm

1

Kubuntu(Plasma Desktop Ubuntuディストリビューション)を使用している場合は、「ファジークロック」と呼ばれる組み込みウィジェットがあります。少なくとも14.04以降、またはプラズマ4がリリースされてプラズマ5に含まれているのと同じくらい前から使用されています。 Kubuntu 16.04で見つかりました。

ファジークロックは、アナログクロックの読み取りのように、5分単位で(たとえば、「10の後に4」のように)「正確」に設定できますが、3つの「ファジー」設定もあり、そのうちの1つは「午後」のように読み取ります。そして、「週末!」(日曜日の午後-明日は "月曜日"となると思います)。

ファジークロックが他のUbuntuフレーバーで利用可能かどうかはわかりません-システムのxfce(Xubuntuにあります)で見ましたが、OSはKubuntuとしてインストールされているため、ファジークロックが機能しているかどうかはわかりませんxfceとKDE / Plasmaにネイティブで、UnityとMateのどちらでも利用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.