2013-10-08 2 views
0

Я пишу простой плагин, который изменяет все содержимое редактора Sublime и заменяет его чем-то другим. При этомSublime 2 Plugin: заменить текст без перемещения в окне просмотра

viewRegion = sublime.Region(0, self.view.size()) 
everything = self.view.substr(viewRegion) 
self.view.replace(edit, viewRegion, everything) 

вид прокрутки вверх. Как предотвратить это или восстановить исходный видовой экран?

ответ

1

Получается, что на самом деле нет хорошего способа. Вы можете попытаться обойти замену как можно больше (например, используя отличный merge_utils), но это всегда будет менять позицию после завершения команды.

Как хака, вы можете сохранить позицию и восстановить его в тайм-аут, как это:

def format(self, edit): 
    self.curpos = self.view.viewport_position() 
    self.selection = self.view.sel()[0] 
    viewRegion = sublime.Region(0, self.view.size()) 
    everything = self.view.substr(viewRegion) 
    # do something useful 
    self.view.replace(edit, viewRegion, everything) 
    # reestablish selection 
    sublime.set_timeout(self.reset_pos, 0) 

    def reset_pos(self): 
    self.view.sel().clear() 
    self.view.sel().add(self.selection) 
    self.view.set_viewport_position(self.curpos, False) 
Смежные вопросы