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)
上一篇 2022年6月24日 上午9:36
下一篇 2022年6月24日 上午9:36


相关推荐

  • go实现的redis消息队列

    go实现的redis消息队列go 实现的消息队列 redis queue 支持并发队列支持 Topic Group 注册队列监听消息支持消息异常监听重启队列贴相关核心代码 最后附上 git 链接 消息载体 typeQueuePay IDstring json id IsFastbool json is fast Topicstring json topic Groupstrin

    2026年2月19日
    2
  • n8n打造属于你的开源自动化工作流平台(完整指南)

    n8n打造属于你的开源自动化工作流平台(完整指南)

    2026年3月15日
    2
  • navitecat激活码[最新免费获取]2022.03.11

    (navitecat激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1M…

    2022年3月13日
    158
  • Blob数据类型的使用

    Blob数据类型的使用Blob 数据类型的使用 nbsp nbsp nbsp blob 200 nbsp nbsp bl var nbsp nbsp nbsp nbsp nbsp nbsp 定义一个初始大小为 200 字节 blob nbsp nbsp nbsp blob nbsp nbsp bl var nbsp nbsp nbsp nbsp nbsp nbsp 普通定义方法 零长度 blob nbsp nbsp nbsp bl var nbsp nbsp nbsp nbsp Blob Space 200 nbsp nbsp nbsp nbsp nbsp nbsp 动态分配 200 个字节 实际上是分配了一个 200 字符的字符串 全部为空格 ASCII 码 20H 最后转换

    2026年3月17日
    2
  • 《计算机组成原理》基础概念笔记整理

    《计算机组成原理》基础概念笔记整理《计算机组成原理》复习整理以下我将使用笔记的方式,将整本书重点整理一下,或许会有纰漏,望大家多多包涵。第一章计算机系统概论计算机的硬件:计算机中的电子电路和物理装置;计算机硬件的五大部分:运算器、控制器、存储器、输入设备和输出设备;计算机的软件:计算机运行所需的程序及相关的资料;软件系统:一台计算机中的全部程序的集合;计算机软件的分类(按功能划分):应用软件和系统软件;系统…

    2022年5月6日
    42
  • 四阶龙格库塔法的计算例子

    四阶龙格库塔法的计算例子一 矩形法 1 1 原理设微分方程 y f y 1 1 doty f y tag 1 1 y f y 1 1 求 yyy 使用数值方法 离散化得每一步的增量 y f y t 1 2 Deltay f y Deltat tag 1 2 y f y t 1 2 易得 yn 1 yn f yn t 1 3 y n 1 y n f y n Deltat tag 1 3 yn 1 yn f yn t 1 3 实际上 这就是矩形法计

    2026年3月18日
    3

发表回复

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

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