lunes, 26 de septiembre de 2011

Kde - Dolphin - Symbolik Link Gui

Hoy saque el rato para hacer un par de Desktop entries que me permitirán hacer los symbolic linnk.

Ya saben el clasico:

ln -s <Origen> <destino>

La cuestión es que por razones meramente laborales, últimamente he tenido que ejecutar ese condenado comando ya varias veces. No es difícil simplemente es medio cansado escribir esas enormes direcciones.

Buscando en el repo y "googleando" tope con tan mala suerte que no encontré ningún GUI. Curiosamente hay un proyecto de symbolic link para "Guindos". Aqui le pueden echar una mirada.

Bueno entonces, me decidí a hacer mi propia versión del asunto. En vista de que un programita en C++ cumpliría mis expectativas, pensé que no seria adecuado ya que estar buscando dos path con un FileChooser es bastante irritante. Sin embargo era mejor que escribir los path a mano. (Vean kompare como ejemplo)

Entonces la inspiración me llego con Dolphin, si pudiera usar el menu contextual para generar orígenes y destinos. Hasta el momento no se como hacer plugin para Dolphin (No se si se puede) pero si había usado los desktop entries para expandir las opciones del menú contextual.

Bueno, entonces manos a la obra.

Como funciona?

Desktop entrie es un archivo especial en los escritorios X definido por FreeDesktop. Es un simple archivo de texto que define reglas y la ejecución de comandos.

Para que funcionen en KDE se puede poner en dos lugares:

/usr/share/kde4/services/ServiceMenus/

/home/<User>/.kde/share/kde4/services/

Y con solo ponerlos ahí basta. Cuando Dolphin refresque estos entries agregara el comportamiento definido en los menus contextuales.

Yo necesitaba habilitar la opción de origen a cualquier cosa, archivos, carpetas.
Entonces la definición fue asi:


[Desktop Entry]
Type=Service
X-KDE-ServiceTypes=KonqPopupMenu/Plugin,inode/directory,all/all,all/allfiles
X-KDE-Submenu=Symbolic Links
X-KDE-AuthorizeAction=shell_access
Actions=lnorigin;

[Desktop Action lnorigin]
Name=Origin
Icon=/opt/resources/SymboliclinkOrigin.png
Exec=bash /opt/scripts/services/lnorigin.sh %f

El script simplemente salva %f  en un archvio temporal en home:

#!/bin/bash
echo $1 > /home/koza/.lnorigin.txt

El asunto con el Destino fue diferente. El menú contextual de Dolphin solo debía mostrar la opción cuando se estuviera apuntando a una carpeta. Esto se debe a que en la carpeta me va a pedir el nombre (Utilice el comando KDialog). Mi definición y el script que hace el truco por abajo fue así:

[Desktop Entry]
Type=Service
X-KDE-ServiceTypes=KonqPopupMenu/Plugin,inode/directory
X-KDE-Submenu=Symbolic Links
X-KDE-AuthorizeAction=shell_access
Actions=lndesteny;

[Desktop Action lndesteny]
Name=Destiny
Icon=/opt/resources/SymboliclinkDesteny.png
Exec=bash /opt/scripts/services/lndesteny.sh %f


#!/bin/bash
path=$1
if [ -f /home/koza/.lnorigin.txt ]
then
    name=$(kdialog --title "Destiny Name" --inputbox "What name do you want?")
    ln -s `cat /home/koza/.lnorigin.txt` $1/$name
else
    kdialog --error "Destiny is not setted"
fi

Notas:
Queda de mas decir que la ubicación de la imagen, la ubicación donde se va a correr el script y otras cosas deben ser ajustados.

PD: Los archivos desktop entries pueden tener cualquier nombre pero con extensión .desktop.

Si tienen problemas comenten abajo y si esto es como muy solicitado puedo hacerme un script de instalación.

Actualización:

Descubri que la manera mas rapida para refrescar los desktop entries (inclusive imagenes) es atravez del comando siguente:

#!/bin/bash
kbuildsycoca4

No hay comentarios:

Publicar un comentario

AEM hablemos del arquetipo 11

Cuando creamos un proyecto con AEM. Siempre es importante saber que arquetipo estamos usando. Pues esto me determinara que source, herramien...