# Xdg-menu (简体中文)

From ArchWiki
Jump to navigation Jump to search
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桌面菜单的工具：

- awesome
- Blackbox
- Fluxbox
- FVWM2
- IceWM
- ion3[archived page]
- Openbox
- twm
- Window Maker

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)

## 另请参见

- Sawfish#Menus
- https://github.com/gapan/xdgmenumaker

Category:

- Freedesktop.org (简体中文)

Hidden category:

- Pages with links to archived pages