在sublime插件中运行命令的同步序列

时间:2016-07-04 15:35:24

标签: python sublimetext3 sublimetext sublime-text-plugin

我一直在尝试为Sublime Text(3)编写一个非常简单的插件,但是对于该主题是新的,要么我缺少了某些东西,要么某些东西没有按预期工作。

我想创建一个命令,将当前选项卡移动到指定的组(例如,为简化组0)。在那之后我想专注于那个小组:

import sublime
import sublime_plugin

class MoveAndFocusToGroupCommand(sublime_plugin.WindowCommand):

    def run(self):
        self.window.run_command("move_to_group",{"group": 0})
        self.window.run_command("focus_group", {"group": 0})

之前的代码片段有效。第一个命令将被执行,但不会执行第二个命令 如果我注释第一个命令,则执行第二个命令。

也许这些命令是在不同的线程上执行的,或者是async正在进行的事情。

我还尝试在事件处理程序中运行第二个命令:

class MoveAndFocusToGroupCommand(sublime_plugin.WindowCommand):

    def run(self):
        self.window.run_command("move_to_group",{"group": 0})

class MovedToGroupEventListener(sublime_plugin.EventListener):
    def on_post_window_command(self, window, name, args):
        if name == 'move_to_group' and args is not None:
            window.run_command("focus_group", args)

但没有任何变化,焦点永远不会在第0组上设置。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

您的初始代码对我来说很好,直到我在第二组中的最后一个剩余视图上尝试它。

作为评论中提到的r-stein,似乎SublimeText在空组中创建的空白视图干扰了命令序列的时间。

以下代码使用set_timeout_async重新排序命令的顺序。我省略了可选的delay参数,因为没有它它似乎工作正常。

import sublime
import sublime_plugin

class MoveAndFocusToGroupCommand( sublime_plugin.WindowCommand ):

    def run( self ):
        self.window.run_command( "move_to_group", { "group": 0 } )
        sublime.set_timeout_async( lambda: self.window.focus_group( 0 ) )