jueves, abril 28, 2005

Menús contextuales en KDE

Andaba yo tan contento con mi XMMS vestido con las pieles del Winamp, y regocijandome de haber podido corrgir el problema de las fuentes pequeñas en GTK, pero no podía reprimir un gesto de disgusto cuando navegaba por mis archivos de música y no tenía la opción en el menú contextual de Konqueror para encolar o reproducir las canciones sin tener que arrastrarlas hasta el interfaz gráfica del XMMS.

Como siempre, un poco de investigación da sus frutos.

Parece ser que existen unos archivos .desktop que le indican a KDE éste tipo de cosas. Pertenecen a una especificación abierta de FreeDesktop a la que parece que tanto Gnome como KDE están adscritos, con mayor o menor grado de implementación, llamado Desktop Entry Specification. Gracias a ésta especificación se pueden describir acciones a realizar sobre cada tipo de archivo. No es la única utilidad que tiene, ya que su propósito es más amplio; como comentan en su sitio web, los ficheros .desktop describen información sobre aplicaciones, como el nombre, icono y descripción. Presumo que entre estas informaciones se incluye el como tratan las aplicaciones cada tipo de archivo.

En el caso del manejo de archivos, se trata de crear un nuevo archivo .desktop en el direcotrio '/usr/share/apps/konqueror/servicemenus' si queremos que la acción del menú contextual esté disponible para todos los usuarios o en '$HOME/.kde/share/apps/konqueror/servicemenus' si lo que queremos es que sólo lo vea un usuario determinado.

Creamos, por tanto, en el directorio deseado, el archivo accionesXMMS.desktop, con el siguiente contenido:
[Desktop Entry]
Actions=encolar_en_XMMS;encolar_en_XMMS_inmediato;reproducir_en_XMMS
Icon=
ServiceTypes=audio/x-mp3,audio/x-vorbis,audio/vorbis,audio/x-wav,audio/wav,audio/mpegurl,audio/x-ms-wma,inode/directory

[Desktop Action encolar_en_XMMS]
Exec=xmms -e %F
Icon=sound
Name=Enqueue in XMMS
Name[es]=Encolar en XMMS

[Desktop Action encolar_en_XMMS_inmediato]
Exec=xmms -Q %F
Icon=sound
Name=Enqueue in XMMS inmediatly
Name[es]=Encolar en XMMS inmdediatamente

[Desktop Action reproducir_en_XMMS]
Exec=xmms %F
Icon=sound
Name=Play in XMMS
Name[es]=Reproducir en XMMS

Veamos la utilidad de cada sección y parte:
  • [Desktop Entry]: Nodo principal del archivo, indica que en que consiste la entrada.
    • Actions: Son cada una de las acciones que vamos a describir. Cada acción nombrada tendrá su propia sección más adelante
    • Icon: Me temo que aún no sé para que vale. Evidentemente, especifica un icono.
    • ServiceTypes: Indica sobre que tipo de archivos, especificados mediante MIME-Types, se aplica .
  • [Desktop Action [nombre acción]: Nodo con la información de las acciones que se han descrito anterioremente.
    • Exec: Comando a ejecutar cuando se selecciona ésta opción.
    • Icon: Esta si la sé ;-P. Indica el icono que mostrará en el menú contextual. Sospecho que se indican nombres de iconos de manera que el sistema tendrá una lista y buscara el nobre en dicha lista. No sé muy bien dónde está esa lista, ni como añadir iconos, ni como saber como se llaman.
    • Name: Texto que se mostrará en el menú contextual para representar ésta acción.
    • Name[es]: Sospecho que es la versión traducida del campo anterior (es de español). Digo yo que si se tiene seleccionado el lenguaje español se mostrará éste texto, en vez del anterior (que debe ser el genérico).
Respecto a los MIME-Types, he de reconocer que no los manejo muy bien. La lista que he puesto no es en absoluto exhaustiva, y probablemente se pueda especificar mejor. He intenado con audio/all pero no parecía funcionar. Por cierto, notar que se ha añadido el tipo inode/directory para poder realizar las acciones anteriores sobre directorios.

Por último, unos enlaces de dónde ha salido ésta información. Tanto suy como melenas, de KDE-Hispano.org, tienen artículos al respecto:
Acabo de encontrar otro artículo muy interesante, enviado por [agarfu], en el que se explica como añadir al menú contextual la opción de ordenar la vista de archivos por fecha, tamaño, nombre, etc.., usando un archivo .dektop (bueno, y un pequeño script al que llama el archivo .desktop).
En BlogDRAKE también hablan al respecto, concretamente