martes, 29 de marzo de 2011

Editar por versiones en Emacs

Emacs es el editor (o cualquier categoría de software) mas viejo que sigue en uso, además de ser increíblemente difícil de aprender (por que fue inventado para unas "computadoras" de los 50's que usaban LISP como ensamblador) es increíblemente poderoso y adelantado a su tiempo, inclusive adelantado a nuestro tiempo! XD.  Basta con ver una de sus funciones básicas: el sistema de versiones.
Actualmente la mayoría de los IDE modernos incorporan algun plug-in para "conectarse" con sistemas de control de versiones, pero es algo nuevo en muchos de ellos y sigue siendo un 'pain in the dev/as5' usarlos. Pero en Emacs existe esa integración desde que se concibió dicha herramienta (el default se conecta a los sistemas mas populares: CVS, SVN, HG, Bzr, git...) y previsiblemente, hay un hack para automatizarlo a la hora de salvar, de modo que ni siquiera es necesario percibir que existen distintas versiones de lo que esta uno editando hasta que uno necesita regresar a lo que hizo tiempo atras.

Un ejemplo: tengo un texto en modo Org que me sirve para anotar ideas, pendientes, citas, etc etc.  Normalmente lo salvo en cada modificación unitaria. Al activar el sistema de versiones "simple", se guarda el documento con un numero de version para que pueda revisar su historia cuando así lo desée, marcar con etiquetas distintas versiones e inclusive si quisiera, editar el archivo entre muchas personas y saber qué modificó cada quién.
Para que se actualize la versión cada vez que se salva basta con programar a emacs para que lo haga (no es tan complicado como suena). Afortunadamente es programable en LISP, el padre de todos los lenguajes y el mas elegante, desde el archivo de inicio de emacs: site-start.el

(defun rcs-ci-co nil
  "check in check out the file if it is under vc with rcs
  with a prefix other than 1 only check-in"
  (when (eq (vc-backend (buffer-file-name)) 'RCS)
    (progn
       (vc-checkin (list (buffer-file-name)) 'RCS nil "saved" nil)
       (vc-checkout (buffer-file-name) t) )))
(add-hook 'after-save-hook 'rcs-ci-co)

tendiendo eso basta con salvar el archivo con las teclas 'Ctrl-x v v' la primera vez, y las siguentes salvar como siempre con 'Crl-x Ctrl-s'
Hay mas información en la página de EmacsWiki sobre RCS.
suerte con eso!

No hay comentarios.: