मेट और अन्य उबंटू वेरिएंट के लिए पाठ / बोलने वाली घड़ी
हालांकि यह सवाल मूल रूप से उबंटू मेट के बारे में था , सौभाग्य से, 15.10 से, संकेतक का भी उपयोग किया जा सकता है Mate
। नतीजतन, नीचे इस सवाल का जवाब कम से कम के लिए काम करता है Unity
और Mate
और (परीक्षण किया) पर Xubuntu
।
सेटिंग्स बदलने के लिए एक GUI अभी भी (इस पर काम कर रहा है) का पालन करना है, लेकिन मैंने कम से कम 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()
कैसे इस्तेमाल करे
स्क्रिप्ट की जरूरत है espeak
:
sudo apt-get install espeak
एक और एक ही डायरेक्टरी में उपरोक्त सभी तीन फाइलों को कॉपी करें, जैसा कि स्क्रिप्ट, मॉड्यूल और एक आइकन में दर्शाया गया है
स्क्रिप्ट के प्रमुख में ( 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
मॉड्यूल के सिर में , आप घंटों को बदल सकते हैं जब बाद में सुबह , दिन , शाम , रात को लाइन में शुरू किया जाए:
# --- set starttime of morning, day, evening, night (whole hrs)
limits = [6, 9, 18, 21]
# ---
अभी स्क्रिप्ट में कुछ और न छुएँ :)
उबंटू मेट उपयोगकर्ताओं को अपने सिस्टम पर संकेतक के उपयोग को सक्षम करने की आवश्यकता है: सिस्टम> वरीयताएँ> देखो और महसूस करें> मेट ट्विक> इंटरफ़ेस> "संकेतक सक्षम करें" चुनें।
कमांड के साथ संकेतक चलाएँ:
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
।