sublime插件开发教程(附源码)
1.背景
? ?雖然可能大神門在編輯器方面都比較偏向于vim之類的自由度更高的工具,但是從我個(gè)人來(lái)講sublime這樣的插件安裝更方便的工具還是比較得心應(yīng)手的。之前用sublime寫英語(yǔ)作文,但是沒(méi)有一個(gè)比較好用的timer,Package_Control里面的track_timer不能實(shí)時(shí)顯示時(shí)間,所以博主就自己動(dòng)手,寫了這個(gè)插件,可以實(shí)時(shí)timer,記錄時(shí)間。效果如下圖,2.使用
? ? ?使用起來(lái)很方便,只要把下載好的sublime-timer文件夾放在下圖這個(gè)路徑下即可。? ? 可以用快捷鍵方便的對(duì)timer進(jìn)行操作: ? ? ? ? ? "control+alt+t": start timer
? ? ? ? ? "control+alt+p": pause or stop timer
? ? ? ? ? "control+alt+z": make zero
3.制作過(guò)程 ?
(1)環(huán)境
? ? ? ? ? ?開(kāi)發(fā)sublime插件用到的是python語(yǔ)言,因?yàn)橐玫絪ublime內(nèi)置的sublime和sublime_plugin庫(kù),所以debug和調(diào)試都應(yīng)該在sublime里面。 下面的鏈接是sublime的庫(kù)得參數(shù)信息:http://www.sublimetext.com/docs/2/api_reference.html(2)自帶example ? ??
? ? ? 如果不習(xí)慣看開(kāi)發(fā)文檔,可以參考下以下example的開(kāi)發(fā)(下面參考自http://www.welefen.com/how-to-develop-sublime-text-plugin.html)。
1、通過(guò)Tools -> New Plugin...來(lái)打開(kāi)一個(gè)初始化的插件編輯文件,它將有如下的內(nèi)容:
import sublime, sublime_plugin class ExampleCommand(sublime_plugin.TextCommand):def run(self, edit):self.view.insert(edit, 0, "Hello, World!")2、通過(guò)Preferences -> Browse Packages...打開(kāi)Packages文件夾,在該文件夾下建立個(gè)子文件夾,名字為你想開(kāi)發(fā)的插件名字,如:KeymapManager?;氐讲寮_(kāi)發(fā)的初始化編輯器頁(yè)面,通過(guò)ctrl+s (Windows/Linux) orcmd+s (OS X)保存這個(gè)文件,并放到你建立的子文件夾下,文件名如:KeymapManager.py
3、通過(guò)ctrl+`快捷鍵打開(kāi)SublimeText的控制臺(tái),執(zhí)行如下的命令:
view.run_command('example')如果你在當(dāng)前文件最前面看到插入了Hello, Word!,那表明插件執(zhí)行成功了。4、ExampleCommand名字改為你想要的插件名字,如: KeymapmanagerCommand,然后就可以開(kāi)發(fā)該插件對(duì)應(yīng)的功能了。
5、通過(guò)官方的API文檔查找你需要的接口,文檔見(jiàn):http://www.sublimetext.com/docs/2/api_reference.html
?(3)sublime-timer
? ? ?這個(gè)就是我開(kāi)發(fā)的sublime-timer,比example會(huì)復(fù)雜一些。大家可以參照以下代碼:
import sublime, sublime_plugin import threading import timei=0class timer(threading.Thread): #The timer class is derived from the class threading.Thread def __init__(self, num, interval):threading.Thread.__init__(self)self.thread_num = numself.interval = intervalself.thread_stop = False def run(self): #Overwrite run() method, put what you want the thread do hereglobal iwhile not self.thread_stop:sublime.set_timeout(write_time,1)i+=1 time.sleep(self.interval) def pause(self): self.thread_stop = Truedef zero(self):global ii=0 thread1 = timer(1, 1) class gtimerCommand(sublime_plugin.TextCommand): def run(self, edit):global thread1thread=timer(1,1) if thread1.isAlive():live=Trueelse: thread.start()thread1=threadclass gtimerpauseCommand(sublime_plugin.TextCommand): def run(self, edit): global thread1thread1.pause()class gtimerzeroCommand(sublime_plugin.TextCommand): def run(self, edit):global thread1 thread1.zero()def write_time():sublime.status_message(time_manage(i))def time_manage(time_number):time_str='time:'+str(time_number/60)+'min '+str(time_number%60)+'s'return time_str
三個(gè)command class,分別對(duì)應(yīng)著上面提到的三個(gè)快捷鍵,這個(gè)對(duì)應(yīng)關(guān)系可以在另外的keymap文件中定義,大家可以把整個(gè)項(xiàng)目clone下來(lái)就看到了。
? ? (4)發(fā)布
?? ? ? ? 如果你做好了一個(gè)個(gè)性插件想讓更多的朋友使用的話可以試試以下兩種途徑。1.可以給https://github.com/SublimeText發(fā)email
2.可以給https://github.com/wbond/package_control_channelpull issue(有一個(gè)文檔,流程比較麻煩)
項(xiàng)目地址:https://github.com/jimenbian/sublime-timer(fork完別忘了給個(gè)star) 好了,看到這里大家應(yīng)該已經(jīng)對(duì)插件制作有些了解了,動(dòng)起手來(lái)吧!
/********************************
* 本文來(lái)自博客 ?“李博Garvin“
* 轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/buptgshengod
******************************************/
總結(jié)
以上是生活随笔為你收集整理的sublime插件开发教程(附源码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: sublime使用笔记
- 下一篇: 明天是我的生日,写给24岁的自己