En Emacs, todo parece un servicio
(yummymelon.com)- Emacs, más que ser un sistema operativo en sí, orquesta aplicaciones y utilidades sobre el kernel, y se convierte en cliente de diversos servicios aprovechando el sistema de archivos, la red y programas externos
- Las capas de UI, comunicación y almacenamiento local de datos que necesita un cliente pueden construirse con bibliotecas integradas como minibuffers, buffers, URL, TCP/UDP, JSON y SQLite
- Emacs Lisp (Elisp), al ser un lenguaje dinámico, combina funciones de Elisp y comandos de shell en tiempo de ejecución para orquestar con flexibilidad las capacidades a las que Emacs puede acceder
- El comando de ejemplo
wttrrecibe una ubicación, envía una solicitud HTTP a wttr.in, extrae de JSON la región, la temperatura y el clima, lo muestra en el minibuffer y también lo guarda en el kill ring - Todo
wttr.eltiene 67 líneas segúncloc; si se delegan las solicitudes de red y el procesamiento de JSON a herramientas de línea de comandos como Python, también se puede crear un cliente Elisp más corto que trate al propio comando de shell como un servicio
Emacs orquesta servicios sobre el sistema operativo
- Llamar a Emacs un sistema operativo no es exacto, pero la comparación surge por su capacidad de orquestar aplicaciones y utilidades sobre el kernel del sistema operativo
- Como puede acceder con funciones integradas a servicios del sistema operativo como el sistema de archivos y la red, y también ejecutar otros programas, es fácil armar sobre la marcha comportamientos de cliente dentro de Emacs
- Dado que permite resolver muchas tareas de cómputo mediante distintos modos de cliente, también tiene sentido la idea de que el usuario “vive solamente dentro de Emacs”
El modelo cliente-servidor visto como solicitudes y respuestas
- El modelo cliente-servidor es un patrón de interacción en el que un servicio que proporciona recursos y un cliente que los solicita se reparten el trabajo
- El cliente envía una solicitud
- El servidor procesa la solicitud y devuelve una respuesta
- Las transacciones formadas por solicitudes y respuestas pueden realizarse a través de la red o localmente dentro de un mismo sistema
- El modelo basado en red se desarrolló ampliamente en la arquitectura de software de estilo REST
Las tres áreas que componen un cliente de Emacs
- Un cliente típico se encarga de estas tres áreas
- UI: procesa la entrada y la salida del usuario según sea necesario
- Borde del cliente (Client Edge): se comunica con el servicio; en clientes de red, el subsistema de red cumple este rol
- Base de datos local: representa los datos que se intercambian o sincronizan con el servidor, y la forma concreta de administrarlos depende de los requisitos de implementación
-
Construcción de la interfaz de usuario
- Emacs ofrece varias funciones integradas para crear la UI de un cliente
- Minibuffers
- Buffers
- Completion
- Tabulated List Mode
- Variable Pitch Table (vtable)
- Transient
-
Comunicación con servicios y transformación de datos
- Para el borde del cliente que se conecta al servicio se pueden usar estas funciones
- Para la serialización y deserialización se usan parsers integrados
-
Gestión de datos locales
- Para una representación local de los datos del servidor se pueden usar colecciones de Elisp
- Si se necesita almacenamiento local persistente, se puede usar SQLite
- La complejidad de un cliente real depende de los requisitos, y si ya existe una utilidad de línea de comandos para encargarse del procesamiento pesado, puede replantearse como un servicio accesible mediante llamadas de shell
Cómo combinar funcionalidades con Elisp
- Todas las bibliotecas anteriores son accesibles desde Emacs Lisp (Elisp)
- Elisp es un lenguaje de programación dinámico que permite una composición improvisada de alto nivel durante la ejecución
- Puede orquestar flujos complejos combinando acciones que Emacs puede usar, desde funciones de Elisp hasta comandos de shell
Implementación de un cliente meteorológico para wttr.in
- wttr.in es un servicio web de pronóstico del tiempo centrado en la consola y admite salida JSON
- El comando
wttrpara Emacs funciona en este orden- Pide al usuario una ubicación
- Genera la URL de solicitud a wttr.in
- Envía la solicitud HTTP
- Procesa la respuesta JSON
- Muestra el resultado en el minibuffer y lo guarda en el kill ring
- Si ocurre un error durante el procesamiento, muestra un mensaje de error en el minibuffer
-
Crear la URL de solicitud
wttr--request-urlusahttps://wttr.incomo URL base- Reemplaza los espacios de la ubicación ingresada por
+y genera una consulta con la forma/<location>?0&format=j1 - La URL completa se pasa luego a la función para obtener JSON
-
Solicitud HTTP y parsing de JSON
fetch-json-as-hash-tableobtiene la URL de forma síncrona conurl-retrieve-synchronously- Si no recibe datos, genera el error
Failed to fetch data from <URL> - En el buffer de respuesta, avanza hasta después de los encabezados de metadatos HTTP y luego convierte el contenido restante en una
hash-tablede Elisp conjson-parse-buffer - Al terminar el procesamiento, siempre elimina el buffer de red descargado para evitar fugas de memoria
-
Composición del mensaje del clima
wttr--report-messageextrae estos valores de los datos JSON- Nombre de la localidad más cercana
- Región
- País
- Temperatura actual en Celsius
temp_C - Temperatura actual en Fahrenheit
temp_F - Descripción del clima
weatherDesc
- Une con comas los elementos de ubicación que no estén vacíos y crea un resultado con el formato
ubicación: Celsius, Fahrenheit descripción del clima - La implementación completa puede consultarse en el código fuente de wttr.el
Usar herramientas de línea de comandos también como servicios
- La API de Emacs ofrece abstracciones de alto nivel, y
wttr.el, que implementa directamente las solicitudes HTTP y el procesamiento de JSON, también tiene 67 líneas segúncloc - Una alternativa más simple es delegar la solicitud de red real y el procesamiento de JSON a un script de Python llamado
weather- El comando
weatherde Elisp pide al usuario una ubicación - Construye un comando de shell
weatheragregando la ubicación como argumento - Ejecuta el comando con
shell-command-to-string - Guarda el resultado devuelto en el kill ring y lo muestra en el minibuffer
- El comando
- En esta configuración, el comando de shell se convierte en el servicio que recibe solicitudes y la función de Elisp actúa como cliente
- Gracias a la naturaleza dinámica de Elisp, las bibliotecas de Elisp y las utilidades de línea de comandos pueden combinarse según sea necesario, y esta posibilidad de integración permite tratar todo dentro de Emacs como si fuera un servicio
1 comentarios
Opiniones en Hacker News
Como la familia de las Lisp Machines no llegó a convertirse en la corriente dominante, Emacs simplemente se ve como un sistema operativo
“Symbolics Lisp Machine demo”
https://www.youtube.com/watch?v=o4-YnLpLgtk
“Emacs and Lisp”
https://funcall.blogspot.com/2025/04/emacs-and-lisp.html
Lucid hizo un fork de Emacs como XEmacs para intentar implementar una de las primeras ideas de LSP, y la mayoría de las funciones de esa época ya se reintegraron en Emacs
https://dreamsongs.com/Cadillac.html
“Lucid Energize Demo”
https://www.youtube.com/watch?v=pQQTScuApWk
Si se definen
client,serveryrequestcon suficiente amplitud, cualquier cosa puede encajar en una arquitectura cliente/servidor. Es parecido a esforzarse por afirmar que Emacs sigue la filosofía Unix solo porque una función LISP hace bien una sola cosaLa mayoría puede estar de acuerdo en que Emacs sigue la idea de las máquinas LISP, y sobre él se puede implementar prácticamente cualquier cosa que uno quiera. Se integra de maravilla con herramientas CLI, pero no queda claro qué se gana definiendo eso como cliente/servidor
Durante décadas fue absorbiendo funciones al pasar por varias modas, y por dentro incluso tiene el motor de análisis semántico CEDET, que hoy casi no se usa. Luego llegó LSP, y ahora estamos en la era de los agentes; Emacs también funciona bastante bien como frontend para agentes
Usé Emacs durante más de 25 años, pero en la empresa a la que me cambié el año pasado no me dejan usarlo ni siquiera para tareas en las que Emacs encaja especialmente bien. La razón fue que todos los miembros del equipo debían usar la misma herramienta, y no logré convencer a los demás de pasarse a Emacs
Ahora estoy usando, de forma mucho menos eficiente, herramientas de propósito único separadas para cada tarea, mientras sigo aprendiendo nuevas interfaces y mapeos de teclas
El administrador dirá que en los proyectos nuevos todos usemos Visual Studio Code, pero el modelo de consumo que usamos ni siquiera es compatible con VSCode. Si Git y el procedimiento de despliegue coinciden, cada quien debería poder elegir el editor que mejor maneje; pero supongo que la respuesta será que, al ser open source sin soporte de Microsoft, es riesgoso y es software no validado por la empresa
Emacs es una herramienta central que uso todos los días, así que si lo prohíben pienso renunciar. El administrador no intenta entender ni razonar lógicamente; solo sigue instrucciones de otro departamento de TI
Si la empresa designó un editor de texto de uso general, vale la pena comprobar si incluso ejecutar Notepad sería un problema, o si también designaron una herramienta personal de gestión de tareas. Busca una categoría de cosas que Emacs pueda hacer y para la que la empresa aún no haya designado una herramienta, e instálalo para ese uso
Emacs es una plataforma, y un sistema operativo también es solo una de varias plataformas. Una plataforma es una capa de software diseñada para permitir construir cosas nuevas encima, así que la pregunta debería ser qué plataforma X es adecuada para el Y que se quiere crear
Para mí, X muchas veces es Emacs, pero también podría ser Racket o Rust. Si una herramienta es una aplicación y además una buena plataforma, vale la pena invertir más en aprenderla que en una aplicación simple
Haber usado Emacs lo suficiente como para entender que “Emacs es un sistema operativo” no como una broma, sino como un concepto que realmente se puede creer, fue un punto de inflexión importante en mi carrera
Empecé a usar Emacs hace unos años para probar org mode, y terminé quedándome por su flexibilidad extremadamente alta
init.elEmacs se parece más a un entorno de programación con un editor de texto integrado. Si se lo ve como algo parecido a algunas imágenes de Smalltalk, resulta una herramienta bastante interesante
Emacs no es un sistema operativo, sino más bien un shell, aunque el concepto mismo de shell no se entiende de forma generalizada
vien realidad se parece más a un shell. Eso es porque muchas funciones deben delegarse a otros programas estándar de Unix con:.!En cambio, Emacs incluye todo tipo de funciones en una enorme distribución, como un sistema operativo
Hace poco encontré un video introductorio corto que es bueno para mostrárselo a gente que no usa Emacs
https://www.youtube.com/watch?v=mJZDmO5yOxE
init.elde Anon EmooseEmacs en sí puede ejecutarse como cliente y servidor. Si se inicia el servidor con
emacs --daemony luego se conecta conemacsclient, todas las instancias de terminal y GUI usan el mismo servidor y comparten archivos abiertos y buffersPor desgracia, solo funcionaba en local; intenté reenviar por ssh el socket del servidor de Emacs para conectarme desde un cliente remoto, pero falló
emacsclientno fue bueno. Para alguien que conozca Emacs por primera vez en 2026, es fácil esperar que sincronice por red el estado de ejecución entre cliente y servidor, como un cliente RESTAquí, cliente y servidor se refieren a una estructura en la que el cliente envía comandos de control simples mediante un dominio local de Unix, es decir, un socket del sistema de archivos. Más adelante también se agregó soporte para sockets de red, pero lo que envía el cliente siguen siendo simples comandos de control
ssh -X. Eso sí: en las compilaciones GTK no PGTK hay que tener cuidado, porque Emacs remoto puede fallar al cerrar un frame nuevo