Cuaderno de GNUtas

Función en Emacs para buscar una palabra en un diccionario on line

Más concretamente. La idea es que cuando tengamos el cursor situado en una palabra, al lanzar la función que queremos definir se nos abra en otra ventana el navegador interno de Emacs (el eww mode) y nos busque la tal palabra en un diccionario on line, en una Wiki o en cualquier servicio por el estilo. Aquí muestro cómo hacerlo para el diccionario LSJ de Perseus-Hopper.

Pero podemos, antes de eso, añadir un «extra» para recoger en una lista todas las búsqedas que se vayan realizando en una sesión, y recuperarlas mediante Ido, que nos mostrará esa lista de manera autcompletiva y navegable. Empezamos por definir la variable con la lista:

(defvar lista-perseus)

(setq lista-perseus nil)

Y a continuación la función que se encargará de extraer la palabra donde está situado el cursor. Tomará como argumento la palabreja, la devolverá en una lista y (expresión format) la situará en una cadena de texto, la url del LSJ de Perseus, que a su vez se abrirá con el eww mode. Por supuesto, sin olvidarnos de cerrar todos los paréntesis abiertos, que luego se va el aire. Obsérvese que al final se añade la palabra a la lista que hemos definido antes, a fin de que se guarde en el histórico de búsquedas.

(defun perseus (palabra)
    (interactive (list (current-word t t)))
    (if
	(not (current-word t t))
	(error "Ninguna palabra que analizar...")
      (other-window 1)
      (eww (format "http://www.perseus.tufts.edu/hopper/morph?l=%s&la=greek" palabra))
      (add-to-list 'lista-perseus palabra))) ;; añado esto para que el término se sume a la lista

Para que la lista de palabras buscadas la recupere Ido, definimos esta sencilla función, que se limita a entregar la lista:

(defun lista-busquedas-perseus ()
    (interactive)
    (mapcar 'identity lista-perseus))

Definimos, entonces, la correspondiente instancia de Ido-mode, para que nos recupere el histórico de búsquedas:

(defun ido-perseus (palabra)
  (interactive  (list (ido-completing-read "Perseus-Hopper: " (lista-busquedas-perseus) nil t)))
  (eww (format "http://www.perseus.tufts.edu/hopper/morph?l=%s&la=greek" palabra)))

Y ya sólo nos queda definir los atajos:

(define-key global-map (kbd "C-x p") 'perseus)

(define-key global-map (kbd "C-x %") 'ido-perseus)

Y esta otra funcioncilla, por si queremos limpiar la lista a mitad de sesión:

(defun limpia-ido-perseus ()
    (interactive)
    (setq lista-perseus nil))

Para adaptar esta función a otros servicios en línea, bastaría con sustituir la url por la que convenga. En fin, me resulta muy útil, y es además una variante emacscéntrica de hacer lo mismo que contaba en esta otra gnuta sobre el gestor de diccionarios Golden Dict.

Para terminar, una pequeña demostración de cómo funciona con el LSJ de Perseus.

Buscar términos griegos en Emacs con el Liddell-Scott del Perseus from Juan Manuel Macías Chaín on Vimeo.

Publicado: 07/05/2019

Última actualización: 07/05/2019


Í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