Разница между "view.window (). Run_command" и "view.run_command" - PullRequest
0 голосов
/ 26 июня 2018

В чем практическая разница между view.window().run_command(...) и view.run_command(...)?

Вот две версии одного и того же плагина с двумя незначительными изменениями:

(Он будет преобразовывать табуляции в пробелы при сохранении. Вам нужно "expand_tabs_on_save": true в настройках).

One:

# https://coderwall.com/p/zvyg7a/convert-tabs-to-spaces-on-file-save
import sublime, sublime_plugin, os

class ExpandTabsOnSave(sublime_plugin.EventListener):
  def on_pre_save(self, view):
    if view.settings().get('expand_tabs_on_save') == 1:
      view.window().run_command('expand_tabs')

Два:

# https://github.com/bubenkoff/ExpandTabsOnSave-SublimeText
import sublime_plugin # <---------- `sublime` and `os` removed

class ExpandTabsOnSave(sublime_plugin.EventListener):
  def on_pre_save(self, view):
    if view.settings().get('expand_tabs_on_save') == 1:
      view.run_command('expand_tabs') # <--------- `window()` removed

Что изменилось в его поведении с этими изменениями?

1 Ответ

0 голосов
/ 26 июня 2018

В Sublime Text команды могут быть определены для работы на уровне Application (ApplicationCommand), уровне Window (WindowCommand) или View уровень (TextCommand).

Как правило, только TextCommand s изменяют буфер или настройки, которые влияют только на текущий буфер, WindowCommand s - текущее расположение окон или другие связанные настройки, ApplicationCommand s - глобальные настройки и т. Д.

По моему опыту, выполнение WindowCommand на View объекте ничего не делает. Пример: * +1022 *

view.run_command('set_layout', {"cells": [[0, 0, 1, 1], [1, 0, 2, 1]], "cols": [0.0, 0.5, 1.0], "rows": [0.0, 1.0]})

Но выполнение TextCommand на Window объекте неявно предназначается для текущего активного окна этого окна. При выполнении из консоли ST это повлияет на область ввода текста консоли ST.

window.run_command('insert', { 'characters': 'testing123' })

Таким образом, ответ таков: разница может зависеть от типа команды и от того, является ли View, для которого вы хотите выполнить команду, активным или нет.


С точки зрения удаленных import, эффект не действует, так как эти импорты не использовались в плагине.

...