Sublimetext3 在聚焦其他组以打开文件后,如何将焦点恢复到快速面板?

Sublimetext3 在聚焦其他组以打开文件后,如何将焦点恢复到快速面板?,sublimetext3,sublimetext,sublime-text-plugin,Sublimetext3,Sublimetext,Sublime Text Plugin,情况是这样的:我正在编写一个插件,需要: 打开快速面板 在第一个项目悬停时,将焦点放在其他组 在那个组中打开 将焦点恢复到快速面板输入,以便我可以移动到列表中的下一项,等等 我确实解决了1-3题,但第4题给我带来了麻烦。有办法吗?您需要获取与快速面板关联的视图。方法show\u quick\u panel不会返回视图,但是您可以使用EventListener插件激活的方法来获取视图 当您聚焦任何视图(选项卡、控制台、快速面板…)时,将调用此方法(启用)。因此,该插件将捕获与快速面板关联的视图 获

情况是这样的:我正在编写一个插件,需要:

  • 打开快速面板
  • 在第一个项目悬停时,将焦点放在其他组
  • 在那个组中打开
  • 将焦点恢复到快速面板输入,以便我可以移动到列表中的下一项,等等

  • 我确实解决了1-3题,但第4题给我带来了麻烦。有办法吗?

    您需要获取与快速面板关联的视图。方法show\u quick\u panel不会返回视图,但是您可以使用EventListener插件激活的方法来获取视图

    当您聚焦任何视图(选项卡、控制台、快速面板…)时,将调用此方法(启用)。因此,该插件将捕获与快速面板关联的视图

    获取视图的示例插件:

    现在在您的插件中,您需要告诉eventListener激活的视图何时对应于快速面板,以便捕获它。插件中所需内容的示例:

    import sublime, sublime_plugin
    
    class Sample(sublime_plugin.WindowCommand):
        def restoreQuickPanelFocus(self):
            """Restore focus to quick panel is as easy as focus in the quick panel view, that the eventListener has previously captured and saved"""
            self.window.focus_view(sublime.quickPanelView)
    
        def on_highlighted(self, index):
            """Open image[index] in group 1"""
            self.window.focus_group(1)
            self.window.open_file(self.items[index])
            """Wait for image to open and restore focus to quick panel"""
            sublime.set_timeout(self.restoreQuickPanelFocus, 100)
    
        def run(self):
            print('runando')
            """Divide layout (as an example) """
            self.window.set_layout({
                "cols": [0.0, 0.4, 1.0],
                "rows": [0.0, 0.6, 1.0],
                "cells": [[0, 0, 2, 1], [0, 1, 1, 2], [1, 1, 2, 2]]
                })
    
            """Items=> images paths"""
            self.items = ('C:/images/img1.jpg','C:/images/img2.jpg','C:/images/img3.jpg','C:/images/img4.jpg','C:/images/img5.jpg')
    
            """Now we are going to show the quick panel, so we set the capturing flag to true as the next activated view will correspond to quick panel"""
            sublime.capturingQuickPanelView = True
            self.window.show_quick_panel(self.items, None, sublime.KEEP_OPEN_ON_FOCUS_LOST , 0, self.on_highlighted)
    
    结果:


    sergioFC的回答对我不起作用(sublime 3 3210)-文件视图获得焦点,而不是快速面板

    一些替代方案 作为保持快速面板焦点的一种方式(当前组中打开的文件)

    import sublime, sublime_plugin
    
    class Sample(sublime_plugin.WindowCommand):
        def restoreQuickPanelFocus(self):
            """Restore focus to quick panel is as easy as focus in the quick panel view, that the eventListener has previously captured and saved"""
            self.window.focus_view(sublime.quickPanelView)
    
        def on_highlighted(self, index):
            """Open image[index] in group 1"""
            self.window.focus_group(1)
            self.window.open_file(self.items[index])
            """Wait for image to open and restore focus to quick panel"""
            sublime.set_timeout(self.restoreQuickPanelFocus, 100)
    
        def run(self):
            print('runando')
            """Divide layout (as an example) """
            self.window.set_layout({
                "cols": [0.0, 0.4, 1.0],
                "rows": [0.0, 0.6, 1.0],
                "cells": [[0, 0, 2, 1], [0, 1, 1, 2], [1, 1, 2, 2]]
                })
    
            """Items=> images paths"""
            self.items = ('C:/images/img1.jpg','C:/images/img2.jpg','C:/images/img3.jpg','C:/images/img4.jpg','C:/images/img5.jpg')
    
            """Now we are going to show the quick panel, so we set the capturing flag to true as the next activated view will correspond to quick panel"""
            sublime.capturingQuickPanelView = True
            self.window.show_quick_panel(self.items, None, sublime.KEEP_OPEN_ON_FOCUS_LOST , 0, self.on_highlighted)
    
    self.window.open_file(items[index][2], 8|sublime.TRANSIENT)