【问题标题】:Sublime Text 2 - Run Plugin on Program StartupSublime Text 2 - 在程序启动时运行插件
【发布时间】:2013-04-23 19:08:05
【问题描述】:

我正在尝试创建一个插件来根据当前操作系统切换 font_face 设置。我使用 Dropbox 来同步我的所有设置,我在工作中使用 Mac,在家里使用 Windows。我相信我已经创建了一个可以工作的插件(尽管可能并不完美,因为这是我第一次尝试使用插件和 python!)但是当我尝试在 Sublime Text 2 启动时让它运行时,我的问题就来了。

我似乎已经搜索到互联网的尽头,但找不到一篇关于“在启动时运行插件”的文章,这让我要么认为这是不可能的,要么很容易做到这一点不有人想过写下它。

这是我的代码:

import sublime
import sublime_plugin


class OsFontSwitcherCommand(sublime_plugin.ApplicationCommand):
def run(self):
    s = sublime.load_settings("Preferences.sublime-settings")

    if sublime.platform() == "osx":
        s.set("font_face", 'Courier')
    else:
        s.set("font_face", 'Consolas')

    sublime.save_settings("Preferences.sublime-settings")

这很好用,但我每次启动程序时都必须手动调用它才能工作。

通过执行以下操作,我能够让插件在加载后立即运行,但它似乎在实际加载默认和用户设置之前运行,结果是它清除了我的所有其他设置:

import sublime
import sublime_plugin

s = sublime.load_settings("Preferences.sublime-settings")

if sublime.platform() == "osx":
    s.set("font_face", 'Courier')
else:
    s.set("font_face", 'Consolas')

sublime.save_settings("Preferences.sublime-settings")

我考虑过使用 set_timeout() 方法,但这似乎很老套。

我想将此扩展为一个更充实的插件,以便您可以为 Windows 和 OSX 进行完整配置,并始终根据当前操作系统正确加载它们。让它在启动时自动运行是关键。

我还尝试在我的 /Packages/User 文件夹中创建 Preferences (Windows).sublime-settingsPreferences (OSX).sublime-settings,但它们似乎没有被选中。其他人也注意到了这个问题:http://www.sublimetext.com/forum/viewtopic.php?f=2&t=5135

任何关于如何让这个插件在启动时运行的想法将不胜感激。 非常感谢。

【问题讨论】:

  • 我知道 Sublime Package Control 插件在启动时运行,所以这绝对是可能的。由于我实际上并不需要此功能,因此我无法直接回答您,但是,Package Control.py 文件很可能包含您问题的答案。 Preferences -> Browse Packages 然后转到 Package Control 文件夹。祝你好运!
  • @bdiamante:感谢您的指导。我检查了Package Control.py,在最底部有一个 set_timeout 调用等待 2 秒,并附有如下注释:在 Sublime 启动后不久启动包控制,因此它不会导致任何键绑定、设置等错误。 谢谢您的帮助。我很惊讶没有其他方法可以做到这一点,因为它似乎不是知道何时加载设置的可靠方法。我已将此添加到我的插件中,并且可以正常工作。只要 Sublime 在 2 秒内启动 :)

标签: plugins sublimetext2


【解决方案1】:

我知道这是一个老问题,最初的发帖人问的是 Sublime Text 2,但我刚刚为自己解决了一个类似的问题,Sublime Text 3 提供了一种方便的方法来解决这个问题。

如果你定义了一个模块级的plugin_loaded 函数,Sublime Text 3 将在你的插件加载时执行你的代码。

我写了一个blog post about this with more details and some sample code

【讨论】:

  • 谢谢 Josh,我一定会考虑为 Sublime Text 3 升级我的插件代码,不必依赖任意超时计数真是太好了。
  • 嗨乔希,我更新了我的插件代码,现在它工作得很好。谢谢你的提示。这是最终的插件代码: import sublime, sublime_plugin def plugin_loaded(): s = sublime.load_settings("Preferences.sublime-settings") if sublime.platform() == "osx": s.set("font_face", ' Courier') else: s.set("font_face", 'Consolas') sublime.save_settings("Preferences.sublime-settings")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
相关资源
最近更新 更多