Обновление статуса вкладки/файла после сохранения в плагине Sublime Text

Это может быть старая ошибка; Я нашел этот отчет. Я использую 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")

person user1677663    schedule 14.12.2014    source источник


Ответы (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.

Мне кажется очень хакерским, и мне бы хотелось найти более правильное решение. Но, по крайней мере, это работает, уродливо или нет.

person user1677663    schedule 01.12.2015