Willyfrog

Mi primera utilidad de elisp

Desde hace algún tiempo me pasé a Emacs, si bien la versatilidad ya la tenía en vim (es un gran editor) con Emacs puedo además aprovechar para aprender un sabor de lisp: emacs lisp (elisp para abreviar). Esta es una tarea que imagino que me llevará años ya que no es un uso intensivo, sino que intentaré ir haciendo pequeñas funciones y cambios que me permitan aprovechar esa caracteristica tan genial de Emacs de ser programable.

Lo difícil es encontrar algo que hacer, por lo que lo primero que se me ha ocurrido es algo que ya he tenido que hacer varias veces: cerrar todos los buffers de un proyecto. Estoy seguro que si lo busco, encuentro que alguien ya lo ha hecho y mucho mejor que yo, pero si no voy haciendo pequeñas funciones, no creo que aprenda en la vida.

 1 (defun filter-buffers-by-file-name (partial-path)
 2   "return list of buffers which contains 'partial-path'"
 3   (remove-if (lambda (x) (or (null (buffer-file-name x))
 4                           (null (string-match partial-path (buffer-file-name x))))) (buffer-list)))
 5 
 6 (defun kill-project-buffers (partial-path)
 7   "kills all buffers which contains partial-path"
 8   (interactive "sPartial name:")
 9   (let ((kill-list (filter-buffers-by-file-name partial-path)))
10     (if (null kill-list)
11         (message (format "No buffers matched '%s'" partial-path))
12       (if (y-or-n-p (format "killing %d buffers" (length kill-list)))
13         (kill-some-buffers kill-list)
14         (message ("User cancelled"))
15         )
16     )))

Si bien estoy seguro de que se puede hacer mejor, esta es mi segunda aproximación (la original daba mas vueltas a los datos para conseguir lo mismo) que funciona. Lo que hace es buscar entre los buffers que han sido cargados desde un fichero aquellos que contengan en su path el texto indicado, teniendo en cuenta que puede usarse expresiones regulares. De esta manera poniendo el nombre del proyecto (o parte de su path), eliminará los buffers que coincidan.

La última versión de esta funcion, podrá encontrarse siempre en github

Auriculares para correr miomundo » « Configuracion encriptada en Emacs