Version 1.1,最新版
20 August 2016
文章目录
介绍
本文档定义了如何构建用户可见的应用程序层次结构,通常以菜单的形式显示。它允许第三方软件添加适用于所有桌面的菜单项,并允许系统管理员以影响所有桌面的方式编辑菜单。
基本方案非常简单。有关每个应用程序(菜单项)的信息存储在桌面入口文件中(请参阅桌面入口文件标准)。然后,XML配置文件定义菜单项的分层排列(布局)和实际需要显示的菜单项。
由于即要支持传统桌面入口的层次结构,又要允许第三方扩展菜单布局,所以需要合并两个菜单布局。
除了严格定义每个菜单的规范之外,本规范还提到了许多布局/呈现方式。这一部分规范是可选的,实际上可以选择忽略这些提示。
文件位置
本规范中涉及的文件根据 桌面基本目录规范 定位。
以下是此规范定义的文件:
$XDG_CONFIG_DIRS
/menus/${XDG_MENU_PREFIX}
applications.menu
$XDG_CONFIG_DIRS 默认位置为 $HOME/.config : /etc/xdg
例如,它应该将$XDG_MENU_PREFIX
环境变量分别设置 为“gnome-”、“kde-”。
如果系统同时包含GNOME和KDE桌面环境,则可以决定使用gnome-applications.menu作为GNOME会话中的菜单布局,将kde-applications.menu作为KDE会话中的菜单布局。
如果用户拥有自己的${XDG_MENU_PREFIX}
applications.menu,它将取代系统的applications.menu。
-
$XDG_CONFIG_DIRS/menus/applications-merged/
默认合并目录包含在元素中。按照惯例,第三方可以在此位置添加新的
请注意,根据所使用的桌面环境,使用gnome-applications.menu或kde-applications.menu;在两种情况下,仍必须使用
applications-merged
作为默认合并目录。对于除应用程序主要菜单之外的任务或菜单,可以选择使用除application.menu以外的名称的.menu文件。在这种情况下,默认合并目录名称的第一部分是从.menu文件的名称派生的。
例如,在使用preferences.menu文件来描述附加菜单的系统中,preferences.menu文件中元素中包含的默认合并目录将变为 $XDG_CONFIG_DIRS/ menus / preferences-merged /
-
$XDG_DATA_DIRS/applications/
该目录包含每个可能菜单项的.desktop文件。
$XDG_DATA_DIRS
中的每个目录都应该被使用(即,从所有目录中收集桌面入口,而不仅仅是存在的第一个目录入口)。当两个桌面入口具有相同名称时,将使用路径中较早出现的那个。菜单文件中的元素表示默认的桌面入口位置列表应该被扫描。如果菜单文件不包含,则不扫描这些位置。
-
$XDG_DATA_DIRS/desktop-directories/
此目录可能包含与菜单布局中的文件夹关联的目录入口。每个目录都应该被使用。仅使用以.directory结尾的文件; 其他文件被忽略。
菜单文件中的元素表示此默认的目录条目位置列表。如果菜单文件不包含,则不扫描这些位置。
.desktop文件的扩展
该规范增加了三个新领域的桌面项:Categories, OnlyShowIn和NotShowIn。
该Categories
字段是用于对菜单项进行分类的字符串列表。例如,AudioVideo类别中的应用程序 可能最终出现在“声音和视频”子菜单中。附录A.注册类别 列举了标准类别。不在此文档中的类别必须以字符串“X-”作为前缀,表示它们是扩展名。类别区分大小写。
桌面入口文件应列出所有适用的类别。他们不应该列出只是模糊或可能适用的类别,因为用户最终会在六个地方看到相同的桌面入口。但通常情况下,给出的几个类别总有适用的。
该OnlyShowIn
字段是一个字符串列表,用于标识应显示在特定的环境。如果存在 OnlyShowIn
字段,则应该标明。字符串区分大小写。附录B.Registered OnlyShowIn Environments 枚举了某些常见的环境。
该NotShowIn
字段是一个字符串列表,用于标识不应显示在特定的环境。如果存在NotShowIn
字段,则应该标明。字符串区分大小写。附录B.Registered OnlyShowIn Environments枚举了某些常见的环境。
不在此文档中的环境必须以字符串“X-”作为前缀,表示它们是扩展名。环境区分大小写。
使用Categories和OnlyShowIn的例子
- 基于Qt的图像查看器的桌面入口可能包含以下Categories行:
Categories=Qt;Graphics;RasterGraphics;Viewer; - Octave,一个命令行的数学程序(还应该有
Terminal=true
这一行)的桌面入口
Categories=ConsoleOnly;Math; - 仅应出现在GNOME中的GNOME特定计算器程序的桌面文件,可能包含下面字段:
Categories=GNOME;Utility;
OnlyShowIn=GNOME;
菜单文件的格式
菜单文件必须是格式良好的XML文件,并以扩展名“.menu”结尾。它们还应符合菜单文件DTD,这意味着不允许对文件格式进行特定的扩展。如果实现遇到不符合相关DTD的菜单文件,则可能会停止运行。请注意,关联的DTD版本可能与本文档中定义的版本不同。
当更新现有菜单文件时,可能需要将标识符更新为较新版本的DTD。永远不应将现有菜单文件的标识符更新为旧版本。为了与更新的版本保持兼容,应该忽略并保留它不知道如何处理的任何XML元素,属性和属性值。
文件类型声明
此版本规范的菜单文件必须使用以下命名空间,公共和系统标识符:
命名空间:http://www.freedesktop.org/standards/menu
1.1的公共标识符:PUBLIC “-//freedesktop//DTD Menu 1.0//EN”
1.1的系统标识符:http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd
这是一个示例文档类型声明:
<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
"http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
所有菜单文件必须包含文档类型声明,以便实现可以适应此规范的不同版本(因此实现可以根据DTD验证菜单文件)。
元素
- <Menu>
根元素是<Menu>。每个<Menu>元素可以包含任意数量的嵌套<Menu>元素,表示子菜单。
<Menu>
<Menu>
</Menu>
</Menu>
- <AppDir>
<Menu>
<!-- 定位到.desktop文件夹 -->
<AppDir>/usr/share/applink</AppDir>
</Menu>
比如:<AppDir> /foo/bar/Hello.desktop 的桌面文件id号为 Hello.desktop
<AppDir>/foo/bar/bo/oz/Hello.desktop 的桌面文件id号为 bo-oz-Hello.desktop
如果作为<AppDir>给出的文件名不是绝对路径,则它应该相对于要解析的菜单文件的位置。
递归扫描,向后合并
<AppDir>元素与<Include>和<Exclude>元素的顺序不相关,也便于合并。
- <DefaultAppDirs>
<Menu>
<DefaultAppDirs/>
</Menu>
该元素没有内容。默认包含app dir位置($datadir/applications/)的<AppDir>元素列表。将<DefaultAppDirs>扩展为<AppDir>列表时,搜索路径中较早的默认位置稍后会在<Menu>中显示,以便它们具有优先级。
$datadir默认为 ~/.local/share : /usr/local/share : /usr/share
- <DirectoryDir>
<Menu>
<Directory>/usr/share/desktop-directories</Directory>
</Menu>
该元素的内容是目录名称。递归扫描,向后合并。只加载以扩展名“.directory”结尾的文件
例如,如果/usr/share/desktop-directories指定为,则相对路径 /usr/share/desktop-directories/foo/bar.directory为 foo/bar.directory。
- <DefaultDirectoryDirs>
<Menu>
<DefaultDirectoryDirs />
</Menu>
- <Name>
<Menu>
<Name>金山办公<