메뉴 정의 파일

메뉴 파일은 그놈 메뉴 모음에서 사용되는 메뉴들의 계층 구조를 정의합니다. 이 파일을 수정하여 모든 사용자에게 적용되는 메뉴를 조정하거나, 지정한 applications.menu 파일의 위치에 따라 특정 사용자에게 적용되는 메뉴를 조정할 수 있습니다.

메뉴 파일은 $XDG_CONFIG_DIRS/menus/applications.menu 파일입니다. 만약 $XDG_CONFIG_DIRS1 변수가 설정되어 있지 않다면, 기본 경로인 /etc/xdg가 사용됩니다. 이것은 사용자가 수정한 버전의 파일은 $XDG_CONFIG_HOME/menus/applications.menu에 존재할 수 있으며, 이 경우 해당 파일이 먼저 사용된다는 것을 의미합니다. 만약 $XDG_CONFIG_HOME 변수가 설정되어 있지 않으면, 기본 경로인 ~/.config가 사용됩니다. 여러 개의 applications.menu 파일이 존재하는 경우에는 $XDG_CONFIG_DIRS 변수 내에서 먼저 나오는 디렉토리가 우선 순위를 가집니다. 이 경우 첫 번째로 찾은 파일이 사용되며 나머지는 무시됩니다.

어떤 순서로 경로를 검색하는지 혼동스러운 사람들을 위해, 아래에서 applications.menu 파일의 위치를 찾기 위한 경로의 목록을 설명합니다:

  1. $XDG_CONFIG_HOME 변수 내의 각 디렉토리를 순서대로 검색하여 menus/applications.menu 파일을 찾습니다. 만약 $XDG_CONFIG_HOME 변수가 설정되지 않았다면, 기본 값인 ~/.config/ 디렉토리가 사용됩니다.
  2. $XDG_CONFIG_DIRS 변수 내의 각 디렉토리를 순서대로 검색하여 menus/applications.menu 파일을 찾습니다. 만약 $XDG_CONFIG_DIRS 변수가 설정되지 않았다면, 기본 값인 /etc/xdg/ 디렉토리가 사용됩니다.
  3. 처음으로 찾은 applications.menu 파일을 사용합니다.

예제 2-1 부분에서 .menu 파일의 예를 보여줍니다. 이 예제에서 최상위 메뉴는 Applications이며, 이는 <Name> 엘리먼트에서 볼 수 있습니다. Applications 메뉴는 하나의 하위 메뉴 만을 포함하지만, 여러 개의 하위 메뉴를 가질 수도 있습니다. 각 하위 메뉴는 <Include> 엘리먼트를 가질 수 있습니다. <Include> 엘리먼트는 매칭 규칙을 사용하여 적절한 데스크탑 엔트리를 걸러내는 작업을 위해 사용됩니다.

예르 들어 <Category> 엘리먼트는 오직 분류<Category> 엘리먼트의 내용을 포함하는 데스크탑 엔트리를 선택하는 기본 매칭 규칙입니다. 이 예제에서 Accessories 메뉴는 분류 키에 “Utility”를 포함하지만 “System”을 포함하지 않는 데스크탑 엔트리 만을 포함할 것입니다. 분류 키에 대한 자세한 정보는 2.3항 ― 데스크탑 엔트리 파일 부분을 보기 바랍니다.

예제 2-1.menu 파일의 예

<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
 "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
<Menu>
  <Name>Applications</Name>
  <Directory>Applications.directory</Directory>

  <!-- Read standard .directory and .desktop file locations -->
  <DefaultAppDirs/>
  <DefaultDirectoryDirs/>

  <!-- Accessories submenu -->
  <Menu>
    <Name>Accessories</Name>
    <Directory>Accessories.directory</Directory>
    <Include>
      <And>
        <Category>Utility</Category>
        <Not>
          <Category>System</Category>
        </Not>
      </And>
    </Include>
  </Menu> <!-- End Accessories -->

  <!-- possibly more submenus -->

</Menu> <!-- End Applications -->

표 2-1.menu 파일 내의 엘리먼트 중의 일부에 대해 설명합니다. 보다 자세한 내용은 XDG 메뉴 명세서를 보기 바랍니다.

표 2-1메뉴 정의 파일 엘리먼트
엘리먼트 설명
<Menu> 최상위 엘리먼트이며, 하위 메뉴를 정의하는 <Menu> 엘리먼트를 내부에 포함할 수 있습니다. 이러한 하위 메뉴의 배치가 메뉴 구조를 결정합니다.
<Name> 메뉴의 이름을 지정합니다. 모든 <Menu> 엘리먼트는 반드시 <Name> 엘리먼트를 포함해야 합니다.
<Directory>

메뉴의 이름, 설명, 아이콘 등을 포함하는 디렉토리 엔트리 파일의 이름을 지정합니다. 만약 이 엘리먼트가 없다면 <Name> 엘리먼트의 내용이 메뉴의 이름으로 표시됩니다.

기본적으로 XDG 메뉴 명세서에서 지정한 대로 $XDG_DATA_DIRS/desktop-directories/ 위치 내에서 .directory 파일을 검색합니다.

<DefaultAppDirs> 이것은 $XDG_DATA_DIRS/applications/ 내에서 이용 가능한 모든 데스크탑 엔트리를 찾으라는 지시입니다. 만약 이러한 지시가 포함되지 않았다면 이 위치에서는 데스크탑 엔트리를 찾지 않을 것입니다.
<DefaultDirectoryDirs> 이것은 $XDG_DATA_DIRS/desktop-directories/ 내에서 이용 가능한 모든 디렉토리 엔트리를 찾으라는 지시입니다. 만약 이러한 지시가 포함되지 않았다면 이 위치에서는 디렉토리 엔트리를 찾지 않을 것입니다.
<Include> 메뉴의 내용을 만들어 낼 매칭 규칙의 목록을 포함합니다. 여기에는 <Filename>, <Category>, <And>, <Or>, <Not>, <All> 등의 매칭 규칙이 사용될 수 있습니다. 만약 하나 이상의 규칙이 포함되면 각 규칙들은 논리합(logical OR)으로 연결되므로, 이러한 규칙 중 어느 하나라도 만족하는 데스크탑 엔트리는 모두 포함됩니다.
<Exclude> <Include>와 반대되는 엘리먼트로 이 엘리먼트 내의 규칙에 매칭되는 모든 데스크탑 엔트리는 포함된 엘리먼트 집합에서 제외됩니다. 따라서 이 엘리먼트는 반드시 <Include> 엘리먼트 보다 뒤에 나와야 합니다.
<Filename> 데스크탑 파일 ID가 <Filename> 엘리먼트의 내용과 일치할 때 데스크탑 엔트리를 선택하는 매칭 규칙.
<Category> 분류 키가 <Category> 엘리먼트의 내용과 일치할 때 데스크탑 엔트리를 선택하는 매칭 규칙.
<And> <And> 엘리먼트 내에 포함된 모든 매칭 규칙들과 일치할 때 데스크탑 엔트리를 선택하는 매칭 규칙.
<Or> <Or> 엘리먼트 내에 포함된 어떤 매칭 규칙들과 일치할 때 데스크탑 엔트리를 선택하는 매칭 규칙.
<Not> <Not> 엘리먼트 내에 포함된 어떤 매칭 규칙들과 일치할 때 데스크탑 엔트리를 선택하지 않는 매칭 규칙.
<All> 모든 데스크탑 엔트리를 선택하는 매칭 규칙.
1

$XDG_CONFIG_DIRS는 XDG 기본 디렉토리 명세서에 정의된 환경 변수입니다.