ずいぶん前に、パネルアプリで時間に合わせて朝、昼、夜、夜などのことを言う時計が設定されていました。大まかに言って、あまり具体的ではありませんが、KDEデスクトップだったかもしれません。私は現在Ubuntu Mateにいますが、mateパネルでこのあいまいな時間の説明を取得する方法はありますか?
質問はもともとUbuntu Mateについてでしたが、幸いなことに15.10から、indicatorsもMate
で使用できます。その結果、少なくともの下の答えは、Unity
およびMate
および(テスト済み)Xubuntu
に対して機能します。
設定を変更するためのGUIは引き続き(作業中)ですが、以下のインジケータを少なくとも20時間テストし、(予想どおり)エラーなしでジョブを実行しました。
このインジケータには次のオプションがあります。
テキストの時間を表示する
テキストの「昼間」を表示する(night、morning、day、evening)
午前/午後を表示.
すべてを一度に表示(または3つの任意の組み合わせ)
時間を話す四半期ごと 1時間(espeak
が必要)
オプションで、時刻が表示されますfuzzy; 5分で丸められます。
10:43-> quarter to eleven
。
ソリューションは、スクリプト、個別のモジュール、およびアイコンで構成され、これらをoneと同じディレクトリに保存する必要があります。
アイコン:
それを右クリックし、(正確に)indicator_icon.png
として保存します
モジュール:
これは、テキスト時間と他のすべての表示情報を生成するモジュールです。コードをコピーし、(もう一度、exactly)tcalc.py
として保存し、in oneと同じディレクトリ。
#!/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
として保存し、アイコンとそのモジュールを上記のと共に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()
スクリプトにはespeak
が必要です。
Sudo apt-get install espeak
上記の3つのファイルをすべて、スクリプト、モジュール、およびアイコン
script(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
moduleの先頭で、後で開始する時間を変更できますmorning、day、evening、night、行:
# --- set starttime of morning, day, evening, night (whole hrs)
limits = [6, 9, 18, 21]
# ---
今のところ、スクリプトの他の部分には触れないでください:)
buntu Mateユーザーシステムでインジケーターの使用を有効にする必要があります。[システム]> [設定]> [ルックアンドフィール]> [メイトツィーク]> [インターフェース]> [インジケーターを有効にする]を選択します
次のコマンドでインジケーターを実行します。
python3 /path/to/moderntimes.py
スタートアップアプリケーションから実行する
スタートアップアプリケーションからコマンドを実行する場合、多くの場合、特にインジケーターに(特に)少し休憩を追加する必要があることに注意してください。
/bin/bash -c "sleep 15 && python3 /path/to/moderntimes.py"
スクリプトは今後数日間で何度も変更/更新されることは間違いありません。特にフィードバックが欲しいのは、デジタル時間をテキスト時間に変換する「スタイル」です。現在の方法:
全体の時間、例:
six o'clock
1時間後30分以内、例えば.
twenty past eleven
時間の30分後:例:
half past five
30分以上:
twenty to five
15分がquarter
と記載されています。例:
quarter past six
例外は深夜で、zero
ではなく、midnight
と呼ばれます。例:
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
...また、インジケータには日中にアイコンを変更するオプションがあります:
morning/afternoon/evening/night:
前述のように、このバージョンはMate
(元の質問から)Unity
とXubuntu
の両方でテストされました。
Kubuntu(Plasma Desktop Ubuntu distro)をお持ちの場合は、「ファジークロック」と呼ばれる組み込みウィジェットがあります。これは少なくとも14.04以降、またはPlasma 4がリリースされてからずっと前であり、Plasma 5のままです。 Kubuntu 16.04にあります。
ファジークロックは、アナログ時計の読み取り(たとえば、 "ten after 4")のように5分刻みで "正確"に設定できますが、3つの "ファジー"設定もあり、そのうちの1つは "午後"のような読み取りを提供しますそして、「週末!」 (日曜日の午後-明日は「月曜日」と言います)。
ファジークロックが他のUbuntuフレーバーで利用可能かどうかはわかりません-私のシステムのxfce(Xubuntuにあります)で見ましたが、OSはKubuntuとしてインストールされていたため、ファジークロックが利用可能かどうかわかりませんxfceおよびKDE/Plasmaにネイティブであり、UnityまたはMateで使用可能かどうかも確認できます。