检查当前窗格中的选项卡数量
Check number of tabs in current pane
我是 Python 和 Sublime API 的新手。我正在尝试为 ST3 编写一个简单的插件,它应该关闭一个空窗格(当我按 Ctrl-E 时)。以下是我要执行的步骤:
- 检查是否有拆分窗格(视图 > 布局)
- 如果没有拆分窗格(视图 > 布局 > 单个)- 什么都不做 (return)。
- 如果有拆分的窗格并且当前窗格中有 1 个或多个选项卡,则关闭此活动选项卡。如果活动窗格中没有选项卡,则关闭此窗格本身。
还有我正在尝试编写的代码。是的,显然有很多错误。
import sublime_plugin
class CloseEmptyPane(sublime_plugin.WindowCommand):
def run(self):
window = self.window
if window.num_groups() = 1:
return
active_pane = window.active_group()
tabs_in_pane = window.views_in_group(active_pane)
current_tab = active_view_in_group(active_pane)
if tabs_in_pane > 0:
current_tab.run_command("close_file")
else:
active_pane.run_command("close_pane")
我可能错了,但似乎主要问题出现在我试图检查当前窗格中打开的选项卡的数量时。如何解决?
您的第一次尝试对于您正在尝试做的事情来说是一个很好的开始,您只是遇到了一些小的语法问题和一些与 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]
中列出其 return 的内容都告诉您 return 值是一个列表(即数组) .因此,获取组中选项卡数量的问题在于,您调用的方法告诉您所有视图 是什么 ,而不是 多少 其中有。这里pythonlen
函数可以帮你得到列表的长度
最大的陷阱(在某个时候抓住了所有人)是 View
、Window
和 sublime
模块都有一个 run_command
方法来 运行一个命令,但是他们能执行的命令略有不同。
View.run_command
可以 运行 命令实现为 TextCommand
(修改缓冲区的东西),而 Window.run_command
可以 运行 一个 TextCommand
或 WindowCommand
。在这种情况下,您尝试使用的命令是 WindowCommand
命令,因此要使它们工作,您需要告诉 window 到 运行 它们,而不是当前视图。
当您使用插件保持 Sublime 控制台打开以便您可以看到正在发生的事情时,它会很方便。这将在您保存时立即告诉您代码中的语法问题(例如 =
与 ==
问题),并在您尝试调用不存在的内容时给您一个错误(比如 active_view_in_group
如果你不告诉它你正在 运行 在 window
上安装它)。
如果您尝试 运行 它不知道如何处理的命令,run_command
不会产生错误;事实上,如果您尝试 运行 一个不存在的命令,它甚至不会产生错误。
对于这类问题,您只需要注意,如果没有其他错误,并且您确定它到达了插件的那部分,那么您可能使用了错误的东西 运行命令,否则可能拼写错误。
我是 Python 和 Sublime API 的新手。我正在尝试为 ST3 编写一个简单的插件,它应该关闭一个空窗格(当我按 Ctrl-E 时)。以下是我要执行的步骤:
- 检查是否有拆分窗格(视图 > 布局)
- 如果没有拆分窗格(视图 > 布局 > 单个)- 什么都不做 (return)。
- 如果有拆分的窗格并且当前窗格中有 1 个或多个选项卡,则关闭此活动选项卡。如果活动窗格中没有选项卡,则关闭此窗格本身。
还有我正在尝试编写的代码。是的,显然有很多错误。
import sublime_plugin
class CloseEmptyPane(sublime_plugin.WindowCommand):
def run(self):
window = self.window
if window.num_groups() = 1:
return
active_pane = window.active_group()
tabs_in_pane = window.views_in_group(active_pane)
current_tab = active_view_in_group(active_pane)
if tabs_in_pane > 0:
current_tab.run_command("close_file")
else:
active_pane.run_command("close_pane")
我可能错了,但似乎主要问题出现在我试图检查当前窗格中打开的选项卡的数量时。如何解决?
您的第一次尝试对于您正在尝试做的事情来说是一个很好的开始,您只是遇到了一些小的语法问题和一些与 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]
中列出其 return 的内容都告诉您 return 值是一个列表(即数组) .因此,获取组中选项卡数量的问题在于,您调用的方法告诉您所有视图 是什么 ,而不是 多少 其中有。这里pythonlen
函数可以帮你得到列表的长度
最大的陷阱(在某个时候抓住了所有人)是 View
、Window
和 sublime
模块都有一个 run_command
方法来 运行一个命令,但是他们能执行的命令略有不同。
View.run_command
可以 运行 命令实现为 TextCommand
(修改缓冲区的东西),而 Window.run_command
可以 运行 一个 TextCommand
或 WindowCommand
。在这种情况下,您尝试使用的命令是 WindowCommand
命令,因此要使它们工作,您需要告诉 window 到 运行 它们,而不是当前视图。
当您使用插件保持 Sublime 控制台打开以便您可以看到正在发生的事情时,它会很方便。这将在您保存时立即告诉您代码中的语法问题(例如 =
与 ==
问题),并在您尝试调用不存在的内容时给您一个错误(比如 active_view_in_group
如果你不告诉它你正在 运行 在 window
上安装它)。
如果您尝试 运行 它不知道如何处理的命令,run_command
不会产生错误;事实上,如果您尝试 运行 一个不存在的命令,它甚至不会产生错误。
对于这类问题,您只需要注意,如果没有其他错误,并且您确定它到达了插件的那部分,那么您可能使用了错误的东西 运行命令,否则可能拼写错误。