Manualinux
http://www.nvu.com http://www.gimp.org InicioPresentaciónActualizacionesManualesDescargasNoticiasAgradecimientoEnlaces

Entornos GráficosAplicaciones

Administradores de SesionesAdministradores de VentanasEscritoriosUtilidades de Escritorio

Utilidades de Escritorio - XcompmgrUtilidades de Escritorio - Xonclock

Utilidades de Escritorio - Xdgmenumaker




Utilidades de Escritorio - Xdgmenumaker




Copyright

Copyright © José Luis Lara Carrascal  2015-2023   http://manualinux.es



Sumario

Introducción
Instalación
Opciones de línea de comandos
Configurar los menús de los administradores de ventanas
Paquetes precompilados
Enlaces




Introducción  

Xdgmenumaker
es una utilidad de línea de comandos escrita en Python, que escanea los directorios de ubicación de los archivos desktop, establecidos con la variable de entorno XDG_DATA_DIRS, volcando en la salidad estándar un menú de aplicaciones categorizado, acorde a la especificación estándar de freedesktop.org, similar a los que utilizan entornos como XFce 4 o paneles como LXPanel o Fbpanel.

La idea del programa consiste en proporcionar a los administradores de ventanas, Blackbox, Fluxbox, Fvwm, IceWM, JWM, Pekwm y Window Maker, un submenú de aplicaciones acorde a dicha especificación estándar, utilizando el formato nativo de menú especifíco de cada administrador de ventanas. En este manual, iremos un poco más lejos de la idea inicial del programa, para que dicho submenú se convierta de facto en un menú raíz actualizable desde el propio menú del administrador de ventanas. De momento, no se incluye la configuración para Fvwm, debido a problemas de redimensionado con el tamaño de los iconos.



Instalación  

Dependencias

Herramientas de Compilación

Entre paréntesis la versión con la que se ha instalado Xdgmenumaker para la elaboración de este documento.

* Make - (4.4.1)

Intérpretes de Lenguaje de Programación

* Python - (3.11.4)

Módulos de Python

* Pillow - (9.5.0) - opcional
* PyGobject - (3.42.2)
* PyXDG - (0.28)

Aplicaciones

* Txt2tags - (2.6) [1]
GNU ed - (1.19) [2]

[1] Requerido para poder crear la página de manual del programa.
[2] Requerido por los scripts de actualización del menú raíz de aplicaciones, proporcionados en el manual.



Descarga

xdgmenumaker-2.1.tar.gz  |  xdgmenumaker_error-UTF-8.diff

Extracción y Compilación  Bloc de Notas Información general sobre el uso de los comandos

$ tar zxvf xdgmenumaker-2.1.tar.gz
$ cd xdgmenumaker-2.1
$ patch -Np1 -i ../xdgmenumaker_error-UTF-8.diff
$ make

Explicación de los comandos

patch -Np1 -i ../xdgmenumaker_error-UTF-8.diff : Aplicamos este parche del autor del programa, que soluciona un error de generación del menú, producido por archivos desktop con codificación de caracteres incorrecta. El mensaje de error es el siguiente:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xd1 in position 70: invalid continuation byte

Más información con la ubicación del parche original en este enlace.

Instalación como root

$ su -c "make install PREFIX=/usr"

Estadísticas de Instalación de Xdgmenumaker

Estadísticas de Instalación de Xdgmenumaker
Sistema de archivos XFS
Archivos instalados 14
Mostrar/Ocultar la lista de archivos instalados
Ocupación de espacio en disco 140 KB

Desinstalación como root

1) MODO TRADICIONAL

En el directorio de compilación ejecutamos el siguiente comando:

# su -c "make uninstall PREFIX=/usr"

2) MODO MANUALINUX

El principal inconveniente del comando anterior es que tenemos que tener el directorio de compilación en nuestro sistema para poder desinstalar el programa. En algunos casos esto supone muchos megas de espacio en disco. Con el paquete de scripts que pongo a continuación logramos evitar el único inconveniente que tiene la compilación de programas, y es el tema de la desinstalación de los mismos sin la necesidad de tener obligatoriamente una copia de las fuentes compiladas.

xdgmenumaker-2.1-scripts.tar.gz

$ su
# tar zxvf xdgmenumaker-2.1-scripts.tar.gz
# cd xdgmenumaker-2.1-scripts
# ./Desinstalar_xdgmenumaker-2.1

Copia de Seguridad como root

Con este otro script creamos una copia de seguridad de los archivos instalados, recreando la estructura de directorios de los mismos en un directorio de copias de seguridad (copibin) que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de los binarios podemos copiarlo como usuario a nuestro home y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos volver a restaurar la copia, tendremos que volver a copiarlo al lugar donde se ha creado.

$ su
# tar zxvf xdgmenumaker-2.1-scripts.tar.gz
# cd xdgmenumaker-2.1-scripts
# ./Respaldar_xdgmenumaker-2.1

Restaurar la Copia de Seguridad como root

Y con este otro script (que se copia de forma automática cuando creamos la copia de respaldo del programa) restauramos la copia de seguridad como root cuando resulte necesario.

$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_xdgmenumaker-2.1



Opciones de línea de comandos

A continuación pongo las opciones de línea de comandos del programa con los comentarios traducidos al español.

[jose@localhost ~]$ xdgmenumaker -h

OPCIONES:
    -f, --format         el formato de salida a usar. Las opciones válidas son amiwm, blackbox, compizboxmenu,
                         fluxbox, fvwm, twm, icewm, jwm, windowmaker y pekwm
    -i, --icons          activa el soporte de iconos en los menús. No funciona con windowmaker o amiwm
        --no-svg         no utiliza los iconos en formato SVG en los gestores de ventanas que lo soporten
    -s, --size           el tamaño preferido de icono en píxeles (predefinido: 16)
    -n, --no-submenu     no crea un submenú. No funciona con windowmaker o amiwm
        --max-icon-size  restringe el tamaño de icono a un tamaño expecífico
        --pekwm-dynamic  genera menús dinámicos para pekwm
        --twm-titles     muestra los títulos del menú en los menú de twm
    -h, --help           muestra este mensaje de ayuda
  Usted tiene que especificar el formato de salida usando el parámetro -f.

EJEMPLOS:
    xdgmenumaker -f windowmaker
    xdgmenumaker -i -f fluxbox



Configurar los menús de los administradores de ventanas   

1) Comprobar la variable de entorno XDG_DATA_DIRS
2) Configurar el menú de Fluxbox
3) Configurar el menú de IceWM
4) Configurar el menú de JWM
5) Configurar el menú de Pekwm
6) Configurar el menú de Window Maker
7) Configurar el menú de Blackbox



1) Comprobar la variable de entorno XDG_DATA_DIRS para saber los directorios que tenemos configurados para crear el menú de aplicaciones

Abrimos una ventana de terminal y ejecutamos el siguiente comando. Un ejemplo con openSUSE:

jose@linux-2frl:~> echo $XDG_DATA_DIRS
/usr/local/share:/usr/share

En este caso, tenemos configurados los archivos desktop ubicados en /usr/share/applications y /usr/local/share/applications. Hacer siempre esto desde el administrador de ventanas, nunca desde entornos de escritorio como KDE o GNOME, que utilizan sus propias variables de entorno XDG_DATA_DIRS.

Para evitar problemas y teniendo en cuenta que cada distribución es un mundo, lo mejor es establecer una variable de entorno XDG_DATA_DIRS personal, que añadiremos al archivo de configuración personal, ~/.bashrc.

Abrimos con un editor de texto, el archivo de configuración personal, ~/.bashrc, si no existe lo creamos, y añadimos lo siguiente:

export XDG_DATA_DIRS=/usr/share:/usr/local/share:$HOME/.local/share:$XDG_DATA_DIRS

Lo guardamos, cerramos la ventana de terminal y la volvemos a abrir, ejecutando el mismo comando de comprobación que hemos realizado antes.



2) Configurar el menú de Fluxbox  

2a) Crear un submenú de aplicaciones con iconos actualizable desde el menú de aplicaciones de Fluxbox

Abrimos una ventana de terminal y ejecutamos lo siguiente:

$ xdgmenumaker -if fluxbox > ~/.fluxbox/menu_xdg

Sistemas con las locales en ISO-8859-15
$ xdgmenumaker -if fluxbox | iconv -f UTF-8 -t ISO-8859-15 > ~/.fluxbox/menu_xdg
$ sed -i 's:): &:g' ~/.fluxbox/menu_xdg

Abrimos con un editor de texto el archivo de configuración del menú de Fluxbox y añadimos lo que está en rojo al comienzo del mismo:

~/.fluxbox/menu
[begin] (Fluxbox-1.3.7)
[encoding] {ISO-8859-15}
      [exec] (Eterm) {Eterm}
      [exec] (firefox) {firefox}
      [exec]   (Ejecutar) {fbrun}
[include] (~/.fluxbox/menu_xdg)
[submenu] (Terminales)

Modificamos la entrada del menú Herramienta >> Regenerar Menú, para que actualice el menú proporcionado por Xdgmenumaker, en lugar del menú raíz que implica el borrado de la entrada añadida anteriormente.

[submenu] (Herramienta)
      [exec]   (fluxconf) {fluxconf}
      [exec]   (fluxkeys) {fluxkeys}
      [exec]   (fluxmenu) {fluxmenu}
      [exec] (Fluxbox panel) {fbpanel}
      [exec] (Nombre de Ventana) {xprop WM_CLASS|cut -d \" -f 2|xmessage -file - -center}
      [exec] (Captura de Pantalla - JPG) {import screenshot.jpg && display -resize 50% screenshot.jpg}
      [exec] (Captura de Pantalla - PNG) {import screenshot.png && display -resize 50% screenshot.png}
      [exec] (Ejecutar) {fbrun}
      [exec] (gtk-theme-switch) {switch}
      [exec] (gtk2-theme-switch) {switch2}
      [exec] (Regenerar Menú) {
xdgmenumaker -if fluxbox > ~/.fluxbox/menu_xdg}



Aspecto visual del menú

Captura Xdgmenumaker - Fluxbox - 1




2b) Crear un menú raíz de aplicaciones con iconos actualizable desde el menú de aplicaciones de Fluxbox

El submenú que genera de forma automática, lo insertaremos en el menú raíz de aplicaciones del administrador de ventanas, sobreescribiendo el comando de regeneración del menú interno de Fluxbox, por un script personal, que ubicaremos en el directorio de configuración personal de Fluxbox en nuestro home.

Abrimos con un editor de texto el archivo de configuración del menú, y añadimos lo que está en rojo:

Marca de inicio del bloque del menú >> #XDGSTART
# Generated by fluxbox-generate_menu
#
# If you read this it means you want to edit this file manually, so here
# are some useful tips:
#
# - You can add your own menu-entries to ~/.fluxbox/usermenu
#
# - If you miss apps please let me know and I will add them for the next
#   release.
#
# - The -r option prevents removing of empty menu entries and lines which
#   makes things much more readable.
#
# - To prevent any other app from overwriting your menu
#   you can change the menu name in ~/.fluxbox/init to:
#     session.menuFile: ~/.fluxbox/my-menu
[begin] (Fluxbox-1.3.7)
[encoding] {ISO-8859-15}
      [exec] (Eterm) {Eterm}
      [exec] (firefox) {firefox}
      [exec]   (Ejecutar) {fbrun}
#XDGSTART
[submenu] (Terminales)

Marca de final del bloque del menú >> #XDGEND
      [exec]   (firestarter) {firestarter}
      [exec]   (top) {Eterm -e top}
      [exec]   (htop) {Eterm -e htop}
[end]
#XDGEND

[submenu] (Menú fluxbox)
      [config] (Configurar)
[submenu] (Estilos del Sistema) {Escoge un Estilo...}
      [stylesdir] (/usr/X11R7/share/fluxbox/styles)
[end]
[submenu] (Estilos del Usuario) {Escoge un Estilo...}
      [stylesdir] (~/.fluxbox/styles)
[end]
      [workspaces] (Lista de Escritorios)
[submenu] (Herramienta)
      [exec]   (fluxconf) {fluxconf}
      [exec]   (fluxkeys) {fluxkeys}
      [exec]   (fluxmenu) {fluxmenu}
      [exec] (Fluxbox panel) {fbpanel}
      [exec] (Nombre de Ventana) {xprop WM_CLASS|cut -d \" -f 2|xmessage -file - -center}
      [exec] (Captura de Pantalla - JPG) {import screenshot.jpg && display -resize 50% screenshot.jpg}
      [exec] (Captura de Pantalla - PNG) {import screenshot.png && display -resize 50% screenshot.png}
      [exec] (Ejecutar) {fbrun}
      [exec] (gtk-theme-switch) {switch}
      [exec] (gtk2-theme-switch) {switch2}
      [exec] (Regenerar Menú) {~/.fluxbox/xdgmenu.sh}
[end]

Abrimos un editor de texto y añadimos lo siguiente:

#!/bin/sh

xdgmenumaker -nif fluxbox > /tmp/menuxdg.txt
ed -s ~/.fluxbox/menu <<EOF
/#XDGSTART/+,/#XDGEND/-d
/#XDGSTART/ r /tmp/menuxdg.txt
w
q
EOF

Sistemas con las locales en ISO-8859-15
#!/bin/sh

xdgmenumaker -nif fluxbox | iconv -f UTF-8 -t ISO-8859-15 > /tmp/menuxdg.txt
ed -s ~/.fluxbox/menu <<EOF
/#XDGSTART/+,/#XDGEND/-d
/#XDGSTART/ r /tmp/menuxdg.txt
w
q
EOF
sed -i 's:): &:g' ~/.fluxbox/menu

Lo guardamos con el nombre xdgmenu.sh, le damos permisos de ejecución y lo copiamos al directorio de configuración personal de Fluxbox en nuestro home.

$ chmod +x xdgmenu.sh
$ cp xdgmenu.sh ~/.fluxbox/xdgmenu.sh

Cuando seleccionemos en el menú de Fluxbox, Herramienta >> Regenerar Menú, las categorías proporcionadas por el menú predefinido de Fluxbox, serán sustituidas por las proporcionadas por Xdgmenumaker. El uso de este método impide la edición gráfica del menú con utilidades como Fluxmenu o Fluxbox Menu Editor, ya que éstas borran las marcas de comienzo y final del bloque que constituye el menú insertado. Tener en cuenta que Fluxbox tiene su propio script de generación automática del menú, por lo que el uso de Xdgmenumaker no resulta estrictamente necesario.



Aspecto visual del menú

Captura Xdgmenumaker - Fluxbox - 2




3) Configurar el menú de IceWM

3a) Crear un submenú de aplicaciones con iconos actualizable desde el menú de aplicaciones de IceWM

Abrimos una ventana de terminal y ejecutamos lo siguiente:

$ xdgmenumaker -if icewm > ~/.icewm/menu_xdg

Sistemas con las locales en ISO-8859-15
$ xdgmenumaker -if icewm | iconv -f UTF-8 -t ISO-8859-15 > ~/.icewm/menu_xdg

Abrimos con un editor de texto el archivo de configuración del menú de IceWM y añadimos lo que está en rojo al comienzo del mismo:

~/.icewm/menu
include menu_xdg
menu Desarrollo folder {
    prog Fluid - fluid
    prog "Glade Interface Designer" - glade-2
    prog IDLE - idle
    prog Poedit - poedit
    prog "Qt Linguist" - linguist
    prog "Qt3 Designer" - designer-qt3
    prog "SciTE Text Editor" - SciTE
}
# End of Desarrollo menu

menu Editores folder {
    prog Avidemux - icerrun.py avidemux2
    prog "Bloc de Notas" - notepad

Creamos otra entrada en el menú para actualizar dicho menú, cuando instalemos o borremos aplicaciones de nuestro sistema, que soporten archivos desktop. Los usuarios que no tengan las locales en UTF-8, utilizar el comando de ejemplo de arriba, para añadir al menú.

menu Recientes folder {
    include /home/jose/.icewm/recent.menu
}
# End of Recientes menu

prog "Regenerar Menú XDG" - xdgmenumaker -if icewm > ~/.icewm/menu_xdg

separator
prog "IceWM Control Center" icerrun.py icecc

El menú de ejemplo ha sido creado con MenuMaker, tal como se explica en la sección Editar el Menú de IceWM, del manual ubicado en la web.



Aspecto visual del menú

Captura Xdgmenumaker - IceWM - 1



3b) Crear un menú raíz de aplicaciones con iconos actualizable desde el menú de aplicaciones de IceWM

El submenú que genera de forma automática, lo insertaremos en el menú raíz de aplicaciones del administrador de ventanas, sobreescribiendo el comando de regeneración del menú XDG anterior, por un script personal, que ubicaremos en el directorio de configuración personal de IceWM en nuestro home.

Abrimos con un editor de texto el archivo de configuración del menú, y añadimos lo que está en rojo:

Marca de inicio del bloque del menú >> #XDGSTART
#XDGSTART
menu Desarrollo folder {
    prog Fluid - fluid
    prog "Glade Interface Designer" - glade-2
    prog IDLE - idle
    prog Poedit - poedit
    prog "Qt Linguist" - linguist
    prog "Qt3 Designer" - designer-qt3
    prog "SciTE Text Editor" - SciTE
}
# End of Desarrollo menu

Marca de final del bloque del menú >> #XDGEND
menu Utilidades folder {
    prog AllTray - alltray
    prog "Archive Manager" - file-roller
    prog "Bluetooth Analyzer" - bluetooth-analyzer
    prog Dictionary - gnome-dictionary
    prog "Figaro's Password Manager 2" - fpm2
    prog gMUTOO - gmutoo
    prog Graveman - graveman
    prog KDocker - kdocker
    prog "Nao File Manager" - nao
    prog "Removable media catalog managment" - gwhere
    prog "Take Screenshot" - gnome-screenshot
    prog WbarConf - wbarconf
    prog Xarchiver - xarchiver
    prog "Xfce 4 Appfinder" - xfce4-appfinder
    prog "Xfce 4 Print Dialog" - xfprint4
    prog "Xfce 4 Print Manager" - xfprint4-manager
    prog Xmag - xmag
}
# End of Utilidades menu
#XDGEND


menu Recientes folder {
    include /home/jose/.icewm/recent.menu
}
# End of Recientes menu

separator
prog "Regenerar Menú" - /home/jose/.icewm/xdgmenu.sh
separator
prog "IceWM Control Center" icerrun.py icecc


Abrimos un editor de texto y añadimos lo siguiente:

#!/bin/sh

xdgmenumaker -nif icewm > /tmp/menuxdg.txt
ed -s ~/.icewm/menu <<EOF
/#XDGSTART/+,/#XDGEND/-d
/#XDGSTART/ r /tmp/menuxdg.txt
w
q
EOF

Sistemas con las locales en ISO-8859-15
#!/bin/sh

xdgmenumaker -nif icewm | iconv -f UTF-8 -t ISO-8859-15 > ~/tmp/menuxdg.txt
ed -s ~/.icewm/menu <<EOF
/#XDGSTART/+,/#XDGEND/-d
/#XDGSTART/ r /tmp/menuxdg.txt
w
q
EOF

Lo guardamos con el nombre xdgmenu.sh, le damos permisos de ejecución y lo copiamos al directorio de configuración personal de IceWM en nuestro home.

$ chmod +x xdgmenu.sh
$ cp xdgmenu.sh ~/.icewm/xdgmenu.sh

Cuando seleccionemos en el menú de IceWMRegenerar Menú, las categorías proporcionadas por el menú generado por MenuMaker, serán sustituidas por las proporcionadas por Xdgmenumaker.


 
Aspecto visual del menú

Captura Xdgmenumaker - IceWM - 2




4) Configurar el menú de JWM  

4a) Crear un submenú de aplicaciones con iconos actualizable desde el menú de aplicaciones de JWM


Abrimos una ventana de terminal y ejecutamos lo siguiente:

$ xdgmenumaker -s24 -if jwm > ~/.jwm/menu_xdg.xml

Abrimos con un editor de texto el archivo de configuración del menú de JWM y añadimos lo que está en rojo al comienzo del mismo:

~/.jwm/menu.xml
<?xml version="1.0"?>

<JWM>

    <!-- The root menu, if this is undefined you will not get a menu. -->
    <!-- Additional RootMenu attributes: onroot, labeled, label -->
    <RootMenu height="22">
        <Program icon="mrxvt.png" label="Mrxvt">mrxvt</Program>
        <Program icon="firefox.png" label="Firefox">firefox</Program>
        <Include>$HOME/.jwm/menu_xdg.xml</Include>

Modificamos la entrada del menú de JWM que lo actualiza, para que incluya el comando correspondiente de creación del submenú. Cuando seleccionemos Recargar el menú, se ejecutará el script correspondiente y se volverá a cargar el menú de aplicaciones actualizado.

        <Program icon="gtk-refresh.png" label="Recargar el menú">xdgmenumaker -s24 -if jwm > ~/.jwm/menu_xdg.xml; jwm -reload</Program>
        <Restart label="Reiniciar JWM" icon="gtk-refresh.png"/>
        <Exit label="Salir de JWM" confirm="true" icon="gnome-logout.png"/>
        <Separator/>
        <Program icon="gnome-shutdown.png" label="Apagar el Sistema">sudo halt</Program>
            <Program icon="gnome-shutdown.png" label="Reiniciar el Sistema">sudo reboot</Program>
            </Menu>
    </RootMenu>
   
</JWM>   



Aspecto visual del menú

Captura Xdgmenumaker - JWM - 1




4b) Crear un menú raíz de aplicaciones con iconos actualizable desde el menú de aplicaciones de JWM

El submenú que genera de forma automática, lo insertaremos en el menú raíz de aplicaciones del administrador de ventanas, sobreescribiendo el comando de regeneración del menú XDG anterior, por un script personal, que ubicaremos en el directorio de configuración personal de JWM en nuestro home.

Abrimos con un editor de texto el archivo de configuración del menú, y añadimos lo que está en rojo:

Marca de inicio del bloque del menú >> <!--XDGSTART-->
<?xml version="1.0"?>

<JWM>

    <!-- The root menu, if this is undefined you will not get a menu. -->
    <!-- Additional RootMenu attributes: onroot, labeled, label -->
    <RootMenu height="22">
        <Program icon="mrxvt.png" label="Mrxvt">mrxvt</Program>
        <Program icon="firefox.png" label="Firefox">firefox</Program>
<!--XDGSTART-->
        <!-- Addititional Menu attributes: height, labeled -->
        <Menu icon="gnome-terminal.png" label="Terminales">

Marca de final del bloque del menú >> <!--XDGEND-->
                      
                            </Menu>
                            <Menu icon="applications-office.png" label="Oficina">
                <Program icon="epdfview.png" label="ePDFView">epdfview</Program>               
                            </Menu>
<!--XDGEND-->
        <!-- <Desktops label="Escritorios" icon="preferences-desktop-screensaver.png"/> -->
        <Separator/>
        <Program icon="gnome-run.png" label="Ejecutar">gmrun</Program>
                <Separator/>
                <Menu icon="preferences-system.png" label="Menú JWM">
                <Menu icon="gnome-window-manager.png" label="Gestores de ventanas">
            <Exit icon="gnome-window-manager.png" label="Iniciar AfterStep">afterstep</Exit>
            <Exit icon="gnome-window-manager.png" label="Iniciar Awesome">awesome</Exit>
            <Exit icon="gnome-window-manager.png" label="Iniciar Fluxbox">startfluxbox</Exit>
            <Exit icon="gnome-window-manager.png" label="Iniciar Fvwm">fvwm</Exit>
            <Exit icon="gnome-window-manager.png" label="Iniciar Fvwm-Crystal">fvwm-crystal</Exit>
            <Exit icon="gnome-window-manager.png" label="Iniciar E16">starte16</Exit>
            <Exit icon="gnome-window-manager.png" label="Iniciar E17">enlightenment_start</Exit>
            <Exit icon="gnome-window-manager.png" label="Iniciar IceWM">icewm-session</Exit>
            <Exit icon="gnome-window-manager.png" label="Iniciar Openbox">openbox-session</Exit>
            <Exit icon="gnome-window-manager.png" label="Iniciar Pekwm">pekwm</Exit>
            <Exit icon="gnome-window-manager.png" label="Iniciar Window Maker">wmaker</Exit>
                 </Menu>
                <Menu icon="preferences-desktop-theme.png" label="Temas">
            <Program icon="preferences-desktop-theme.png" label="Azul">$HOME/.jwm/temas/azul.sh</Program>
            <Program icon="preferences-desktop-theme.png" label="Fucsia">$HOME/.jwm/temas/fucsia.sh</Program>
            <Program icon="preferences-desktop-theme.png" label="Original">$HOME/.jwm/temas/original.sh</Program>
            <Program icon="preferences-desktop-theme.png" label="Oro">$HOME/.jwm/temas/oro.sh</Program>
            <Program icon="preferences-desktop-theme.png" label="Verde">$HOME/.jwm/temas/verde.sh</Program>
                 </Menu>
        <Program icon="gtk-refresh.png" label="Recargar el menú">jwm -reload</Program>

        <Restart label="Reiniciar JWM" icon="gtk-refresh.png"/>
        <Exit label="Salir de JWM" confirm="true" icon="gnome-logout.png"/>
        <Separator/>
        <Program icon="gnome-shutdown.png" label="Apagar el Sistema">sudo halt</Program>
            <Program icon="gnome-shutdown.png" label="Reiniciar el Sistema">sudo reboot</Program>
            </Menu>
    </RootMenu>
   
</JWM>   

Abrimos un editor de texto y añadimos lo siguiente:

#!/bin/sh

xdgmenumaker -s24 -nif jwm > /tmp/menuxdg.xml
ed -s ~/.jwm/menu.xml <<EOF
/XDGSTART/+,/XDGEND/-d
/XDGSTART/ r /tmp/menuxdg.xml
w
q
EOF
sed -e '/<!--XDGSTART-->/{n;N;d}' \
-e '/<\/JWM>/{x;/Y/!{s/^/Y/;h;d;};x;}' -i ~/.jwm/menu.xml

Lo guardamos con el nombre xdgmenu.sh, le damos permisos de ejecución y lo copiamos al directorio de configuración personal de JWM en nuestro home.

$ chmod +x xdgmenu.sh
$ cp xdgmenu.sh ~/.jwm/xdgmenu.sh

Modificamos la entrada del menú de JWM que lo actualiza, para que incluya el script que hemos creado. Cuando seleccionemos Recargar el menú, se ejecutará el script correspondiente y se volverá a cargar el menú de aplicaciones actualizado.

            <Program icon="preferences-desktop-theme.png" label="Oro">$HOME/.jwm/temas/oro.sh</Program>
            <Program icon="preferences-desktop-theme.png" label="Verde">$HOME/.jwm/temas/verde.sh</Program>
                 </Menu>
        <Program icon="gtk-refresh.png" label="Recargar el menú">$HOME/.jwm/xdgmenu.sh; jwm -reload</Program>

        <Restart label="Reiniciar JWM" icon="gtk-refresh.png"/>
        <Exit label="Salir de JWM" confirm="true" icon="gnome-logout.png"/>
        <Separator/>
        <Program icon="gnome-shutdown.png" label="Apagar el Sistema">sudo halt</Program>
            <Program icon="gnome-shutdown.png" label="Reiniciar el Sistema">sudo reboot</Program>
            </Menu>
    </RootMenu>
   
</JWM>   



Aspecto visual del menú

Captura Xdgmenumaker - JWM - 2




5) Configurar el menú de Pekwm  

5a) Crear un submenú de aplicaciones con iconos actualizable desde el menú de aplicaciones de Pekwm

Abrimos una ventana de terminal y ejecutamos lo siguiente:

$ xdgmenumaker -if pekwm > ~/.pekwm/menu_xdg

Sistemas con las locales en ISO-8859-15
$ xdgmenumaker -if pekwm | iconv -f UTF-8 -t ISO-8859-15 > ~/.pekwm/menu_xdg

Abrimos con un editor de texto el archivo de configuración del menú de Pekwm y añadimos lo que está en rojo al comienzo del mismo, sustituir jose por el nombre de usuario de cada uno:

~/.pekwm/menu
# Menu config for pekwm

# Variables
INCLUDE = "vars"

RootMenu = "Pekwm" {
    Entry = "Terminal" { Actions = "Exec $TERM &" }
    Entry = "Ejecutar.." { Actions = "ShowCmdDialog" }
INCLUDE = "/home/jose/.pekwm/menu_xdg"

    Separator {}

    Submenu = "Editores" {
        Entry = "vi" { Actions = "Exec $TERM -title vi -e vi &" }
        Entry = "vim" { Actions = "Exec $TERM -title vim -e vim &" }

Creamos otra entrada en el menú para actualizar dicho menú, cuando instalemos o borremos aplicaciones de nuestro sistema, que soporten archivos desktop. Haciendo clic en la entrada Pekwm >> Regenerar menú XDG y posteriormente en Recargar, se actualizarán las entradas del submenú de aplicaciones.

    Submenu = "Pekwm" {
        Submenu = "Temas" {
            Entry { Actions = "Dynamic /usr/local/share/pekwm/scripts/pekwm_themeset.sh /usr/local/share/pekwm/themes" }
            Entry { Actions = "Dynamic /usr/local/share/pekwm/scripts/pekwm_themeset.sh ~/.pekwm/themes" }
        }
        Entry = "Regenerar menú XDG" { Actions = "Exec xdgmenumaker -if pekwm > ~/.pekwm/menu_xdg &" }
        Entry = "Recargar" { Actions = "Reload" }
        Entry = "Reiniciar" { Actions = "Restart" }
        Entry = "Salir" { Actions = "Exit" }
        Submenu = "Salir a" {
            Entry = "Xterm" { Actions = "RestartOther xterm" }
            Entry = "TWM" { Actions = "RestartOther twm" }
        }
    }
}



Aspecto visual del menú

Captura Xdgmenumaker - Pekwm - 1




5b) Crear un menú raíz de aplicaciones con iconos actualizable desde el menú de aplicaciones de Pekwm

El submenú que genera de forma automática, lo insertaremos en el menú raíz de aplicaciones del administrador de ventanas, sobreescribiendo el comando de regeneración del menú XDG anterior, por un script personal, que ubicaremos en el directorio de configuración personal de Pekwm en nuestro home.

Abrimos con un editor de texto el archivo de configuración del menú, y añadimos lo que está en rojo:

Marca de inicio del bloque del menú >> #XDGSTART
# Menu config for pekwm

# Variables
INCLUDE = "vars"

RootMenu = "Pekwm" {
    Entry = "Terminal" { Actions = "Exec $TERM &" }
    Entry = "Ejecutar.." { Actions = "ShowCmdDialog" }

    Separator {}
#XDGSTART
    Submenu = "Editores" {
        Entry = "vi" { Actions = "Exec $TERM -title vi -e vi &" }
        Entry = "vim" { Actions = "Exec $TERM -title vim -e vim &" }
        Entry = "gvim" { Actions = "Exec gvim &" }
        Entry = "Emacs" { Actions = "Exec emacs &" }
        Entry = "Emacs Terminal" { Actions = "Exec $TERM -title emacs -e emacs -nw &" }
        Entry = "Kate" { Actions = "Exec kate &" }

Marca de final del bloque del menú >> #XDGEND
    Submenu = "Desarrollo" {
        Entry = "Anjuta" { Actions = "Exec anjuta &" }
        Entry = "Eclipse" { Actions = "Exec eclipse &" }
        Entry = "KDevelop" { Actions = "Exec kdevelop &" }
    }
#XDGEND
    Separator {}

    Submenu = "Ir a" {
        SubMenu = "Escritorio" {
            # Create goto menu once per pekwm config reload. The fast way that
            # will work for most if not all users.

Abrimos un editor de texto y añadimos lo siguiente:

#!/bin/sh

xdgmenumaker -nif pekwm > /tmp/menuxdg.txt
ed -s ~/.pekwm/menu <<EOF
/#XDGSTART/+,/#XDGEND/-d
/#XDGSTART/ r /tmp/menuxdg.txt
w
q
EOF

Sistemas con las locales en ISO-8859-15
#!/bin/sh

xdgmenumaker -nif pekwm | iconv -f UTF-8 -t ISO-8859-15 > /tmp/menuxdg.txt
ed -s ~/.pekwm/menu <<EOF
/#XDGSTART/+,/#XDGEND/-d
/#XDGSTART/ r /tmp/menuxdg.txt
w
q
EOF

Lo guardamos con el nombre xdgmenu.sh, le damos permisos de ejecución y lo copiamos al directorio de configuración personal de Pekwm en nuestro home.

$ chmod +x xdgmenu.sh
$ cp xdgmenu.sh ~/.pekwm/xdgmenu.sh

Creamos otra entrada en el menú para actualizar el menú, cuando instalemos o borremos aplicaciones de nuestro sistema, que soporten archivos desktop. Sustituir jose por el nombre de usuario de cada uno. 

    Submenu = "Pekwm" {
        Submenu = "Temas" {
            Entry { Actions = "Dynamic /usr/local/share/pekwm/scripts/pekwm_themeset.sh /usr/local/share/pekwm/themes" }
            Entry { Actions = "Dynamic /usr/local/share/pekwm/scripts/pekwm_themeset.sh ~/.pekwm/themes" }
        }
        Entry = "Regenerar menú" { Actions = "Exec /home/jose/.pekwm/xdgmenu.sh &" }
        Entry = "Recargar" { Actions = "Reload" }
        Entry = "Reiniciar" { Actions = "Restart" }
        Entry = "Salir" { Actions = "Exit" }
        Submenu = "Salir a" {
            Entry = "Xterm" { Actions = "RestartOther xterm" }
            Entry = "TWM" { Actions = "RestartOther twm" }
        }
    }
}

Haciendo clic en la entrada Pekwm >> Regenerar menú y posteriormente en Recargar, se actualizarán las entradas del menú de aplicaciones insertado.



Aspecto visual del menú

Captura Xdgmenumaker - Pekwm - 2




6) Configurar el menú de Window Maker  

6a) Crear un submenú de aplicaciones actualizable desde el menú de aplicaciones de Window Maker


Abrimos una ventana de terminal y ejecutamos lo siguiente:

$ xdgmenumaker -f windowmaker > ~/GNUstep/Defaults/menu_xdg

Abrimos con un editor de texto el archivo de configuración del menú de Window Maker y sustituimos el submenú de aplicaciones original de Window Maker por el proporcionado por Xdgmenumaker.

~/GNUstep/Defaults/WMRootMenu
(
  "Window Maker",
  (
  ("Aplicaciones", OPEN_MENU, "~/GNUstep/Defaults/menu_xdg"),
  (Ejecutar..., EXEC, "%A(Ejecutar, Introduzca un comando:)"),
  (
    Apariencia,
    (
      Temas,
      OPEN_MENU,
      "-noext /usr/local/share/WindowMaker/Themes $HOME/GNUstep/Library/WindowMaker/Themes WITH setstyle"
    ),

Creamos otra entrada en el menú para actualizar dicho menú, cuando instalemos o borremos aplicaciones de nuestro sistema, que soporten archivos desktop.

  ),
  ("Configurar Window Maker", EXEC, WPrefs),
  ("Panel de información", INFO_PANEL),
  ("Regenerar el menú", EXEC, xdgmenumaker -f windowmaker > ~/GNUstep/Defaults/menu_xdg),
  ("Reiniciar Window Maker", RESTART),
  (



Aspecto visual del menú

Captura Xdgmenumaker - Window Maker - 1




6b) Crear un menú raíz de aplicaciones actualizable desde el menú de aplicaciones de Window Maker

Al utilizar Xdgmenumaker, el formato de menú antiguo de Window Maker, no podemos insertar el submenú en el menú raíz de aplicaciones de Window Maker.


 
7) Configurar el menú de Blackbox  

7a) Crear un submenú de aplicaciones actualizable desde el menú de aplicaciones de Blackbox


Abrimos una ventana de terminal y ejecutamos lo siguiente:

$ mkdir -p ~/.blackbox
$ xdgmenumaker -f blackbox > ~/.blackbox/menu_xdg

Sistemas con las locales en ISO-8859-15
$ mkdir -p ~/.blackbox
$ xdgmenumaker -f blackbox | iconv -f UTF-8 -t ISO-8859-15 > ~/.blackbox/menu_xdg

Abrimos con un editor de texto el archivo de configuración del menú de Blackbox y añadimos lo que está en rojo al comienzo del mismo:

[begin] (Blackbox)
  [exec] (xterm)    {xterm -ls}
  [exec] (rxvt)     {rxvt}
[include] (~/.blackbox/menu_xdg)
  [exec] (StarOffice) {soffice}
  [exec] (XEmacs)     {xemacs}
  [exec] (Acroread)   {acroread}

Creamos otra entrada en el menú para actualizar dicho menú, cuando instalemos o borremos aplicaciones de nuestro sistema, que soporten archivos desktop. Los usuarios que no tengan las locales en UTF-8, utilizar el comando de ejemplo de arriba, para añadir al menú.

  [workspaces] (Workspace List)
  [config] (Configuration)

  [reconfig] (Reconfigure)
  [exec] (Regenerar Menú XDG) {~/.blackbox/xdgmenu.sh}
  [restart] (Restart)
  [submenu] (Others)              {Other Window Managers}



Aspecto visual del menú

Captura Xdgmenumaker - Blackbox - 1




7b) Crear un menú raíz de aplicaciones actualizable desde el menú de aplicaciones de Blackbox

El submenú que genera de forma automática, lo insertaremos en el menú raíz de aplicaciones del administrador de ventanas, sobreescribiendo el comando de regeneración del menú XDG anterior, por un script personal, que ubicaremos en el directorio de configuración personal de Blackbox en nuestro home.

Abrimos con un editor de texto el archivo de configuración del menú, y añadimos lo que está en rojo:

Marca de inicio del bloque del menú >> #XDGSTART
[begin] (Blackbox)
  [exec] (xterm)    {xterm -ls}
  [exec] (rxvt)     {rxvt}
#XDGSTART
  [exec] (StarOffice) {soffice}
  [exec] (XEmacs)     {xemacs}
  [exec] (Acroread)   {acroread}

Marca de final del bloque del menú >> #XDGEND
  [submenu] (X Utilities)
    [exec] (Xfontsel) {xfontsel}
    [exec] (Xman)     {xman}
    [exec] (Xcalc)    {xcalc}
    [exec] (Xload)    {xload}
  [end]
#XDGEND
  [submenu] (Styles) {Choose a style...}
    [stylesdir] (/usr/X11R7/share/blackbox/styles)
  [end]

  [workspaces] (Workspace List)
  [config] (Configuration)

Abrimos un editor de texto y añadimos lo siguiente:

#!/bin/sh

xdgmenumaker -nf blackbox > /tmp/menuxdg.txt
ed -s ~/.blackbox/menu <<EOF
/#XDGSTART/+,/#XDGEND/-d
/#XDGSTART/ r /tmp/menuxdg.txt
w
q
EOF

Sistemas con las locales en ISO-8859-15
#!/bin/sh

xdgmenumaker -nf blackbox | iconv -f UTF-8 -t ISO-8859-15 > /tmp/menuxdg.txt
ed -s ~/.blackbox/menu <<EOF
/#XDGSTART/+,/#XDGEND/-d
/#XDGSTART/ r /tmp/menuxdg.txt
w
q
EOF

Lo guardamos con el nombre xdgmenu.sh, le damos permisos de ejecución y lo copiamos al directorio de configuración personal de Blackbox en nuestro home.

$ chmod +x xdgmenu.sh
$ cp xdgmenu.sh ~/.blackbox/xdgmenu.sh

Creamos otra entrada en el menú para actualizar dicho menú, cuando instalemos o borremos aplicaciones de nuestro sistema, que soporten archivos desktop. Los usuarios que no tengan las locales en UTF-8, utilizar el comando de ejemplo de arriba, para añadir al menú.

  [workspaces] (Workspace List)
  [config] (Configuration)

  [reconfig] (Reconfigure)
  [exec] (Regenerar Menú) {~/.blackbox/xdgmenu.sh}
  [restart] (Restart)
  [submenu] (Others)              {Other Window Managers}



Aspecto visual del menú

Captura Xdgmenumaker - Blackbox - 2




Enlaces  


https://github.com/gapan/xdgmenumaker >> Enlace al proyecto del programa en GitHub.


Foro Galería Blog


Actualizado el 29-06-2023

Utilidades de Escritorio - Xdgmenumaker

Utilidades de Escritorio - XcompmgrUtilidades de Escritorio - Xonclock