Xdg-menu

出自 Arch Linux 中文维基

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)

另請參見[編輯 | 編輯原始碼]