Cuaderno de GNUtas

Buscar archivos en un disco duro externo mediante Elisp con Ido

Para buscar rápidamente archivos en mi disco duro uso el comando de bash locate, pero generalmente a través de Emacs y helm-locate. El problema viene cuando quiero dirigir mis pesquisas hacia otro disco duro externo, de varios terabytes, donde guardo gran cantidad de ficheros multimedia, pues por defecto locate no busca dentro de estos dispositivos. Se puede configurar para que sí lo haga, pero yo prefiero tener las cosas del sistema sin toquetear, o toqueteadas lo menos posible. Y, además, prefería una solución más Lisp. Así que se me ocurrió escribir esta sencilla lista Ido, que paso a comentar.

Primero necesitamos la función que genere la lista de candidatos. Como el disco externo lo monto siempre en una carpeta llamada «datos2», tiro de marcadores, así que requerimos primero la biblioteca bookmark:

(require 'bookmark)

Y definimos la función que genera la lista de posibles candidatos:

(defun crea-lista-multimedia-local ()
  (bookmark-maybe-load-default-file)
  (bookmark-jump-noselect "datos2")
  (directory-files-recursively "/run/media/juanmanuel/dfefe8ba-9496-4e29-9589-3eac1cbebe60/datos2/"
                               (regexp-opt '(".mp4" ".mp3" ".ogg" ".avi" ".mkv" ".opus" ".m4a" ".webm"))))

Como se ve, la expresión directory-files-recursively es la que nos devolverá la lista de archivos, pero sólo los que hallamos acotado por diversas extensiones mediante regexp-opt.

Y, finalmente, definimos nuestra lista ido. Nos abre dired en el directorio que contiene el candidato, con el cursor sobre el propio candidato.

(defun ido-busca-multimedia-local (file)
  (interactive  (list (ido-completing-read "Archivo multimedia local: "
                                           (crea-lista-multimedia-local) nil t)))
  (let ((dir (file-name-directory
              (directory-file-name (expand-file-name file)))))
    (dired dir)
    (goto-char (point-min))
    (re-search-forward (file-name-nondirectory file) nil t)))

De esta forma, podremos acceder a los archivos de nuestro disco externo de una forma fácil y rápida, sin más complicaciones y con los solos recursos que nos proporciona Elisp. Sin salir de Emacs, que es donde mejor se está.

Publicado: 19/08/21

Última actualización: 16/08/23


Índice general

Acerca de...

Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.

© Juan Manuel Macías
Creado con esmero en
GNU Emacs