on_load 方法未按预期工作
on_load method doesn't work as expected
这里是 on_load
方法的简单测试。
import sublime_plugin
class OnLoadTest(sublime_plugin.EventListener):
def on_load(self, view):
print("Tested")
如果我打开某个文件,然后关闭该文件 (Ctrl-W),然后重新打开它 (Ctrl-Shift-T),插件工作正常。
但是,如果我打开某个文件,然后关闭编辑器,然后再重新打开编辑器,插件将不会启动。 (尽管文件已成功重新打开,多亏了我偏好设置中的 "hot_exit": true
和 "remember_open_files": true
)。
是bug还是我技能不够?
我用的是ST3,build 3126
这是错误还是有意识的设计决定多年来一直debated quite a bit,但众所周知。
从上一个会话恢复时,所有打开的文件都将恢复到它们所在的状态,其中包括所选文本、未保存的更改、修改的设置等内容。 Sublime 在主动加载插件代码之前或期间启动并执行这些任务,以便尽可能快地启动。
如果 on_load
正在做一些您需要在从恢复的会话回来时再次做的事情,您可以通过定义模块级别 plugin_loaded()
函数来检测何时加载您的插件,一旦所有内容加载完毕,Sublime 就会调用它。您可以在其中扫描所有 windows 和文件并采取一些措施。
一个例子可能是:
import sublime
import sublime_plugin
import os
def plugin_loaded ():
# Show project in all views of all windows
for window in sublime.windows ():
for view in window.views ():
show_project (view)
def show_project(view):
# Sometimes a view is not associated with a window
if view.window() is None:
return
# Is there a project file defined?
project_file = view.window ().project_file_name ()
if project_file is not None:
# Get the project filename without path or extension
project_name = os.path.splitext (os.path.basename (project_file))[0]
view.set_status ("00ProjectName", "[" + project_name + "]")
# Display the current project name in the status bar
class ProjectInStatusbar(sublime_plugin.EventListener):
# When you create a new empty file
def on_new(self, view):
show_project (view)
# When you load an existing file
def on_load(self, view):
show_project (view)
# When you use File > New view into file on an existing file
def on_clone(self, view):
show_project (view)
这里是 on_load
方法的简单测试。
import sublime_plugin
class OnLoadTest(sublime_plugin.EventListener):
def on_load(self, view):
print("Tested")
如果我打开某个文件,然后关闭该文件 (Ctrl-W),然后重新打开它 (Ctrl-Shift-T),插件工作正常。
但是,如果我打开某个文件,然后关闭编辑器,然后再重新打开编辑器,插件将不会启动。 (尽管文件已成功重新打开,多亏了我偏好设置中的 "hot_exit": true
和 "remember_open_files": true
)。
是bug还是我技能不够?
我用的是ST3,build 3126
这是错误还是有意识的设计决定多年来一直debated quite a bit,但众所周知。
从上一个会话恢复时,所有打开的文件都将恢复到它们所在的状态,其中包括所选文本、未保存的更改、修改的设置等内容。 Sublime 在主动加载插件代码之前或期间启动并执行这些任务,以便尽可能快地启动。
如果 on_load
正在做一些您需要在从恢复的会话回来时再次做的事情,您可以通过定义模块级别 plugin_loaded()
函数来检测何时加载您的插件,一旦所有内容加载完毕,Sublime 就会调用它。您可以在其中扫描所有 windows 和文件并采取一些措施。
一个例子可能是:
import sublime
import sublime_plugin
import os
def plugin_loaded ():
# Show project in all views of all windows
for window in sublime.windows ():
for view in window.views ():
show_project (view)
def show_project(view):
# Sometimes a view is not associated with a window
if view.window() is None:
return
# Is there a project file defined?
project_file = view.window ().project_file_name ()
if project_file is not None:
# Get the project filename without path or extension
project_name = os.path.splitext (os.path.basename (project_file))[0]
view.set_status ("00ProjectName", "[" + project_name + "]")
# Display the current project name in the status bar
class ProjectInStatusbar(sublime_plugin.EventListener):
# When you create a new empty file
def on_new(self, view):
show_project (view)
# When you load an existing file
def on_load(self, view):
show_project (view)
# When you use File > New view into file on an existing file
def on_clone(self, view):
show_project (view)