运行 sublime 插件中的命令同步序列
Run a sync sequence of commands in sublime 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})
前面的代码片段不有效。第一个命令将被执行,但第二个命令不会被执行。
如果我评论第一个命令,则执行第二个命令。
也许命令是在不同的线程上执行的,或者正在进行异步操作。
我还尝试 运行 事件处理程序中的第二个命令:
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 ) )
我一直在尝试为 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 ) )