Plugins 在GNAT GPS插件的project_属性中设置默认项目列表

Plugins 在GNAT GPS插件的project_属性中设置默认项目列表,plugins,ada,gnat,gnat-gps,Plugins,Ada,Gnat,Gnat Gps,我正在开发一个定制的GNAT GPS插件(用于GPS 6.1.2) 我的插件XML创建了一个项目属性“example\u list\u of\u files”。 这是一个字符串列表,对应于项目中Ada文件的名称。 我想将该列表中的条目默认为“a.adb”、“b.adb”、“c.adb”。然而,我一直无法找到正确的语法。相反,我最终得到一个包含所有值的字符串 我想看到的是当您手动添加三个元素时会发生什么,如下所示: 以下是此示例的代码: GPS.parse_xml('<?xml vers

我正在开发一个定制的GNAT GPS插件(用于GPS 6.1.2)

我的插件XML创建了一个项目属性“example\u list\u of\u files”。 这是一个字符串列表,对应于项目中Ada文件的名称。 我想将该列表中的条目默认为“a.adb”、“b.adb”、“c.adb”。然而,我一直无法找到正确的语法。相反,我最终得到一个包含所有值的字符串

我想看到的是当您手动添加三个元素时会发生什么,如下所示:

以下是此示例的代码:

GPS.parse_xml('<?xml version="1.0" ?>' + """
    <my_plugin> 
      <project_attribute
        name="example_list_of_files"
        label="example_list_of_files"
        description="A description...."
        package="MyPackage"
        editor_page="MyPage"
        editor_section="Build"
        hide_in="wizard library_wizard"
        omit_if_default="false"
        list="true"
        base_name_only="true">

          <string type="file" filter="project" default="'a.adb','b.adb','c.adb' " />

      </project_attribute>  
    </my_plugin>""");
GPS.parse_xml(“”+“”)
""");
请注意带有项目属性default的字符串元素。它没有在项目经理中列出条目,而是给了我一个条目,包含字符串“'a.adb'、'b.adb'、'c.adb'”

有人有什么想法吗?我还尝试了多个字符串元素,添加了括号、大括号、方括号、空格分隔符,前缀为“array(”,但运气不好)

谢谢


Matt

来自GPS用户指南:

标记接受以下属性:

[……]

  • 列表(布尔值,默认为false)

    如果为true,则项目属性包含一个值列表,与之相反 中的源目录列表就是一个例子 标准项目

在您的示例中:

<string type="file" filter="project" default="'a.adb','b.adb','c.adb' " />

这是单个字符串值。您应该指定一个字符串值列表,如下所示:

<string type="file" filter="project" default="a.adb" />
<string type="file" filter="project" default="b.adb" />
<string type="file" filter="project" default="c.adb" />

这似乎确实不受支持。标准plug-in projects.py有几个列表属性,但它们都有一个默认值。我将在这里检查可以做些什么来改进


但是,您的方法首先可能是错误的。您正在设置的默认值仅与项目编辑器有关。这意味着,如果用户使用默认项目(如
项目默认值为end default
),并且从未通过项目编辑器,则您的属性示例\u列表\u文件实际上将不存在(并且有一个默认的空值)。因此,当您查询属性的值时(比如通过
GPS.Project.get_attribute_as_list
),这实际上应该在插件中处理。如果该函数返回一个空列表,那么使用
(“a.adb”、“b.adb”、“c.adb”)
相反。这样,即使是默认的、未编辑的项目,也可以正常工作。

感谢您的回复,但是当我在代码中替换它时,我在gps控制台中得到错误:“
节点必须始终只出现一次,并且在所有其他类型描述之后”
我的列表属性设置为list=“true”是的,这就是我最后实现的,谢谢:)