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
Esta obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internacional.