Emed: Mi propio editor de código
Hace mucho, en algún lugar leí que al igual que como se dice que un hombre en su vida debe de escribir un libro, plantar un árbol y tener un hijo, un programador que se respete debe de escribir su propio editor de texto. Es una idea que había tenido en la mente por muchos años, pero mas recientemente desde que me entró un interés escribir código de "un poco más bajo nivel". Pero nunca me puse manos a la obra, nada me había empujado a hacerlo hasta que, al igual que intenté (y fracasé) subirme al tren de los teclados mecánicos, intenté explorar a profundidad Neovim para editar código en la terminal. Cuando entendí que debía haber una buena razón para no haberle agarrado el gusto a vi o a emacs en 25 años (desde mis tiempos de secundaria, cuando experimenté con la programación por primera vez) y que probablemente se deba a que no me interesa memorizar una infinidad de combinaciones de teclas, supe que quiza era tiempo de plantar ese árbol. O de tener ese hijo. En sentido figurado, claro, que hijo ya tengo.
Origen
La idea inicial era bastante simple: quería usar algo en la terminal que fuera fácil de usar, que no requiriera configuración y que tuviera combinaciones de teclas predecibles y "compatibles" con la memoria muscular de mis dedos. Ctrl+S para guardar, Ctrl+W para cerrar pestaña, Ctrl+F para buscar, etc. Primero probé varias opciones ya existentes, que las hay, incluyendo configuraciones de Zellij con una lista de archivos en un panel y un editor en otro. Nada me gustaba.
Me puse manos a la obra y en pocos días estaba ya jugando con un primer prototipo del editor, al que le puse "Emed" como nombre "provisional". Ese primer prototipo lo hice completamente yo, desde cero, pero conforme pasaron los meses empecé a incorporar herramientas de desarrollo con agentes de IA en mis proyectos, y eso también terminó acelerando bastante el desarrollo de Emed. Emed no se acerca, ni de lejos, a lo que ofrecen editores como Emacs o Neovim, ni en features ni en personalización. Ni en estabilidad, quizá. Pero esa es justamente la idea. No intenta competir con eso, intenta evitarlo. Es un editor que abre y ya funciona, sin tener que prepararlo antes.
Qué es Emed
La interfaz sigue un layout bastante estándar: explorador de archivos a la izquierda, editor al centro y terminal en la parte inferior. No hay innovación en eso, es básicamente lo que ya existe en cualquier IDE de escritorio, pero llevado a la terminal y sin capas extra encima. La navegación entre paneles es directa y las combinaciones de teclas o "atajos" son pocos.
El explorador de archivos permite lo básico: abrir, crear, renombrar, borrar y mover archivos utilizando combinaciones a las que uno esta acostumbrado: Ctrl+C y Ctrl+V para copiar un archivo, Ctrl+X para cortar (moverlo), etc. El editor soporta múltiples pestañas, guardado, y resaltado de sintaxis. Incluso tiene una terminal muy capaz. Mi "yo" del pasado no creería que yo hice Emed si lo viera en su estado actual.
También hay algunas cosas adicionales que fui agregando porque las necesitaba, como búsqueda dentro de archivos y en todo el proyecto, integración con Git para ver blame, y soporte para herramientas como LazyGit dentro de la propia aplicación. Nada de esto está particularmente pulido, pero funciona lo suficiente como para usarlo todos los días.
Para los curiosos, algunos detalles técnicos: Emed está construido sobre tview para la interfaz en terminal, usa Chroma para el resaltado de sintaxis y combina creack/pty con un fork de vt10x para implementar el terminal embebido. tview hace casi todo el trabajo pesado en cuanto a layout y renderizado, aunque en el camino terminé modificando algunas cosas y hasta mandando un PR para mejorar el pegado del portapapeles en ciertos terminales como Alacritty. El editor de texto y el explorador de archivos son componentes propios, incluyendo un árbol de archivos que tuve que implementar desde cero para soportar mejor nombres largos y mantener el estado entre actualizaciones. El resaltado de sintaxis pasó por varios intentos antes de quedarse con Chroma, y el terminal ha sido probablemente la parte más complicada, especialmente por todo lo relacionado a colores, eventos de mouse y diferencias entre emuladores de terminal. Con este proyecto perdí la virginidad en cuanto a agentes de código: estaba atorado con una implementación horrenda de tree-sitter y un terminal que se quedaba colgado a cada rato, pero Claude Code llegó a salvarme (aunque en esa etapa servía mas bien como guía, ya que al intentar implementar cosas avanzadas simplemente se quedaba dandole vueltas al asunto y quemando tokens a lo loco).
El nombre
El nombre salió solo: Emed, de EMmanuel + EDitor. No le di muchas vueltas en ese momento, pero después sí me cayó un poco el veinte de que suena medio mamón. Para compensarlo, terminé agregando una lista de significados alternativos al acrónimo, que se muestran de forma aleatoria abajo del logo cuando no hay ningún archivo abierto, la mayoría absurdos.
Estado actual
Aunque lo uso mucho, sigue siendo un experimento. Hay bugs, hay comportamientos raros dependiendo del terminal o del sistema, y hay partes del código que claramente necesitan una limpieza. El terminal, por ejemplo, funciona bien en la mayoría de los casos, pero todavía hay aplicaciones TUI que no se renderizan correctamente o que requieren manejo especial.
No hay garantía de estabilidad ni de compatibilidad. Aun así, ya es lo suficientemente usable como para que yo lo prefiera sobre otras opciones en mi flujo actual, al menos en la terminal. No voy a mentir, mi editor de escritorio favorito es Zed, pero cuando tengo que editar codigo en la terminal, cosa que hago muy seguido, principalmente cuando trabajo en mi servidor casero, ya tengo Emed.
Ayer, despues de poco mas de un año en desarrollo en privado, hice público el repositorio en GitHub: https://github.com/laborin/emed. Si quieres probarlo, adelante, pero considera que es todavía un experimento.
No tengo un plan definido para el proyecto. Las últimas dos cosas que le agregué fueron la integración con Claude Code y con LazyGit. Puede que lo siga mejorando, se me ocurre que me sería mas útil ahora una integración con Codex, el cual vengo usando mas que Claude Code últimamente. Por ahora cumple su función, y eso es suficiente.