Linux桌面菜单(.menu)规范

本文档详细介绍了Linux桌面菜单的规范,包括文件位置、.desktop文件扩展、菜单文件格式等。主要内容涵盖菜单布局、Categories和OnlyShowIn字段的使用,以及如何将应用程序集成到菜单中。通过指定Categories,应用程序可以被分类到不同的菜单项,OnlyShowIn和NotShowIn字段则控制了程序在哪些环境下显示。菜单文件遵循特定的XML结构,允许自定义和扩展。
摘要由CSDN通过智能技术生成

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>金山办公<
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Table of Contents Preface Preface Prerequisites Conventions Resources Acknowledgments 2. The GTK+/GNOME System GLib Simple Data Types Namespaces Logging Containers Other Toys GDK The GTK+ Connection The Thin Wrapper GDK Events Drawing Primitives Reference Counting GTK+ Widgets The GTK+ Type System Object Classes Object Properties Signals GNOME Core Libraries Graphics Libraries Components Gnome-xml 3. The GNOME Build Environment The Configuration Script Running configure Inside the configure Script Makefile Variable Substitution Creating Your Own Configuration Autoconf The Configuration Header Checking for Tools Checking for Header Files Custom Checks Helper Tools Generating Makefiles GNU Makefile Standards Using automake Automake Variables Conditional Compiling Cutting a Distribution Dealing with Libraries Libtool Support libtoolize A Grumpy Example Exploring the Results A Note about Version Numbers Adding GNOME GNOME Macros gnome-config GNOME Makefile Variables autogen.sh Some Grumpy GNOME Examples 10. Graphics Graphics in the X Window System Frame Buffers Color Maps Visuals Drawables Images The GDK Wrapper Simpler API Using Color in GDK GdkRGB The RGB Buffer Drawing Functions Color Management Libart Vector Paths Bezier Paths Sorted Vector Paths Microtile Arrays Affine Transformations Pixel Buffers Gdk-pixbuf Creating Rendering Scaling Progressive Loading Autoconf Support Gdk-pixbuf Application Example 11. The GNOME Canvas The Canvas Double-Buffered Drawing Surface The Canvas Abstraction Canvas Groups Events Coordinate Systems World Coordinates Item Coordinates Canvas Coordinates Window Coordinates Using the Canvas GDK versus AA The Scrolling Region Adding Canvas Items Moving Canvas Items Around Transformations Canvas Items Vector-Based Drawing Items Line Styles The Shape of the Item Widgets in the Canvas Text Canvas Items Graphical Canvas Items Canvas Events The Event Callback Clicks and Double Clicks Mouse Motion Rollovers Keyboard Events Grabbing Items Dragging and Dropping Canvas Items A. GNU Free Documentation License 0. PREAMBLE 1. APPLICABILITY AND DEFINITIONS 2. VERBATIM COPYING 3. COPYING IN QUANTITY 4. MODIFICATIONS 5. COMBINING DOCUMENTS 6. COLLECTIONS OF DOCUMENTS 7. AGGREGATION WITH INDEPENDENT WORKS 8. TRANSLATION 9. TERMINATION 10. FUTURE REVISIONS OF THIS LICENSE Addendum List of Figures 2-1. Singly and Doubly Linked Lists 2-2. Structure of a Hash Table 2-3. Structure of an N-ary Tree 2-4. The GNOME Dependency Tree 2-5. GDK Event Flow 2-6. Widget Appearances 3-1. Running the configure Script 3-2. Running aclocal 3-3. Four Grumpy Library Cases 10-1. Color Map Example 10-2. Relationships among X Visuals 10-3. Double Buffering with a Pixmap 10-4. RGB Row Strides 10-5. Array of ArtVpath Elements 10-6. Vector Paths of the Letters V and R 10-7. Microtile Arrays 10-8. Rendering an Alpha Channel to a Bitmap 10-9. Scaling Parameters 10-10. Image Composition with testpixbuf-scale 10-11. Screen Shot of Sample Gdk-pixbuf Application 11-1. The test-gnome Application 11-2. Maximizing the Viewing Space 11-3. Bitmaps for Stipple Masks 11-4. Stipple Mask Example 11-5. Arrow Shapes for GnomeCanvasLine Item 11-6. Rectangle and Ellipse Canvas Items with the Same Bounding Box
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值