Xdg-menu (简体中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻译状态:本文是 Xdg-menu翻译。上次翻译日期:2020-04-10。如果英文版本有所更改,则您可以帮助同步翻译。

xdg-menu是一个为以下窗口管理器生成xdg桌面菜单的工具:

KDE, Gnome, Xfce, Enlightenment已经与XDG兼容。

安装

安装archlinux-xdg-menu包。

菜单层次结构

  • 应用
    • 辅助功能
    • 配饰
    • 开发
    • 教育
    • 游戏
    • 图形
    • 互联网
    • 多媒体
    • 办公
    • 其他
    • 科学
    • 系统

配置

Xdg_menu依赖于三组信息来生成菜单:根菜单或换句话说,通常在命令行上传递的XML菜单模板、上次运行时缓存的信息以及一系列配置文件。

  • 您可以在/etc/xdg/menus中找到一些XML菜单模板.
  • 如果更改xdg_menu中的代码以更改布局,请确保删除~/.xdg_menu_cache中的所有内容,否则您将花费数小时试图找出对perl脚本所做的更改不起作用的原因。
  • 您可以在/usr/share/applications中找到各个应用程序配置

其他配置文件目录可以在/usr/share下找到。在大多数情况下你不需要碰这些东西。但是,如果要更改菜单的分层方式,可以更改菜单模板以进行细微更改。主要的更改需要调整实际的 xdg_menu perl脚本。如果您发现应用程序没有出现或者它们被称为奇怪的东西,那么您需要查看/usr/share/applications中的.desktop文件。检查桌面条目规范

从其他目录添加桌面条目

默认情况下,Xdg菜单将填充那些将桌面条目安装到/usr/share/applications的应用程序。若要将应用程序添加到将桌面项安装到用户文件夹(如~/.local/share/applications的菜单中,请编辑/etc/xdg/menus/arch applications.menu文件,并为相关目录添加<AppDir>标记,请参见以下内容:

/etc/xdg/menus/arch-applications.menu
<Menu>

  <Name>Applications</Name>
  <Directory>Arch-Applications.directory</Directory>
  <DefaultAppDirs/>
  <AppDir>/home/username/.local/share/applications</AppDir>
  <DefaultDirectoryDirs/>
  <DefaultMergeDirs/>
  ...

使用

xdg_menu

xdg_menu [--format <format>] [--desktop <desktop>] 
         [--charset <charset>] [--language <language>]  
	 [--root-menu <root-menu>] [--die-on-error]
	 [--fullmenu] [--help]
		 
	format - output format
	         possible formats: twm, WindowMaker, fvwm2, icewm, ion3
	                           blackbox, fluxbox, openbox, 
				   xfce4, openbox3, openbox3-pipe, awesome
				   readable
		 default: WindowMaker
		
 	fullmenu  - output a full menu and not only a submenu

	desktop - desktop name for NotShowIn and OnlyShowIn
		 default: the same as format
			 
	charset - output charset
		 default: <locale>
			 
	language - output language
		 default: <locale>
			 
	root-menu - location of root menu file
		 default: /opt/gnome/etc/xdg/menus/applications.menu
			 
	die-on-error - abort execution on any error, 
		 default: try to continue

	verbose - print debugging information
		 
	help - print this text

update-menus

update-menus 从XDG内容更新窗口管理器的菜单,并可以使用配置自动完成。

这是xdg_menu的脚本包装器,它依赖于 /etc/update-menus.conf

你需要安装 archlinux-xdg-menu (xdg_menu)

/etc/update-menus.conf 从应该为其生成菜单的窗口管理器列表中进行选择。允许带#的内容。

所有生成的菜单都放在/var/cache/xdg-menu/中。有关更多信息,请参阅本页的“wm特定示例”部分。

示例

Awesome

使用 xdg_menu

$ xdg_menu --format awesome --root-menu /etc/xdg/menus/arch-applications.menu >~/.config/awesome/archmenu.lua

然后编辑 rc.lua ,如下所示

  • 为新的 menu.lua 文件添加一个要求的声明
  • 为调用 xdgmenu 的新菜单的 awful.menu 对象添加一个条目
...
xdg_menu = require("archmenu")
...

...
mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
                                    { "Applications", xdgmenu },
                                    { "open terminal", terminal }
                                  }
                        })
...

IceWM

使用 xdg_menu

$ xdg_menu --format icewm --fullmenu --root-menu /etc/xdg/menus/arch-applications.menu >>~/.icewm/programs

使用 update-menus

  • 在 /etc/update-menus.conf 取消对icewm的注释
  • 使用root用户运行 update-menus 命令
  • 将 ~/.icewm/programs 符号链接到 /var/cache/xdg-menu/icewm/programs

Ion3

使用 xdg_menu

$ xdg_menu --format ion3  --root-menu /etc/xdg/menus/arch-applications.menu >~/.ion3/default-session--0/_xdg-menu.lua

之后,将 cfg_menus.lua 更改为包含 _xdg-menu.lua 文件,并将菜单添加到主菜单中。例如:

...

dopath("_xdg-menu")

-- Main menu
defmenu("mainmenu", {
    submenu("XDG Menu",         "<NAME-OF-FIRST-MENU-IN-_xdg-menu.lua-FILE>"),
    submenu("Programs",         "appmenu"),
    menuentry("Lock screen",    "ioncore.exec_on(_, 'xlock')"),
    menuentry("Help",           "mod_query.query_man(_)"),
    menuentry("About Ion",      "mod_query.show_about_ion(_)"),
    submenu("Styles",           "stylemenu"),
    submenu("Session",          "sessionmenu"),
})

...

使用update-menus

  • 在 /etc/update-menus.conf 取消对ion3的注释
  • 使用root用户运行 update-menus 命令
  • 将 cfg_menus.lua 更改为包含 xdg-menu.lua 文件,并将菜单添加到主菜单中

例如:

...

dopath("/var/cache/xdg-menu/ion3/xdg-menu.lua")

-- Main menu
defmenu("mainmenu", {
    submenu("XDG Menu",         "<NAME-OF-FIRST-MENU-IN-xdg-menu.lua-FILE>"),
    submenu("Programs",         "appmenu"),
    menuentry("Lock screen",    "ioncore.exec_on(_, 'xlock')"),
    menuentry("Help",           "mod_query.query_man(_)"),
    menuentry("About Ion",      "mod_query.show_about_ion(_)"),
    submenu("Styles",           "stylemenu"),
    submenu("Session",          "sessionmenu"),
})

...

FluxBox

使用 xdg_menu

$ xdg_menu --format fluxbox  --root-menu /etc/xdg/menus/arch-applications.menu >~/.fluxbox/my-menu

将菜单文件更改为包含生成的菜单。

例如添加行:

      [include] (my-menu)

使用 update-menus

  • 在 /etc/update-menu.conf 中取消对fluxbox的注释
  • 使用root用户运行 update-menus
  • 将菜单文件更改为包含生成的菜单

例如添加行:

      [include] (/var/cache/xdg-menu/fluxbox/boxrc)

OpenBox

使用 xdg_menu

生成菜单:

$ xdg_menu --format openbox3 --root-menu /etc/xdg/menus/arch-applications.menu > xdg-menu.xml

然后手动将其添加到 menu.xml 中。例如,将 xdg-menu.xml 放入 menu.xml 并添加:

<menu id="Applications" />

进入根菜单。

作为管道菜单

使用 xdg_open 作为管道菜单,您可以获得额外的好处,即在安装新应用程序时,菜单会自动更新。

在 menu.xml 中的根菜单标记之间添加以下内容:

<menu id="applications" label="Applications" execute="xdg_menu --format openbox3-pipe --root-menu /etc/xdg/menus/arch-applications.menu" />

一个非常基本的例子:

<?xml version="1.0" encoding="UTF-8"?>

<openbox_menu xmlns="http://openbox.org/3.4/menu">

<menu id="root-menu" label="Openbox 3">
  <menu id="applications" label="Applications" execute="xdg_menu --format openbox3-pipe --root-menu /etc/xdg/menus/arch-applications.menu" />
  <separator />
  <item label="Log Out">
    <action name="Exit">
      <prompt>yes</prompt>
    </action>
  </item>
</menu>

</openbox_menu>

使用 update-menus

  • 在 /etc/update-menu.conf 中取消对openbox的注释
  • 以root用户运行 update-menus
  • 将 menu.xml 文件更改为包含生成的菜单

例如,在根菜单中添加以下内容:

<menu id="xdg-menu" label="XDG Menu" execute="cat /var/cache/xdg-menu/openbox/menu.xml"/>

Twm

使用 xdg_menu

使用

$ xdg_menu --format twm --root-menu /etc/xdg/menus/arch-applications.menu >my-twm-menu

并手动添加到 twmrc 中。对于具有m4预处理的twm衍生物,如vtwm或ctwm,可通过添加

sinclude(`/PATH/TO/my-twm-menu')

到 *twmrc.

使用 update-menus

  • 在 /etc/update-menu.conf 中取消对twm的注释
  • 添加到 /etc/X11/twm/system.twmrc 文件应用程序菜单中 (添加以下这行:
 "apps"          f.menu "Applications"

)到菜单中

  • 使用root用户运行 update-menus
  • 运行 twm -f /var/cache/xdg-menu/twm/twmrc

(您还需要将其他自定义项添加到 /etc/X11/twm/system.twmrc)

WindowMaker

使用 xdg_menu

使用

$ xdg_menu --format WindowMaker --root-menu /etc/xdg/menus/arch-applications.menu >my-wm-menu

然后添加

#include "my-wm-menu"

到你的 WindowMaker 菜单文件。

您还可以使用WPrefs“应用程序菜单定义”,并将xdg命令作为参数添加到“生成的子菜单”对象中。

使用 update-menus

  • 在 /etc/update-menus.conf 取消对 WindowMaker 的注释
  • 用root用户运行 update-menus
  • 添加
#include "/var/cache/xdg-menu/WindowMaker/wmrc"

到你的菜单文件

Fvwm2

使用 xdg_menu

生成菜单

$ xdg_menu --format fvwm2 --root-menu /etc/xdg/menus/arch-applications.menu >fvwm2-menu

然后把菜单添加到根菜单

read fvwm2-menu

AddToMenu MenuFvwmRoot  "Root Menu"             Title
+                       "&0. XDG Menu"          Popup xdg_menu

使用 update-menus

  • 在 /etc/update-menus.conf 取消对 fvwm2 的注释
  • 使用root用户运行 update-menus
  • 修改你的 .fvwm2rc 以使其包含创建的菜单,示例:
AddToMenu MenuFvwmRoot  "Root Menu"             Title
+                       "&0. XDG Menu"          Popup xdg_menu
read /var/cache/xdg-menu/fvwm2/fvwm2rc

BlackBox

使用 xdg_menu

$ xdg_menu --format blackbox  --root-menu /etc/xdg/menus/arch-applications.menu >my-menu

修改你的菜单文件以使其包含创建的菜单

例如添加:

[include] (my-menu)

使用 update-menus

  • 在 /etc/update-menus.conf 取消 blackbox 的注释
  • 使用root用户运行 update-menus
  • 更改你的菜单文件以使其包含创建的菜单

例如添加:

[include] (/var/cache/xdg-menu/blackbox/boxrc)

另请参见