wiki:EditAppMenu

Edición del menú de aplicaciones

Los ficheros importantes aquí son:

  • /usr/local/share/applications: Ficheros .desktop para cada aplicación. Especial mención al apartado Categories que marca donde saldrán en el menú.
  • /usr/local/share/desktop-directories: Ficheros .directory, que se corresponden con cada carpeta o subcarpeta.
  • /usr/local/etc/xdg/menus: Ficheros .menu que son la materialización del .directory en nuestro menú.

Ejemplos:

.desktop

[Desktop Entry]
Name=Arduino
Comment=Launcher for Arduino
Exec=/usr/local/opt/arduino/arduino-1.6.3/arduino
Icon=/usr/local/opt/arduino/arduino-1.6.3/reference/arduino.cc/img/logo_46.png
Categories=Application;Development;IDE;
Version=1.6.3
Type=Application
Terminal=true

.directory

[Desktop Entry]
Encoding=UTF-8
Name=Entornos de desarrollo (IDE)

.menu

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

Por ejemplo, en el caso de arduino.desktop, como lleva IDE en el category sale en ese menú que hemos creado.

Para que un menú se presente como submenú de otro, debe estar en el XML del padre referenciado, tal que así:

  <!-- Development Tools -->
  <Menu>
    <Name>Development</Name>
    <Directory>Development.directory</Directory>
    <Include>
      <And>
        <Category>Development</Category>
      </And>
      <Filename>emacs.desktop</Filename>
    </Include>

    <Menu>
       <Name>Matlab</Name>
       <Directory>Matlab.directory</Directory>
       <MergeFile>Matlab.menu</MergeFile>
    </Menu>
    <Menu>
       <Name>Entorno de desarrollo (IDE)</Name>
       <Directory>Ides.directory</Directory>
       <MergeFile>Ides.menu</MergeFile>
    </Menu>

  </Menu> <!-- End Development Tools -->

Este cacho de fchero es de applications.menu, que está en el sitio de los .menu. Este fichero es monolítico, pero realmente se podría descomponer en otros más pequeños que se correspondieran con las entradas principales del menú, como "Development", "Office", etc. usando el tag <include> para incluirlos tal como se hace en este documento de freedesktop (Utiliza el tag Filename).

Para evitar que algo salga repetido en varios menús, o bien se deja una sola categoría o se usa la opción OnlyShowIn tal como especifica el documento anterior del que aquí está el párrafo:

If you add the line OnlyShowIn?=Old; to a desktop entry, then old legacy implementations that ignore OnlyShowIn? will still show the desktop entry, but implementations of this specification will not. Thus you can add an "OnlyShowIn?=Old;" entry to the legacy hierarchy, and a new-style desktop entry to datadir/applications/, and still get only one entry in the menus.

Last modified 4 years ago Last modified on Nov 20, 2019, 1:44:17 PM