保存在Sublime Text Plugin后更新选项卡/文件状态

时间:2014-12-14 22:48:45

标签: sublimetext sublime-text-plugin

这可能是一个旧的错误;我找到了this report。我正在使用Sublime 3,但我认为这段代码也适用于2。

当我在插件中调用self.view.run_command('save')时,保存会发生 - 我可以在控制台窗口中键入文件并查看结果。脏旗似乎被清除了。但该文件的选项卡包含一个点而不是一个x,表示该文件尚未保存。当然,如果您尝试关闭它,它会询问您是否要保存文件。

有没有办法刷新文件窗口,以便识别文件已保存?

这是我的插件代码:(这是我的第一个插件,请原谅明显的样式问题)

# Sublime Text plugin to insert output in the OUTPUT_SHOULD_BE comment
# Bind to key with:
# { "keys": ["f12"], "command": "insert_output" },
import sublime, sublime_plugin, pprint, os, re

class InsertOutputCommand(sublime_plugin.TextCommand):

  def run(self, edit):
    outfile = self.view.file_name().rsplit('.')[0] + ".out"
    if not os.path.exists(outfile):
      sublime.error_message("Not Found: " + outfile)
      return
    out_data = open(outfile).read().strip()
    region = self.view.find(r"/\* OUTPUT_SHOULD_BE\n", 0)
    if region:
      self.view.insert(edit, region.end(), out_data)
      self.view.run_command('save')
      self.view.window().focus_view(self.view)
    else:
      sublime.error_message("Not Found: OUTPUT_SHOULD_BE")

1 个答案:

答案 0 :(得分:1)

我确定这可能是一个可怕的黑客,但它确实有效:

self.view.run_command("save")
# Refresh the buffer and clear the dirty flag:
sublime.set_timeout(lambda: self.view.run_command("revert"), 10)

revert命令必须延迟才能工作,只会带回文件中存储的内容。由于文件 已成功保存在磁盘上,因此这与我们在屏幕上看到的文件相同。在此过程中,脏标志被清除,文件选项卡上的点变为x。

对我来说非常讨厌,我喜欢更合适的解决方案。但至少它是有效的,丑陋与否。