怎么寫一個Sublime的插件(2)
現(xiàn)場直播, 和大家一起寫一個Sublime的插件.
寫一個什么插件呢?
平時用PlainTasks來細分一天的工作, 但是沒有提醒功能.
想找一個定時器類的插件, github上搜到的都不太好用.
所以, 自己寫一個.
因為現(xiàn)場直播, 插件可能還沒寫好.
https://github.com/FloydaGitHub/WorkTime
https://coding.net/u/Floyda/p/WorkTime/git
參考資料
需要管理時間, 所以我們做一個"心跳線程"
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 --