মেট এবং অন্যান্য উবুন্টু ভেরিয়েন্টগুলির জন্য পাঠ্য / বলার ঘড়ি
যদিও প্রশ্নটি মূলত উবুন্টু সাথ সম্পর্কে ছিল , ভাগ্যক্রমে, 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()
ব্যবহারবিধি
স্ক্রিপ্টটির প্রয়োজন espeak
:
sudo apt-get install espeak
উপরের তিনটি ফাইলই এক এবং একই ডিরেক্টরিতে অনুলিপি করুন, ঠিক যেমনটি স্ক্রিপ্ট, মডিউল এবং আইকনটিতে উল্লিখিত হয়েছে named
মাথার দিকে স্ক্রিপ্ট ( 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) অনুসারে, পালিশ করা সংস্করণের পিপিএ উপলব্ধ। পিপিএ থেকে ইনস্টল করতে:
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
।