在sublime插件中运行一组同步命令



我一直在尝试为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})

前面的代码片段不能工作。第一个命令将被执行,但第二个命令不被执行。
如果对第一个命令进行注释,则执行第二个命令。

可能命令在不同的线程上执行,或者正在进行异步操作。

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

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组。

我在这里错过了什么?

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

正如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 ) )

最新更新