【问题标题】:Check number of tabs in current pane检查当前窗格中的选项卡数量
【发布时间】:2017-03-24 23:24:10
【问题描述】:

我是 Python 和 Sublime API 的新手。我正在尝试为 ST3 编写一个简单的插件,它应该关闭一个空窗格(当我按 Ctrl-E 时)。以下是我正在尝试实施的步骤:

  1. 检查是否有拆分窗格(视图 > 布局)
  2. 如果没有拆分窗格(视图 > 布局 > 单个)- 什么也不做(返回)。
  3. 如果存在拆分窗格并且当前窗格中有 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")

我可能错了,但似乎主要问题发生在我试图检查当前窗格中打开的选项卡的数量时。如何解决?

【问题讨论】:

    标签: sublimetext2 sublimetext3 sublimetext sublime-text-plugin


    【解决方案1】:

    您的第一次尝试对于您正在尝试做的事情来说是一个很好的开始,您只是遇到了一些小的语法问题和一些与 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] 中列出其返回值的内容都在告诉您返回值是一个事物列表(即一个数组)。因此,获取组中选项卡数量的问题在于,您调用的方法告诉您所有视图 ,而不是 有多少是。这里pythonlen函数可以为你获取列表的长度。

    最大的问题是ViewWindowsublime 模块都有一个run_command 方法来运行命令,但是它们可以执行的命令稍微有点不同。

    View.run_command 可以运行以TextCommand(修改缓冲区的东西)实现的命令,而Window.run_command 可以运行TextCommandWindowCommand。在这种情况下,您尝试使用的命令是 WindowCommand 命令,因此要让它们工作,您需要告诉窗口运行它们,而不是当前视图。

    当您在开发插件以保持 Sublime 控制台打开以便您可以看到正在发生的事情时,它会很方便。这会在您保存时立即告诉您代码中的语法问题(例如 === 问题),并且在您尝试调用不存在的内容时会给您一个错误(例如 @987654337 @如果你不告诉它你在window上运行它)。

    如果您尝试运行它不知道如何处理的命令,run_command 不会产生错误;事实上,如果您尝试运行一个不存在的命令,它甚至不会产生错误。

    对于这类问题,您只需要注意,如果没有其他错误并且您确定它已到达插件的该部分,则您可能使用了错误的东西来运行命令,或者它可能拼写错误错了。

    【讨论】:

    • 精彩的描述!现在更容易理解它的一切!
    猜你喜欢
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 2018-11-07
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多