Este artículo está obsoleto, las capturas de pantalla han desaparecido.
Recomendamos visitar el Blog sobre emacs en castellano: http://www.blackhats.es/wordpress/
Buenas, este es mi primer post en Taringa y como vi algunos GNUeros quisiera hablar de un programa GNU que es para mi uno de los más brillantes paquetes que dio el software libre. El post es bastante nerd y más que nada está destinado a programadores que les gustan esos programas complejos y casi infinitos.
Bueno, empecé a usar Emacs hace unos 6 o 7 años. Por ese entonces estaba metiendóme en el mundo de GNU/Linux, y casi todas las distribuciones traían tal programa. Poco a poco lo fui usando e investigando, atraído por lo mítico de la historia (el primer programa libre que diseñó Richard Stallman) y porque estaba comenzando a programar.
Hay un montón de recursos para aprender GNU/Emacs, en mi opinión los mejores son su manual oficial, su ayuda interna, y el Emacs Wiki. Por eso no me quiero poner denso con cosas que van a encontrar en otros lados, prefiero hablarles de las características que tiene y que más me gustaron de este editor y que en general no se encuentran en otros editores (o al menos no todas juntas).
Aplicaciones
Emacs tiene miles de aplicaciones desarrolladas por la comunidad de usuarios. Uno podría pensar ingenuamente que hablamos de aplicaciones sencillas tratándose de un editor, y es verdad que esa era la idea original de su lenguaje de extensión, escribir programas que ayuden a la tarea de edición. Pero el lenguaje de extensión y el zarpado diseño de Emacs eran tan convenientes que la comunidad empezó a escribir programas de todo tipo en el lenguaje Emacs Lisp.
El resultado es increíble, en Emacs tenemos varios clientes de correo, calculadoras programables, sistemas de algebra, clientes de grupos de noticias, navegadores web, clientes de chat (IRC, jabber, MSN), juegos, lectores RSS, manejadores de archivos, visualizadores de imagenes y de PDF,editores de video, de sonido e infinidad de wrappers o modos para montones de aplicaciones comunes de consola (debuggers, compiladores, etc).
Programacion
Acá es quizá en dónde Emacs más se luce. Emacs tiene todas las características tradicionales de un buen editor para programación: resaltado de sintáxis, identación automática, búsqueda y reemplazo de expresiones regulares, macros, etc. Pero además cuenta con un arsenal de modos (aplicaciones) para cada lenguaje particular. Sin duda, los que más herramientas tienen son el lenguaje C y Lisp.
Para C podemos bucear el programa mediante tags, debuguear interactivamente (como en Eclipse o Visual Studio), obtener información sobre prototipos de funciones, conocer los errores de sintáxis en tiempo real con Flymake, autocompletado, interactuar con versionadores como CVS o SVN, elegir entre montones de estilos de indentación (KERNEL hacker, GNU hacker, K&R, etc.), aplicar parches, comparar archivos con wrappers para diff, y bocha de cosa más.
Pero además Emacs trae o pueden conseguir en su wiki modos para casi cualquier lenguaje con el que se crucen: PHP, Haskell, Smalltalk, C++, Java, Cobol, Python, JavaScript, SQL, o lenguajes de marcado como HTML, Latex, TeX y un larguísimo etecetera.
En los lenguajes interprétados casi siempre los modos nos permiten evaluar las expresiones desde el lugar de edición muy parecido a como trabajan la mayoría de IDEs de Smalltalk.
Además Emacs cuenta con un interprete interno de Lisp que es el corazón de tanta extensibilidad, un 90% o más del editor se programa y se extiende con este lenguaje que es interactivo.
Edición
Acá Emacs se zarpa, siempre que tengo que cambiar de editor en el laburo lo que más extraño es la cantidad de comandos de edición de Emacs que tengo grabadisimos en mi columna vertebral.
Cuando pasaste unos meses editando con Emacs, lo primero que te das cuenta es la agilidad y velocidad con la que uno se mueve por el archivo. Todos los comandos de movimiento y navegación se distribuyen en el centro del teclado, la filosofía es que ir hasta las flechitas, page up o page down es una cagada de perdida de tiempo. Y tenes comandos para cualquier tipo de movimiento que se te ocurra, avanzar una palabra, retroceder, un párrafo, una página, una línea, una función, una expresión, fin del documento, inicio, sentencias, y sin duda la búsqueda incremental (tipo Firefox) también se lleva las palmas como comando de navegación por el documento. Cuando lo dominas pareces una bolita de pinball moviendote a todo lo que da por los textos.
La edición rectangular y las macros son otras dos funciones increíbles mientras editamos. La edición rectangular te permite cortar textos tabulados en columnas (como lo hace UltraEdit o Excel). Al principio uno no se da mucha idea de la cantidad de utilidades que tienen, pero si trabajan con lenguajes de marcado onda HTML bocha de veces se van a encontrar necesitando esta característica. Y las macros lo mismo, uno comienza a grabar con F3, trabaja sobre una línea (haciendo búsquedas de expresiones regulares, editando o lo que se te ocurra), termina de grabar con F4, y listo podes aplicarlo a todas las líneas del documento. Con solo saber eso lo usas en bocha de situaciones, pero también podes usar númeradores, registros y boludeces que hacen al sistema de macros impresionante para evitarte cualquier tarea repetitiva. A veces en el laburo quedan todos como boludos mirando como macreo archivos de datos de clientes en un toque con Emacs y antes lo hacían a mano o tardaban todo un día haciendo algún programa Perl.
También tenemos un editor de dibujos ASCCI al mejor estilo paint con todas sus funciones (círculos, cuadrados, líneas, lapiz libre, etc). Puede parecer un programa caprichoso y al pedo, pero a la hora de programar uno puede embeber en los comentarios de los programas, el dibujo de estructuras de datos como colas, listas, de diagramas de flujo simples que hacen a secciones del programa muchísimo más simples de comprender.
Uno puede pensar que son bocha de cosas para aprender, sobre todo si quiere programar sólo en algún lenguaje particular, y es verdad. Lo que pasa que lo que aprendas para un lenguaje particular te va a servir para miles de lenguajes más y cada vez que cambies de lenguaje (aunque sea para editar un bash script) te vas a seguir sintiendo infinitamente más productivo y cómodo en tu editor que si por ejemplo tuvieses que cambiar otra vez a un IDE de un lenguaje específico X.
La ayuda
El sistema de documentación y de ayuda de la distribución GNU de Emacs es una de los más rigurosos que se encuentran. Todo está documentado, y es accesible de montones de maneras. Uno puede navegar el manual oficial (que está en formato Info) desde adentro de emacs. Consultarlo mediante querys, preguntar por funciones, preguntar que hace un atajo de teclado particular, o cual es el atajo para tal comando. Ni bien entras a Emacs también se te ofrece un excelente tutorial que te explica lo esencial para moverse por un documento, buscar archivos, y todas las operaciones básicas de edición.
Comprender el sistema de ayuda y aprovecharlo a fondo es uno de las primeras cosas que deberían hacer quienes se quieran meter a usar Emacs. Es quizá la primera complejidad con la que se van a cruzar, pero después de dominar todas las opciones de la ayuda te haces muy auto suficiente, incluso rara vez vas a recurrir a internet para preguntar algo, casi todo lo vas a encontrar dentro del Emacs.
Como un demonio
En la última versión de Emacs del CVS, se lo puede arrancar como un demonio (servicio). Eso significa que podemos tener una única versión corriendo sin estar attacheada a ningún cliente y abrir al toque diferentes clientes que comparten toda la sesión que tengamos abierta, a mi me pasa que a veces corro la misma sesión de emacs durante 1 mes y accedo desde el laburo o desde la notebook.
Fin
Bueno presenté un subconjunto pequeño de las miles de cosas que se pueden hacer con Emacs y sobre todo las que más me gustan. Más adelante voy a tratar de ir agrandando un poco el post, para comentar otras cosas interesantes. Más que nada hablé de características técnicas, pero si investigan un poco van a ver la cantidad de mística e historia que tiene este editor (por ejemplo que una de las primeros editores de tipo emacs fue programado por el creador de Java, o uno de los forks más importantes del editor fue escrito por el que después crearía el navegador de Netscape, o que es el editor favorito del autor del Arte de Programar Donald Knuth).
En fin espero por lo menos enganchar a alguno y que el post anime a usar este excelente programa.
Saludos!
Fuente: http://www.taringa.net/posts/linux/2138611/GNU_Emacs-especial-para-nerds.html