우분투를위한 퍼지 시계


9

오래 전에, 나는 아침, 낮, 저녁, 밤과 같은 것을 시간을 내기 위해 패널 앱에서 시계를 설정했습니다. 매우 구체적이지 않은 광범위한 스트로크 KDE 데스크톱 일 수 있습니다. 나는 지금 우분투 메이트에 있는데, 메이트 패널 에서이 모호한 시간 설명을 얻는 방법이 있습니까?


1
도움이된다면,이 퍼지 시계라고
Dmiters

도움이됩니다. :)
j0h

1
소스 코드는 다음과 같습니다. code.google.com/archive/p/fuzzy-clock 이제 앱으로 만들려면 @jacobvlijm이 필요합니다.>
:-D

패널 앱을 만들기 위해 Mate-University를 읽기 시작했습니다. 이런 식으로 프로그래밍 할 수 있다고 확신하지만 패널 앱으로 만드는 방법에 대한 단서가 없습니다.
j0h

1
이것은 KDE에 있었고 나는 이것을 확신하며 번역되었습니다!
Antek

답변:


15

Mate 기타 우분투 변형에 대한 텍스트 / 말하기 시계

운 좋게도 15.10부터 우분투 메이트 에 대한 질문이 있었지만 지표를 사용할 수도 있습니다 Mate. 그 결과, 아래의 대답은 적어도이 작동 Unity하고 Mate및에 (테스트) Xubuntu.

설정을 변경하는 GUI는 여전히 따라야하지만 (작동 중) 적어도 20 시간 동안 아래 표시기를 테스트했으며 (예상대로) 오류없이 작업을 수행했습니다.

옵션

표시기는 다음과 같은 옵션을 제공합니다.

  • 문자 시간 표시

    여기에 이미지 설명을 입력하십시오

  • 텍스트 "주요 지역"을 보여줍니다 ( , 아침 , , 저녁 )

    여기에 이미지 설명을 입력하십시오

  • 오전 / 오후 표시

    여기에 이미지 설명을 입력하십시오

  • 한 번에 모두 표시 (또는이 3 가지 조합)

    여기에 이미지 설명을 입력하십시오

  • 매 분기마다 시간을 말하십시오 ( 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 모듈과 함께 하나의 동일한 디렉토리에 코드를 복사하여로 저장하십시오 .

#!/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. 스크립트 헤드 ( 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
  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
      
    • 예외는 자정이며이라고 불리지 zero않지만 다음 midnight과 같습니다.

      quarter past midnight
      
  • 스크립트는 첫 번째 timecheck-loop 후 루프가 컴퓨터 시계에서 자동으로 동기화되기 때문에 주스가 매우 적습니다. 따라서 스크립트는 시간을 확인하고 표시된 시간을 분당 한 번만 편집하고 나머지 시간은 잠자 게합니다.


편집하다

오늘 (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을 지난 분기 일 것입니다. 5 / 10 / quarter / half past / to hour 만 사용하면됩니다. 아무것도 퍼지라고 부르지 않습니다.
Rinzwind

또 다른 멋진 답변. 이것이 귀하의 PPA에 통합되기를 바랍니다 .... :)
Parto

@Parto 와우 다시 한 번 감사드립니다 :) 나는 확실히 이것에 대한 PPA를 만들 것입니다 :)
Jacob Vlijm

1

Kubuntu (Plasma Desktop Ubuntu 배포판)를 사용하는 경우 "퍼지 시계"라는 내장 위젯이 있습니다. 최소 14.04 이후이거나 플라스마 4가 나오기 오래 전부터 여전히 플라스마 5에 있습니다. 쿠분투 16.04에 나와 있습니다.

퍼지 시계는 아날로그 시계를 읽는 것처럼 (예 : "10 이후") 5 분 단위로 "정확한"값으로 설정할 수 있지만 3 개의 "후지"설정이 있으며 그 중 하나는 "오후"와 같은 판독 값을 제공합니다. 그리고 "주말!" (일요일 오후에는 내일 "월요일"이라고 가정합니다).

퍼지 시계가 다른 우분투 풍미에서 사용할 수 있는지 모르겠습니다. 시스템의 Xfuntu에서 (Xubuntu에서 찾은) 그것을 보았지만 OS가 Kubuntu로 설치되었으므로 퍼지 시계가 있는지 확실하지 않습니다. xfce뿐만 아니라 KDE / Plasma에 기본적으로 제공되며 Unity에서 사용할 수 있는지 또는 Mate에서 사용할 수 있는지 여부입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.