Ene 18 2011

Servidor de emacs: emacsclient y emacsserver

Tag: basicoverdrive @ 9:05 pm

Algunos usuarios se quejan de la tardanza que tiene emacs al cargar comparado con otros. Sobre todo debido a la gran carga a medida que este se va configurando modificando funcionalidades en nuestro .emacs. Para ello existe una solucion; usar emacsclient, que nos permitira evitar toda esta carga cada vez que lancemos emacs. Para ello no hay que hacer realmente nada, ya que esta feature viene en el paquete emacs base y tampoco requiere de ninguna configuracion especial. Aunque aqui incluiremos algunas lineas que nos facilitaran las tareas.

Recomiendo poner en nuestro .bashrc las siguientes lineas:

Estos cambios tendran efecto o bien si nos logueamos en otra consola, o bien si nos deslogueamos y logueamos en la misma o bien si lanzamos el comando source ~/.bashrc :

export EDITOR=»emacsclient -c»
export VISUAL=»emacsclient -c»
export ALTERNATIVE_EDITOR=»emacs»
alias e=»emacsclient -c»
alias es=»emacs –daemon»
alias ec=»emacsclient -c»

Nota para aquellos que no quieran usar estos alias: si no quisieramos poner estas lineas y seguir con la configuracion de toda la vida: debemos lanzar emacs –daemon la primera vez y luego ir lanzando emacsclient -c cada vez para cada hilo de ese daemon o bien emacs para un proceso nuevo cada vez.

Nota para los que si habeis decidido modificar vuestro .bashrc: De esta forma podemos lanzar el comando «es» desde cualquier terminal o consola la primera vez, y luego lanzar emacs (si queremos un proceso cada vez) o simplemente teclear e (si queremos un hilo cada vez). Veremos que se queda emacs como daemon o proceso residente en memoria, de esa forma cada vez que lanzamos emacs, se estara lanzando un hilo de este proceso en lugar de un proceso cada vez, ademas esto permitira intercomunicar los distintos hilos, sin importar si lo lanzamos en una consola y ahora nos encontramos en las XWindow y lo abrimos con GTK o desde un terminal, podremos tener acceso a los distintos buffers, con toda la informacion. etc. (Aqui el comando fbgrab lo empleo para capturas de pantalla en consola, pero carece de interes para el fin de este articulo, el comando verdaderamente importante es el primero que lanzo: emacs –daemon):

Emacs como daemon

Es importante tener en cuenta, que cuando salgamos de emacs (emacsclients) realmente es como si estuviesemos cerrando frames, ya que emacsserver seguira corriendo con aquella informacion modificada, asi que debemos cercionarnos de no apagar o reiniciar (aunque no veamos un emacs (en este caso emacsclient) mostrado, ya que podemos cerrar todos los emacsclients sin haber guardado ningun fichero o las ultimas modificaciones, ya que esto se queda residente en memoria aunque no tenga ninguna representacion).

Ahora ya tenemos nuestro querido emacs, que carga en 0 segundos. El «real» es el tiempo que he tardado desde que pulse intro del comando «time emacsclient -c» hasta que presione «C-x c» para cerrar emacs (es decir el tiempo que tarde en abrir y cerrar emacs), pero el tiempo de carga real como podemos ver ni siquiera llega a 1 milesima de segundo (el comando fbi es el que uso para previsualizar capturas en consola que carece de importancia en este articulo, el comando time precediendo a cualquier comando es el que nos da los tiempos):

Emacs cargado en menos de 1 milesima de segundo

Por ultimo hacer mencion especial a la primera captura de pantalla, si os fijais bien, tengo algunas features externas al paquete emacs, por lo que nuestro $HOME se va llenando de estas, aqui entra la esencia de reorganizar y reordenar estas features para no mezclarlas con otros ficheros y que nuestro directorio de usuario se convierta en algo caotico. Lo ideal, es emplear un directorio para ello por ejemplo ‘emacs‘ o ‘elisp‘ (ya que emacs se suele emplear cuando se descarga emacs desde el cvs/svn/git) donde dentro esten estas features o bien ‘.emacs.d/elisp‘. Todo esto es opcional, pero son buenas practicas que hara que todo nuestro sistema de ficheros tenga mayor coherencia a la hora de buscar ficheros; en mi caso, segun el ordenador que utilice, lo tengo mas o menos desordenado ;-).