怎么寫一個Sublime的插件(2)

怎么寫一個Sublime的插件(2)

現(xiàn)場直播, 和大家一起寫一個Sublime的插件.

寫一個什么插件呢?

平時用PlainTasks來細分一天的工作, 但是沒有提醒功能.
想找一個定時器類的插件, github上搜到的都不太好用.
所以, 自己寫一個.

因為現(xiàn)場直播, 插件可能還沒寫好.
https://github.com/FloydaGitHub/WorkTime
https://coding.net/u/Floyda/p/WorkTime/git

參考資料

API

需要管理時間, 所以我們做一個"心跳線程"

import sublime, sublime_plugin


class TimeManager():
    def __init__(self):
        self.thread_flag = False
        self.total_time = 0

    # 心跳函數(shù)
    def tick(self):
        # 線程開關(guān)
        if self.thread_flag is False:
            return

        self.total_time += 1
        sublime.status_message(str(self.total_time)) 
        sublime.set_timeout_async(self.tick, 1000) # 1秒之后, 再次回調(diào)自己, 達到心跳的效果.

    def start(self):
        self.thread_flag = True
        sublime.set_timeout_async(self.tick, 0) # 異步延時回調(diào), 啟動心跳線程.


time_manager = TimeManager()


class ExampleCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        time_manager.start()

再次啟動插件, F1, 看左下角的狀態(tài)欄, 一個計時器就做好了:)

做一個番茄時間的計時器

import sublime, sublime_plugin


class TimeManager():
    def __init__(self):
        self.thread_flag = False
        self.total_time = 0

    def tick(self):
        if self.thread_flag is False:
            return

        # if self.total_time >= 60 * 25: # 番茄時間為25分鐘.
        if self.total_time >= 3:
            self.stop()
            sublime.message_dialog("Have a rest!") # 彈出一個消息框.
            return

        self.total_time += 1
        sublime.status_message(str(self.total_time)) 
        sublime.set_timeout_async(self.tick, 1000) 

    def start(self):
        self.thread_flag = True
        sublime.set_timeout_async(self.tick, 0) 

    def stop(self):
        self.total_time = 0
        self.thread_flag = False

time_manager = TimeManager()


class ExampleCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        time_manager.start()

在狀態(tài)欄顯示時間進度

import sublime, sublime_plugin


class TimeManager():
    def __init__(self):
        self.thread_flag = False
        self.total_time = 0
        # self.finish_time = 60 * 25
        self.finish_time = 5

    def tick(self):
        if self.thread_flag is False:
            return

        self.show_status()

        if self.total_time >= self.finish_time:
            self.stop()
            sublime.message_dialog("Have a rest!")
            return

        self.total_time += 1
        # sublime.status_message(str(self.total_time)) 
        sublime.set_timeout_async(self.tick, 1000) 

    def start(self):
        self.thread_flag = True
        sublime.set_timeout_async(self.tick, 0) 

    def stop(self):
        self.total_time = 0
        self.thread_flag = False
        sublime.status_message('')

    def show_status(self):
        progress = int(self.total_time / self.finish_time * 100)
        msg = "|" + \
            progress * "-" + \
            "o" + \
            (100 - progress) * "-" + \
            "|"

        sublime.status_message(msg)

time_manager = TimeManager()


class ExampleCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        time_manager.start()

基本上, 一個番茄時間的插件就做好了.
最好自己動手寫一次, 邊寫邊調(diào)試.

-- Floyda --

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容