Xdg-menu (简体中文)
xdg-menu是一个为以下窗口管理器生成xdg桌面菜单的工具:
KDE, Gnome, Xfce, Enlightenment已经与XDG兼容。
安装
菜单层次结构
- 应用
- 辅助功能
- 配饰
- 开发
- 教育
- 游戏
- 图形
- 互联网
- 多媒体
- 办公
- 其他
- 科学
- 系统
配置
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 [--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 从XDG内容更新窗口管理器的菜单,并可以使用配置自动完成。
这是xdg_menu的脚本包装器,它依赖于 /etc/update-menus.conf
你需要安装 archlinux-xdg-menu (xdg_menu)
/etc/update-menus.conf
从应该为其生成菜单的窗口管理器列表中进行选择。允许带#的内容。
所有生成的菜单都放在/var/cache/xdg-menu/
中。有关更多信息,请参阅本页的“wm特定示例”部分。
示例
Awesome
$ 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 --format icewm --fullmenu --root-menu /etc/xdg/menus/arch-applications.menu >>~/.icewm/programs
- 在 /etc/update-menus.conf 取消对icewm的注释
- 使用root用户运行 update-menus 命令
- 将 ~/.icewm/programs 符号链接到 /var/cache/xdg-menu/icewm/programs
Ion3
$ 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"), }) ...
- 在 /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 --format fluxbox --root-menu /etc/xdg/menus/arch-applications.menu >~/.fluxbox/my-menu
将菜单文件更改为包含生成的菜单。
例如添加行:
[include] (my-menu)
- 在 /etc/update-menu.conf 中取消对fluxbox的注释
- 使用root用户运行 update-menus
- 将菜单文件更改为包含生成的菜单
例如添加行:
[include] (/var/cache/xdg-menu/fluxbox/boxrc)
OpenBox
生成菜单:
$ 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>
- 在 /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 --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.
- 在 /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 --format WindowMaker --root-menu /etc/xdg/menus/arch-applications.menu >my-wm-menu
然后添加
#include "my-wm-menu"
到你的 WindowMaker 菜单文件。
您还可以使用WPrefs“应用程序菜单定义”,并将xdg命令作为参数添加到“生成的子菜单”对象中。
- 在 /etc/update-menus.conf 取消对 WindowMaker 的注释
- 用root用户运行 update-menus
- 添加
#include "/var/cache/xdg-menu/WindowMaker/wmrc"
到你的菜单文件
Fvwm2
生成菜单
$ 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
- 在 /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 --format blackbox --root-menu /etc/xdg/menus/arch-applications.menu >my-menu
修改你的菜单文件以使其包含创建的菜单
例如添加:
[include] (my-menu)
- 在 /etc/update-menus.conf 取消 blackbox 的注释
- 使用root用户运行 update-menus
- 更改你的菜单文件以使其包含创建的菜单
例如添加:
[include] (/var/cache/xdg-menu/blackbox/boxrc)