Creando un buscador de ficheros para Thunar con Zenity

Este artículo lo publiqué hace mucho tiempo en mi antiguo blog sobre Xfce, basado en otro artículo publicado en el blog de Xubuntu y se los dejo nuevamente acá.

Lo que vamos a hacer, es crear un buscar de ficheros para Thunar usando Zenity. Lo primero que tenemos que hacer es instalar zenity:

$ sudo aptitude install zenity

Luego abrimos un terminal y ponemos:

$ mkdir ~/.bash-scripts/

De esta forma creamos un directorio que contendrá el script que ejecutará la acción en si. Ahora creamos un fichero llamado search-for-files adentro de la siguiente forma:

mousepad ~/.bash-scripts/search-for-files

y le pegamos esto adentro:

#!/bin/bash
#search-for-files
# change this figure to suit yourself -- I find zenity dies from about 1000 results but YMMV
maxresults=500
# again, change the path to the icon to suit yourself. But who doesn't like tango?
window_icon="/usr/share/icons/Tango/scalable/actions/search.svg"
# this script will work for any environment that has bash and zenity, so the filemanager is entirely down to you! you can add extra arguments to the string as long as the last argument is the path of the folder you open
filemanager="thunar"
window_title="Search for Files"
srcPath="$*"
if ! [ -d "$srcPath" ] ; then
cd ~/
srcPath=`zenity --file-selection --directory --title="$window_title -- Look in folder" --window-icon="$window_icon"`
fi
if [ -d "$srcPath" ] ; then
fragment=`zenity --entry --title="$window_title -- Name contains:" --window-icon="$window_icon" --text="Search strings less than 2 characters are ignored"`
if ! [ ${#fragment} -lt 2 ] ; then
(
echo 10
O=$IFS IFS=$'\n' files=( `find "$srcPath" -iname "*$fragment*" -printf \"%Y\"\ \"%f\"\ \"%k\ KB\"\ \"%t\"\ \"%h\"\\\n | head -n $maxresults` ) IFS=$O
echo 100
selected=`eval zenity --list --title=\"${#files[@]} Files Found -- $window_title\" --window-icon="$window_icon" --width="600" --height="400" --text=\"Search results:\" --print-column=5 --column \"Type\" --column \"Name\" --column \"Size\" --column \"Date modified\" --column \"Path\" ${files[@]}`
if [ -e "$selected" ] ; then "$filemanager" "$selected" ; fi
) | zenity --progress --auto-close --pulsate --title="Searching…" --window-icon="$window_icon" --text="Searching for \"$fragment\""
fi
fi
exit

y le damos permisos de ejecución:

chmod a+x ~/.bash-scripts/search-for-files

Ahora hacemos un backup del fichero uca.xml:

$ sudo cp /etc/xdg/Thunar/uca.xml /etc/xdg/Thunar/uca.xml.old

al que le pondremos al final esto:

<action>
<icon>/usr/share/icons/Tango/scalable/actions/search.svg</icon>
<name>Search for Files</name>
<command>bash ~/.bash-scripts/search-for-files %f</command>
<description>Search this folder for files</description>
<patterns>*</patterns>
<directories/>
</action>

Ahora lo que nos queda es abrir Thunar » Editar » Configurar acciones personalizadas y creamos una nueva. Y llenamos los siguientes campos:

En la pestaña Básico:
Nombre: Buscador
Descripción: Buscador
Comando: bash ~/.bash-scripts/search-for-files %f
Icono: Seleccionamos el que más nos guste.

Quedando de esta forma:

Ahora en la pestaña Condiciones de apariencia lo siguientes campos:
Patrón de archivo: *
Aparece si la selección contiene: Directorio.

Y nos queda de esta forma:

Ahora en Thunar cuando abrimos el menú con el clic derecho, no sale la opción de buscar:

Y si pinchamos en ella nos saldrá una ventana donde podremos insertar el criterio de búsqueda:

Cuando comencemos la búsqueda veremos algo como esto:

y por último el resultado de la misma:

Si hacemos doble clic sobre el resultado, se nos abrirá una ventana de Thunar con la carpeta donde se encuentra el fichero. De esta forma le damos mucha más potencia nuestro escritorio Xfce.