ユーザ・メニューを編集したり複数のメニューをまとめる

次の GNOME アプリケーションを使ってユーザ毎に自分のメニューを編集できるようになっています:

  • GNOME メニュー・エディタまたはメイン・メニュー (alacarte)

ユーザが自分のメニューを編集する際に利用できるシンプルなメニュー・エディタがあります。詳細については GNOME ユーザ・ガイドにある「メイン・メニューの使い方」をご覧ください (訳注: GNOME 2.22 ではメニュー・エディタに関連するドキュメントは存在しません)。あるいは、手動でメニュー関連のファイルを作成したり編集できます。

ユーザが独自にメニューを定義する際は、$XDG_CONFIG_HOME/menus/applications.menu というユーザ専用のファイルが必要になります。。環境変数である $XDG_CONFIG_HOME がセットされていない場合はデフォルト値の ~/.config を使用します。これは applications.menu ファイルを探す際に一番最初に解析するフォルダなので、その他のフォルダよりも優先されます。

ユーザ定義のメニューでは「セクション 2.2 - いろいろなメニュー定義ファイル」で説明した全ての要素を利用できます。他にもいろいろ利用可能な要素があるので、詳細は「XDG メニューの仕様」をご覧ください。

ユーザ定義のメニューはシステム規模のメニューよりも優先されるようになっているので、システム規模のメニューと明示的に結合しない限り、ユーザ定義のメニューがシステム規模のそれを完全に上書きするような仕組みになっています。この次のセクションでメニューの結合について説明します。

2.6.1. システム規模のメニューと結合してまとめる

たまに標準的なシステム規模のメニューに加えて何かメニュー項目を追加したり、使わないメニュー項目を削除したい場合があります。このような場合は、ユーザ専用の applications.menu ファイルの中で type="parent" という属性を持つ <MergeFile> という要素を使うことをお薦めします。

<MergeFile> という要素を使うと、システム規模のメニューでユーザ専用のメニューと結合してまとめることができるようになります。ここで type="parent" という属性を指定すると、<MergeFile> 要素の内容を無視して $XDG_CONFIG_DIRS/menus フォルダの中にある applications.menu ファイルの方を結合します。

古い仕様では

以前の仕様では type という属性を使わずに、単に結合するメニュー定義ファイルのパスを指定し <MergeFile> 要素の内容を結合していただけでした。そのため、現在でも type="parent" を指定した場合 <MergeFile> 要素を使ってメニュー定義ファイルのパスを指定するようになっています。

メニューの結合は次のように実施されます:

  • 結合してまとめたメニュー定義ファイル1 の中にある <Menu> 要素の配下にある子要素がベースのメニュー定義ファイルにある <MergeFile> 要素のかわりになります。
  • <Menu> 要素の配下にある同名の子要素がすべて一個の <Menu> 要素に統合されます。これは、<Menu> 要素毎に同じ名前を持つ子要素をすべてメニュー要素の最後に出現するメニュー要素として追加することで実現しています。

例 2-3 にシステム規模のメニュー定義ファイルとユーザ定義のメニューとを明示的に結合しまとめた例を示します。

例 2-3システム規模のメニューと結合してまとめる
<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
 "http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">

<Menu>
  <Name>Applications</Name>
  <MergeFile type="parent">/etc/xdg/menus/applications.menu</MergeFile>
  <Menu>
    <Name>Accessibility</Name>
    <Exclude>
      <Filename>dasher.desktop</Filename>
    </Exclude>
  </Menu>
</Menu>

2.6.2. 独自のメニューを結合しまとめる

独自のメニュー定義ファイルをシステム規模のメニューと同じ方法で結合しまとめることができるようになっています。異なる点は type という属性を path に指定するか、または <MergeFile> 要素から削除してこの類の結合を行えるようにすることです。

マージするメニュー定義ファイルが格納されている場所を <MergeFile> 要素のデータとして指定することを除いて、システム規模のメニューの結合と同じように処理されます。

1

結合したメニュー定義ファイルは $XDG_CONFIG_DIRS/menus フォルダの中にある applications.menu ファイルを参照します。