Xdg-menu (简体中文) - ArchWiki

# Xdg-menu (简体中文)

From ArchWiki
Jump to navigation Jump to search
翻译状态： 本文是 Xdg-menu 的本地化版本。上次翻译日期：2020-04-10。如果英文版本有所更改 ，则您可以帮助同步翻译。

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

- awesome
- Blackbox
- Fluxbox
- FVWM2
- IceWM
- ion3
- 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 (简体中文)