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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 状态机编程_vivado状态机

    状态机编程_vivado状态机给定一个长度为 N 的数组,数组中的第 i 个数字表示一个给定股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润,你最多可以完成 k 笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。一次买入卖出合为一笔交易。输入格式第一行包含整数 N 和 k,表示数组的长度以及你可以完成的最大交易数量。第二行包含 N 个不超过 10000 的正整数,表示完整的数组。输出格式输出一个整数,表示最大利润。数据范围1≤N≤105,1≤k≤100输入样例1:3 22

    2022年8月8日
    8
  • 基于51单片机的多功能八路抢答器[通俗易懂]

    基于51单片机的多功能八路抢答器[通俗易懂]1.功能介绍多功能八路抢答器是基于51单片机来设计的,除了可以实现最基本功能——8路抢答外,还具有自动处理犯规选手,抢答时间调整,还可以进行答题,计分,并且可以查询或修改分数。2.硬件设计该抢答器的硬件由五个部分组成,包括单片机、按键电路、数码管显示电路、指示灯电路和声音提示电路。硬件框图如下(2)硬件原理图由于每个部分的硬件电路都比较简单,就不做介绍了,大家直接看图。3.软件设…

    2022年10月20日
    2
  • 理解self,this,parent

    理解self,this,parent

    2021年6月30日
    86
  • 从源码的角度分析mybatis的核心流程(上)

    从源码的角度分析mybatis的核心流程(上)

    2021年8月4日
    57
  • 医咖会SPSS免费教程学习笔记—2*C卡方检验

    医咖会SPSS免费教程学习笔记—2*C卡方检验1.2C卡方检验需要满足的假设:(1)观测变量是二分类变量(2)有多个分组(3)观测值相互独立(4)任意单元格的期望频数大于52.2C卡方检验的组间比较请依次点击:分析—描述统计—交叉表—将变量分别拖入行和列—点击右侧“统计”—选择“卡方”—继续点击右侧“单元格”—选择计数下的“实测”,百分比下的“列”,勾选z检验选择调整p值(邦弗仑尼法)3.结果解读两两比较有无差异,看输出的交叉表中计数下标是否一致。若一致,则无差异;否则,有差异总体有无差异,看输出的卡方检验表格中的显著性水平…

    2022年5月17日
    45
  • 高德地图的组成_高德地图 百科

    高德地图的组成_高德地图 百科高德地图由哪几部分组成

    2022年4月20日
    220

发表回复

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

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