2016-12-29 99 views
1

我正在尝试构建一个上下文菜单,它将显示我所有包和其资源的树结构。这样可怕的小画家绘制的东西,我画:如何将命令的结果存储到变量?

enter image description here

我已经安装了PackageResourceViewer。它提供了在窗口中显示的命令。但我想用它们来填充这些子上下文menues:

  • get_packages_list,我认为将填充第一子菜单(包)
  • list_package_files应该填充每个随后的子菜单

但是,我不知道如何获得这些输出到上下文菜单。我一直在看python(为此写一个崇高的插件)。

如何将这些命令的输出转换为变量?


我的代码

import sublime 
import sublime_plugin 


    class ExampleCommand(sublime_plugin.TextCommand): 
     def run(self, edit): 
      self.view.insert(edit, 0, package_resource_viewer) 

但它给我这个错误:

>>> view.window().run_command("example") 
Traceback (most recent call last): 
    File "C:\Program Files\Sublime Text 3\sublime_plugin.py", line 818, in run_ 
    return self.run(edit) 
    File "C:\Users\heete\AppData\Roaming\Sublime Text 3\Packages\User\hello_world.py", line 7, in run 
    self.view.insert(edit, 0, package_resource_viewer) 

NameError: global name 'package_resource_viewer' is not defined

很显然,我还没有得到远,但我甚至不能这个的输出显示在缓冲区中。

回答

1

您可以导入并访问这些命令。我做了一个最简单的例子,它将软件包打印到当前视图。 但是,输出到上下文/侧边栏菜单似乎更难,因为它们通常是静态的,您不能动态地创建一个。 (您可以尝试通过命令创建静态菜单文件。)

import sublime_plugin 

from PackageResourceViewer.package_resources import (
    get_packages_list, list_package_files 
) 


class ExampleListPackagesCommand(sublime_plugin.TextCommand): 
    def run(self, edit): 
     packages = get_packages_list() 

     insert_sb = [] 
     insert_sb.append("Installed Packages:") 
     insert_sb.extend(packages) 

     for package in packages: 
      insert_sb.append("") 
      insert_sb.append(package) 

      package_files = list_package_files(package) 

      insert_sb.extend("\t" + pf for pf in package_files) 

     self.view.insert(edit, 0, "\n".join(insert_sb)) 
相关问题