Đồng hồ mờ cho Ubuntu


9

Cách đây rất lâu, tôi có một chiếc đồng hồ được thiết lập để nói những thứ như sáng, ngày, tối, đêm, dành cho thời gian trong một ứng dụng bảng điều khiển. Nét rộng, không đặc biệt lắm, Nó có thể là một máy tính để bàn KDE. Bây giờ tôi đang ở trong Ubuntu Mate, có cách nào để có được mô tả thời gian mơ hồ này trong bảng điều khiển bạn đời không?


1
nếu nó giúp, đây được gọi là đồng hồ mờ
Dmiters 28/03/2016

Nó giúp. :)
j0h

1
Đây là mã nguồn: code.google.com/archive/p/fuzzy-clock Bây giờ chúng tôi cần @jacobvlijm để biến nó thành một ứng dụng>: - D
Rinzwind

Tôi bắt đầu đọc Mate-University để làm các ứng dụng bảng điều khiển. Tôi chắc chắn rằng tôi có thể lập trình một cái gì đó như thế này, nhưng tôi không biết làm thế nào để biến nó thành một ứng dụng bảng điều khiển
j0h

1
đây là trong KDE, tôi chắc chắn về điều này và cũng đã được dịch!
Antek

Câu trả lời:


15

Đồng hồ văn bản / nói cho Mate các biến thể Ubuntu khác

Mặc dù câu hỏi ban đầu là về Ubuntu Mate , nhưng may mắn thay, từ 15.10, các chỉ số cũng có thể được sử dụng Mate. Kết quả là, câu trả lời dưới đây ít nhất hoạt động cho UnityMatevà (đã kiểm tra) trên Xubuntu.

Một GUI để thay đổi cài đặt vẫn phải tuân theo (hoạt động trên nó), nhưng tôi đã thử nghiệm chỉ báo bên dưới trong ít nhất 20 giờ và (như mong đợi) nó đã thực hiện công việc mà không gặp lỗi.

Tùy chọn

Chỉ báo cung cấp các tùy chọn sau:

  • Hiển thị thời gian văn bản

    nhập mô tả hình ảnh ở đây

  • Hiển thị văn bản "khu vực ban ngày" ( đêm , sáng , ngày , tối )

    nhập mô tả hình ảnh ở đây

  • Hiển thị sáng / chiều

    nhập mô tả hình ảnh ở đây

  • Hiển thị tất cả chúng cùng một lúc (hoặc bất kỳ kết hợp nào của ba)

    nhập mô tả hình ảnh ở đây

  • Nói ra thời gian mỗi quý một giờ ( espeakbắt buộc)

  • Tùy chọn, thời gian được hiển thị mờ ; làm tròn trên năm phút, ví dụ
    10:43 -> quarter to eleven.

Kịch bản, mô-đun và một biểu tượng

Giải pháp tồn tại của một tập lệnh, một mô-đun riêng biệt và một biểu tượng mà bạn cần lưu trữ trong một và cùng một thư mục .

Biểu tượng:

nhập mô tả hình ảnh ở đây

Phải bấm vào nó và lưu nó dưới dạng (chính xác) indicator_icon.png

Các mô-đun:

Đây là mô-đun tạo ra thời gian văn bản và tất cả các thông tin được hiển thị khác. Sao chép mã, lưu nó dưới dạng (một lần nữa, chính xác ) tcalc.py, cùng với biểu tượng ở trên trong cùng một thư mục .

#!/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]

Kịch bản:

Đây là chỉ số thực tế. Sao chép mã, lưu nó dưới dạng moderntimes.py, cùng với biểu tượng và mô-đun ở trên trong một và cùng một thư mục .

#!/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()

Cách sử dụng

  1. Kịch bản cần espeak:

    sudo apt-get install espeak
    
  2. Sao chép tất cả ba tệp ở trên vào một và cùng một thư mục, được đặt tên chính xác như được chỉ định trong Tập lệnh, mô-đun và biểu tượng

  3. Trong phần đầu của tập lệnh ( moderntimes.py), xác định thông tin nào sẽ được hiển thị và cách thực hiện. Đơn giản chỉ cần đặt Truehoặc Falsetrong dòng:

    # --- 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. Trong phần đầu của mô-đun , bạn có thể thay đổi giờ khi bắt đầu sau đó sáng , ngày , tối , đêm , trong dòng:

    # --- set starttime of morning, day, evening, night (whole hrs)
    limits = [6, 9, 18, 21]
    # ---
    

    Đừng chạm vào bất cứ điều gì khác trong kịch bản bây giờ :)

  5. Người dùng Ubuntu Mate cần cho phép sử dụng các chỉ báo trên hệ thống của họ: chọn Hệ thống> Tùy chọn> Giao diện> Điều chỉnh Mate> Giao diện> "Bật chỉ báo"

    nhập mô tả hình ảnh ở đây

  6. Chạy chỉ báo bằng lệnh:

    python3 /path/to/moderntimes.py
    

Chạy nó từ các ứng dụng khởi động

Hãy nhớ rằng nếu bạn chạy lệnh từ Ứng dụng khởi động, trong nhiều trường hợp, bạn cần thêm một chút nghỉ, đặc biệt (trong số những người khác) trên các chỉ báo:

/bin/bash -c "sleep 15 && python3 /path/to/moderntimes.py"

Ghi chú

  • Không có nghi ngờ kịch bản sẽ được thay đổi / cập nhật trong vài ngày tới nhiều lần. Một điều tôi muốn phản hồi cụ thể là "phong cách" trong đó thời gian kỹ thuật số được chuyển đổi thành thời gian văn bản. Cách nó được thực hiện bây giờ:

    • cả giờ, vd:

      six o'clock
      
    • ít hơn 30 phút sau giờ, vd

      twenty past eleven
      
    • 30 phút sau giờ, ví dụ:

      half past five
      
    • hơn 30 phút, vd:

      twenty to five
      
    • 15 phút được đề cập quarter, ví dụ:

      quarter past six
      
    • ngoại lệ là nửa đêm, không được gọi zero, nhưng midnight, vd:

      quarter past midnight
      
  • Kịch bản cực kỳ ít nước trái cây, do thực tế là sau vòng lặp thời gian đầu tiên, vòng lặp được đồng bộ hóa trên đồng hồ máy tính tự động. Do đó, tập lệnh kiểm tra thời gian / chỉnh sửa thời gian hiển thị chỉ một lần mỗi phút, ngủ phần còn lại của thời gian.


Biên tập

Theo ngày hôm nay (2016-4-9), một ppa của phiên bản được đánh bóng có sẵn. Để cài đặt từ ppa:

sudo apt-add-repository ppa:vlijm/abouttime
sudo apt-get update
sudo apt-get install abouttime

Các khoảng thời gian trong ngày trong phiên bản này được thay đổi, so với phiên bản tập lệnh ở trên, bây giờ là:

morning 6:00-12:00
afternoon 12:00-18:00
evening 18:00-24:00
night 24:00-6:00

... và chỉ báo có tùy chọn tho để thay đổi biểu tượng vào ban ngày:
sáng / chiều / tối / đêm :nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Như đã đề cập, phiên bản này đã được thử nghiệm trên cả hai Mate(từ câu hỏi ban đầu) UnityXubuntu.

nhập mô tả hình ảnh ở đây


1
Tôi sẽ nói: mờ có nghĩa là bạn có thể không chính xác. Vì vậy, 15:12 đến 15:23 hoặc lâu hơn sẽ là một phần tư 3. Tôi muốn nói chỉ cần sử dụng: 5/10 / quý / nửa quá khứ / đến giờ. Nó không được gọi là mờ vì không có gì.
Rinzwind

Một câu trả lời tuyệt vời khác. Tôi hy vọng điều này sẽ được tích hợp vào PPA của bạn .... :)
Parto

@Parto wow cảm ơn lần nữa :) Tôi chắc chắn sẽ tạo ppa cho cái này :)
Jacob Vlijm

1

Nếu bạn có Kubfox (bản phân phối Ubuntu cho máy tính để bàn), bạn có một tiện ích tích hợp có tên là "đồng hồ mờ" - nó đã xuất hiện ít nhất từ ​​ngày 14.04, hoặc cách đây khá lâu khi Plasma 4 đã ra mắt và nó vẫn còn trong Plasma 5 như được tìm thấy trong Kubfox 16.04.

Đồng hồ mờ có thể được đặt thành "chính xác" khi tăng năm phút, như đọc đồng hồ analog (giả sử "mười sau bốn"), nhưng nó cũng có ba cài đặt "mờ hơn", một trong số đó cho phép đọc như "chiều" và một cái chỉ cho "Cuối tuần!" (vào một chiều chủ nhật - tôi đoán nó sẽ nói "Thứ Hai" vào ngày mai).

Tôi không biết đồng hồ mờ có sẵn trong các hương vị Ubuntu khác hay không - Tôi đã thấy nó trong xfce (như được tìm thấy trong Xubfox) trên hệ thống của tôi, nhưng HĐH đã được cài đặt là Kubfox, vì vậy tôi không chắc là đồng hồ mờ có có nguồn gốc từ xfce cũng như KDE / Plasma, cũng như không có trong Unity hay Mate.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.