我正在尝试为自己编写一个插件来自动切换标签。当我切换到其他窗口时,将显示第一个选项卡。当我改回sublime时,将显示editng选项卡。我得到了以下代码,可以切换到第一个选项卡。但是当我回到崇高的文本时,它会挂起,而不是切换回标签。有什么我不想理解的床单吗?谢谢!
import sublime
import sublime_plugin
class ShowSheets(sublime_plugin.EventListener):
"""
Display the name of the current project in the status bar.
"""
orisheet = 0
def show_1st(self,view):
if view.window() is None:
return
self.orisheet = view.window().active_sheet()
firstsheet = view.window().sheets()
view.window().focus_sheet(firstsheet[0])
def show_original(self,view):
if view.window() is None:
return
if self.orisheet == 0:
return
view.window().focus_sheet(self.orisheet)
def on_activated(self, view):
self.show_original (view)
def on_deactivated(self, view):
self.show_1st (view)
答案 0 :(得分:1)
这是因为您创建了一个无限回调循环 - 当标签获得或失去焦点时会调用on_activated
和on_deactivated
。
因此,当ST窗口失去焦点时,on_deactivated
会运行一次。然后,当ST窗口重新获得焦点时,它会调用on_activated
一次。然后,您的代码会切换活动标签,以便再次执行on_deactivated
和on_activated
,并且循环会无限期重复。</ p>
可能您可以通过检查哪个标签已处于活动状态来解决此问题,并且不要将焦点设置为当前活动的标签。但是,您可能会发现您的代码只会阻止您切换选项卡,因为没有真正的方法可以判断Window何时失去焦点而活动选项卡已更改。