sublime text插件开发

手工开发了一些ST的py插件,记录过程中遇到的一些问题。

ST3/ST4 begin_edit问题

报错:

复制代码
begin_edit() missing 2 required positional arguments: 'edit_token' and 'cmd'

ST3时已经不能直接调view.begin_edit方法了,需要通过runCommand+TextCommand转一手,写法如下:

python 复制代码
class ShowEnvVarsInternalCommand(sublime_plugin.TextCommand):
    def run(self, edit, input):
        self.view.set_read_only(False)
        self.view.insert(edit, 0, input)
        self.view.end_edit(edit)
        self.view.set_read_only(True)


class ShowEnvVarsCommand(sublime_plugin.WindowCommand):
    def run(self):
        self.var_names = list(os.environ.keys())
        self.window.show_quick_panel(self.var_names, self.disp_var)

    def disp_var(self, index):
        if index != -1:
            var = self.var_names[index]
            str = '\n'.join(os.environ[var].split(';'))             
            
            output_view = self.window.create_output_panel("env_var")            
            self.window.run_command("show_panel", {"panel": "output.env_var"})
            # 这里在ST2里是直接调用output_view.begin_edit,然后对Edit对象做insert,这里改为调用output_view.run_command方法,把请求转给TextCommand,后者的run方法可以直接拿到Edit对象。
            output_view.run_command('show_env_vars_internal', {"input": str})
            self.window.focus_view(output_view)

sublime.set_timeout的用途

用于在工作线程里访问ST的界面,因只有主线程才能刷新ST界面,set_timeout相当于"工作线程向主线程发消息"。

exec命令

通过查看exec.py源码,得知:

exec是异步的,也就是说,ST主线程不会等待exec完成才返回,相反,它立刻返回,而exec进程的输出被异步(通过起线程的方式)的追加到output.exec窗口里。因此,当你run_command后立刻从output.exec里拿结果,只会得到空。

为何ST主线程不会等待呢?因为这是一个GUI程序,一旦主线程等待,界面就会僵死。

ST插件API说明

ST4的API文档

相关推荐
dswfgds15 分钟前
开源项目吐槽大会:一篇技术文章的大纲设计
编辑器
golang学习记1 天前
VS Code Agents 新快捷键:一键穿梭主编辑器与Agent窗口
vscode·编辑器
FriendshipT1 天前
Vim 完整指南:从入门到高效编辑
linux·人工智能·编辑器·vim·1024程序员节
.道阻且长.1 天前
Linux 基本开发工具:编辑器vim,配置vim
linux·运维·服务器·职场和发展·编辑器·vim·1024程序员节
Rabitebla2 天前
【Linux底层原理】 工具篇(二):Vim 编辑器基础操作与简单配置
linux·c++·编辑器·vim
白鹭鸣鸣!3 天前
WSL2 + OpenCode 完整搭建全流程(含迁移 WSL 到 D 盘)
编辑器
骑着蜗牛撵大象3273 天前
四种库收进一个SQL编辑器(下):跨库取数、方言对齐与四库巡检的落地拆解
jvm·数据库·sql·编辑器·数据迁移·跨库查询
学习论之费曼学习法3 天前
无人值守AI内容矩阵实战(7):Playwright 发布器避坑——编辑器竞态、索引延迟与风控
python·线性代数·矩阵·编辑器·浏览器自动化·playwright·踩坑记录
心态还需努力呀3 天前
把 Zettlr 搬上鸿蒙 PC:墨匣学术写作编辑器移植与上架全记录
华为·编辑器·harmonyos
努力学习的小廉3 天前
UE5 入门系列(二):编辑器基础操作速通
ue5·编辑器