Ваша первая попытка - довольно хорошее начало для того, что вы пытаетесь сделать, у вас просто есть пара незначительных проблем с синтаксисом и пара проблем, связанных с тем, как работает API.
Скорректированная версия вашего кода приведена ниже, чтобы вы начали.
import sublime_plugin
# Note 1: Add "Command" to name
class CloseEmptyPaneCommand(sublime_plugin.WindowCommand):
def run(self):
window = self.window
# Note 2: '=' is assignment; use '==' for equality
if window.num_groups() == 1:
return
active_pane = window.active_group()
# Note 3: views_in_group returns a list of views
tabs_in_pane = len(window.views_in_group(active_pane))
# Note 4: This method is in window
current_tab = window.active_view_in_group(active_pane)
# Note 5: These commands are window commands
if tabs_in_pane > 0:
window.run_command("close_file")
else:
window.run_command("close_pane")
Хотя это технически не требуется, рекомендуется добавлять классы, реализующие команды, с помощью Command
; Sublime отбрасывает эту часть при создании внутреннего имени команды, но это упрощает чтение вашего кода для других авторов плагинов (и вас самих), поскольку более сложные плагины могут иметь в себе другие классы, не являющиеся командами.
В документации API все, что перечисляет свой возврат в [square brackets]
, говорит вам, что возвращаемое значение является списком вещей (то есть массивом). Таким образом, ваша проблема с получением количества вкладок в группе заключается в том, что вызываемый вами метод сообщает вам, какие есть все представления, а не сколько их там. находятся. Здесь функция python len
может получить длину списка за вас.
Большая проблема (которая в какой-то момент улавливает всех) заключается в том, что View
, Window
и модуль sublime
имеют run_command
метод для запуска команды, но команды, которые они могут выполнять, немного отличаются.
View.run_command
может запускать команды, реализованные как TextCommand
(вещи, которые изменяют буфер), а Window.run_command
может запускать TextCommand
или WindowCommand
. В этом случае команды, которые вы пытаетесь использовать, - это WindowCommand
команды, поэтому для их работы вам нужно указать окну, чтобы они запускались, а не текущему представлению.
Когда вы работаете над плагином, это может быть удобно, чтобы консоль Sublime оставалась открытой, чтобы вы могли видеть, что происходит. Это сразу же расскажет вам о проблемах синтаксиса в вашем коде (например, о проблеме =
vs ==
) при сохранении и выдаст вам сообщение об ошибке, когда вы попытаетесь вызвать то, чего не существует (например, active_view_in_group
, если вы этого не сделаете. скажите, что вы запускаете его на window
).
Это происходит потому, что run_command
не генерирует ошибку, если вы пытаетесь запустить команду, которую он не знает, как обрабатывать; на самом деле он даже не генерирует ошибку, если вы пытаетесь запустить команду, которой не существует.
Для такого рода проблем вам просто нужно отметить, что если нет других ошибок, и вы уверены, что они попадают в эту часть плагина, вы можете использовать неправильную вещь для запуска команды или она может быть написана неправильно.
person
OdatNurd
schedule
25.03.2017