sublime插件开发教程(附源码)

sublime插件开发教程(附源码)1.背景       虽然可能大神门在编辑器方面都比较偏向于vim之类的自由度更高的工具,但是从我个人来讲sublime这样的插件安装更方便的工具还是比较得心应手的。之前用sublime写英语作文,但是没有一个比较好用的timer,Package_Control里面的track_timer不能实时显示时间,所以博主就自己动手,写了这个插件,可以实时timer,记录时间。效果如下图,2.使

大家好,又见面了,我是你们的朋友全栈君。

1.背景

     
   
   虽然可能大神门在编辑器方面都比较偏向于vim之类的自由度更高的工具,但是从我个人来讲sublime这样的插件安装更方便的工具还是比较得心应手的。之前用sublime写英语作文,但是没有一个比较好用的timer,Package_Control里面的track_timer不能实时显示时间,所以博主就自己动手,写了这个插件,可以实时timer,记录时间。效果如下图,
sublime插件开发教程(附源码)


2.使用

 
   
使用起来很方便,只要把下载好的sublime-timer文件夹放在下图这个路径下即可。
sublime插件开发教程(附源码)

    可以用快捷键方便的对timer进行操作:
          “control+alt+t”: start timer
          “control+alt+p”: pause or stop timer
          “control+alt+z”: make zero

3.制作过程  


(1)环境

   
       开发sublime插件用到的是python语言,因为要用到sublime内置的sublime和sublime_plugin库,所以debug和调试都应该在sublime里面。
下面的链接是sublime的库得参数信息:http://www.sublimetext.com/docs/2/api_reference.html


(2)自带example     


      如果不习惯看开发文档,可以参考下以下example的开发(下面参考自http://www.welefen.com/how-to-develop-sublime-text-plugin.html)。

1、通过Tools -> New Plugin…来打开一个初始化的插件编辑文件,它将有如下的内容:

import sublime, sublime_plugin
class ExampleCommand(sublime_plugin.TextCommand):
 def run(self, edit):
 self.view.insert(edit, 0, "Hello, World!")

2、通过Preferences -> Browse Packages…打开Packages文件夹,在该文件夹下建立个子文件夹,名字为你想开发的插件名字,如:KeymapManager。回到插件开发的初始化编辑器页面,通过ctrl+s (Windows/Linux) orcmd+s (OS X)保存这个文件,并放到你建立的子文件夹下,文件名如:KeymapManager.py

3、通过ctrl+`快捷键打开SublimeText的控制台,执行如下的命令:

view.run_command('example')

如果你在当前文件最前面看到插入了Hello, Word!,那表明插件执行成功了。

4、ExampleCommand名字改为你想要的插件名字,如: KeymapmanagerCommand,然后就可以开发该插件对应的功能了。

5、通过官方的API文档查找你需要的接口,文档见:http://www.sublimetext.com/docs/2/api_reference.html

 (3)sublime-timer


     这个就是我开发的sublime-timer,比example会复杂一些。大家可以参照以下代码:

import sublime, sublime_plugin
import threading  
import time

i=0

class 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 = num
        self.interval = interval
        self.thread_stop = False 
    def run(self): #Overwrite run() method, put what you want the thread do here
        global i
        while not self.thread_stop:
            sublime.set_timeout(write_time,1)
            i+=1  
            time.sleep(self.interval)          
    def pause(self):        
        self.thread_stop = True
    
    def zero(self):
        global i
        i=0    



thread1 = timer(1, 1)
class gtimerCommand(sublime_plugin.TextCommand):    
    def run(self, edit):
        global thread1
        thread=timer(1,1) 
        if thread1.isAlive():
            live=True
        else:                               
            thread.start()
            thread1=thread

class gtimerpauseCommand(sublime_plugin.TextCommand):    
    def run(self, edit):         
        global thread1
        thread1.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
          

三个command class,分别对应着上面提到的三个快捷键,这个对应关系可以在另外的keymap文件中定义,大家可以把整个项目clone下来就看到了。



    (4)发布

  

      如果你做好了一个个性插件想让更多的朋友使用的话可以试试以下两种途径。

1.可以给https://github.com/SublimeText发email

2.可以给https://github.com/wbond/package_control_channelpull issue(有一个文档,流程比较麻烦)



项目地址:https://github.com/jimenbian/sublime-timer(fork完别忘了给个star)
好了,看到这里大家应该已经对插件制作有些了解了,动起手来吧!


/********************************

* 本文来自博客  “李博Garvin“

* 转载请标明出处:http://blog.csdn.net/buptgshengod

******************************************/


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152696.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • stress模拟CPU使用100%

    stress模拟CPU使用100%(1)安装stress解压:tar-xzvfstress-1.0.4.tar.gz./configuremakemakeinstall默认安装在/usr/local/bin目录下:(2)使用stress模拟CPU使用100%先使用top看下CPU使用情况,基本空闲。使用stress模拟CPU使用100%:stress-c8-t100再次使用top查看CPU使用情况,可以看到us使用100%了。vmstat查看运行前

    2025年6月10日
    3
  • java求最大公约数

    java求最大公约数

    2021年7月15日
    59
  • mysql 幂等(什么是幂等性)

    一、什么是幂等?幂等性:多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。二、使用幂等的场景1、前端重复提交用户注册,用户创建商品等操作,前端都会提交一些数据给后台服务,后台需要根据用户提交的数据在数据库中创建记录。如果用户不小心多点了几次,后端收到了好几次提交,这时就会在数据库中重复创建了多条记录。这就是接口没有幂等性带来的bug。2、接口超时重试对于给第三方调…

    2022年4月10日
    89
  • 猿创征文|点亮JAVA技术之灯(线程篇)「建议收藏」

    猿创征文|点亮JAVA技术之灯(线程篇)「建议收藏」线程安全就是说多线程访问同一段代码,不会产生不确定的结果。又是一个理论的问题,各式各样的答案有很多,我给出一个个人认为解释地最好的:如果你的代码在多线程下执行和在单线程下执行永远都能获得一样的结果,那么你的代码就是线程安全的。(1)不可变像String、Integer、Long这些,都是final类型的类,任何一个线程都改变不了它们的值,要改变除非新创建一个,因此这些不可变对象不需要任何同步手段就可以直接在多线程环境下使用(2)绝对线程安全不管运行时环境如何,调用者都不需要额外的同步措施。……….

    2025年8月23日
    7
  • app产品设计流程_APP流程图

    app产品设计流程_APP流程图App设计流程第一步、从APP产品需求入手,考虑我们到底要用什么主色调根据产品定位和目标用户群体选择主色调定好尺寸:设计尺寸是多大,是以640*1136设计还是750*1136还是1242*2208来设计。所有APP设计尺寸大小规范:http://www.25xt.com/appsize   第二步、配色和辅助色用什么颜色在考虑到产品气质和品牌色的同时,我们经常要考虑配合衬托产品主色调的辅助色…

    2022年8月30日
    5
  • psp坏点修复(psp贴吧)

    psp坏点&鉴别液晶坏点  暗点 亮点PC上挑选液晶LCD,借助第3方软件 例如NOKIA MONITOR TESTER 需要指出的是,亮点,暗点,坏点问题是液晶屏幕不可避免的先天性"生理缺陷",一般情况下,3个以下的"点"都是可以接受的.亮点:在黑屏幕情况下单纯地显示一种颜色的点,通常表现为在RED,GREEN,BLUE3种纯色模式下均显示白色.暗点:在R G B3种纯色模式下,均显示为黑色或不

    2022年4月15日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号