GNU Emacs es un editor de texto y un conjunto de herramientas de software libre . Su desarrollo comenzó en 1984 por el fundador del Proyecto GNU, Richard Stallman , [4] basándose en el editor Emacs desarrollado para sistemas operativos Unix . GNU Emacs ha sido un componente central del proyecto GNU y un proyecto emblemático del movimiento del software libre . [5] [6]
El lema del programa es "el editor de texto autodocumentado extensible". [7] La mayoría de la funcionalidad en GNU Emacs está implementada en Emacs Lisp accesible para el usuario , [8] lo que permite una extensibilidad profunda directamente por parte de los usuarios y a través de paquetes contribuidos por la comunidad. Sus características integradas incluyen un explorador y editor de archivos ( Dired ), una calculadora avanzada (Calc ), un cliente de correo electrónico y lector de noticias ( Gnus ), una integración del Protocolo de servidor de lenguaje , [9] y el sistema de productividad Org-mode . Una gran comunidad de usuarios ha contribuido con extensiones como la interfaz Git Magit , la capa de emulación Vim Evil , varios marcos de búsqueda, el administrador de ventanas EXWM, [10] y herramientas para trabajar con una amplia gama de lenguajes de programación.
El EMACS original fue escrito en 1976 por David A. Moon y Guy L. Steele Jr. como un conjunto de macros para el editor TECO , y en 1984, Richard Stallman comenzó a trabajar en GNU Emacs, para producir un reemplazo de software libre al propietario Gosling Emacs . GNU Emacs se basó inicialmente en Gosling Emacs, pero el reemplazo de Stallman de su intérprete Mocklisp con un verdadero intérprete Lisp requirió que casi todo su código fuera reescrito. Este se convirtió en el primer programa lanzado por el entonces naciente Proyecto GNU. GNU Emacs está escrito en C y proporciona Emacs Lisp , también implementado en C, como un lenguaje de extensión. La versión 13, la primera versión pública, se publicó el 20 de marzo de 1985. La primera versión de GNU Emacs ampliamente distribuida fue la versión 15.34, publicada más tarde en 1985. Las primeras versiones de GNU Emacs se numeraron como "1.xx", con el dígito inicial indicando la versión del núcleo C. El "1" se eliminó después de la versión 1.12 ya que se pensó que el número principal nunca cambiaría, y por lo tanto la versión principal pasó del "1" al "13". Se agregó un nuevo tercer número de versión para representar los cambios realizados por los sitios de los usuarios. [11] En el esquema de numeración actual, un número con dos componentes significa una versión de lanzamiento, y las versiones de desarrollo tienen tres componentes. [12]
GNU Emacs fue posteriormente adaptado al sistema operativo Unix . Ofrecía más funciones que Gosling Emacs, en particular un Lisp completo como lenguaje de extensión, y pronto reemplazó a Gosling Emacs como editor de facto de Emacs para Unix. Markus Hess explotó una falla de seguridad en el subsistema de correo electrónico de GNU Emacs en su ola de piratería de 1986, en la que obtuvo acceso de superusuario a computadoras Unix. [13]
Aunque los usuarios enviaban comúnmente parches y código Elisp al grupo de noticias net.emacs , la participación en el desarrollo de GNU Emacs estuvo relativamente restringida hasta 1999, y se utilizó como ejemplo del estilo de desarrollo "Catedral" en The Cathedral and the Bazaar . Desde entonces, el proyecto ha adoptado una lista de correo de desarrollo pública y acceso CVS anónimo . El desarrollo se llevó a cabo en un único tronco CVS hasta 2008, y hoy utiliza el Git [14] DVCS .
Richard Stallman ha seguido siendo el principal mantenedor de GNU Emacs, pero ha dejado de desempeñar su función en ocasiones. Stefan Monnier y Chong Yidong han supervisado el mantenimiento desde 2008. [15] El 21 de septiembre de 2015, Monnier anunció que dejaría su puesto de mantenedor a partir del congelamiento de funciones de Emacs 25. [16] El colaborador de larga data John Wiegley fue anunciado como el nuevo mantenedor el 5 de noviembre de 2015. [17] A Wiegley se unieron Eli Zaretskii en julio de 2016, [18] [20] y Lars Ingebrigtsen en septiembre de 2020. [21]
Los términos de la Licencia Pública General GNU (GPL) establecen que el código fuente de Emacs, incluidos los componentes C y Emacs Lisp, están disponibles gratuitamente para su examen, modificación y redistribución.
Las versiones anteriores de la documentación de GNU Emacs aparecieron bajo una licencia ad hoc que requería la inclusión de cierto texto en cualquier copia modificada. En el manual del usuario de GNU Emacs, por ejemplo, esto incluía instrucciones para obtener GNU Emacs y el ensayo de Richard Stallman El Manifiesto GNU . Los manuales de XEmacs, que fueron heredados de manuales anteriores de GNU Emacs cuando se produjo la bifurcación, tienen la misma licencia. Las versiones más nuevas de la documentación utilizan la Licencia de Documentación Libre de GNU con "secciones invariables" que requieren la inclusión de los mismos documentos y que los manuales se proclaman a sí mismos como Manuales de GNU . [ cita requerida ]
En el caso de GNU Emacs, al igual que en el de muchos otros paquetes de GNU, la política sigue siendo aceptar contribuciones significativas de código sólo si el titular de los derechos de autor firma una renuncia o cesión adecuada de sus derechos de autor a la Free Software Foundation (FSF). Las contribuciones pequeñas de menos de 10 líneas de código están exentas. Esta política se aplica para que la FSF pueda defender el software en los tribunales si se viola su licencia copyleft .
En 2011, se advirtió que GNU Emacs había estado publicando accidentalmente algunos binarios sin el código fuente correspondiente durante dos años, en contra del espíritu previsto por la GPL. [22] [23] [24] Richard Stallman describió este incidente como "un error muy grave", [25] que se solucionó rápidamente. La FSF no demandó a ningún redistribuidor que, sin saberlo, violara la GPL al distribuir estos binarios.
En su modo de edición normal, GNU Emacs se comporta como editores de texto comunes al permitir al usuario escribir texto con el teclado y mover el punto de edición con las teclas de flecha . Las secuencias de teclas de escape o presionar la tecla control y/o la tecla meta , la tecla alt o las teclas super junto con una tecla normal producen pulsaciones de teclas modificadas que invocan funciones del entorno Emacs Lisp. Los comandos como save-buffer
y save-buffers-kill-emacs
combinan múltiples pulsaciones de teclas modificadas.
Algunos comandos de GNU Emacs funcionan invocando programas externos, como ispell para la corrección ortográfica y GNU Compiler Collection (GCC) para la compilación de programas. Emacs también admite "procesos inferiores", procesos secundarios de larga duración que interactúan con el editor. Esto se utiliza para implementar el modo shell , que ejecuta un shell de Unix como proceso inferior, así como los modos de bucle de lectura, evaluación e impresión (REPL) para varios lenguajes de programación. El soporte de Emacs para procesos externos lo hace adecuado para la programación interactiva en la línea de Interlisp o Smalltalk . [26]
Los usuarios que prefieran el diseño de atajo de teclado ampliamente utilizado de IBM Common User Access pueden usar cua-mode , un paquete que originalmente era un complemento de terceros pero que se ha incluido en GNU Emacs desde la versión 22.
Emacs utiliza el "minibuffer", normalmente la línea inferior, para mostrar mensajes y solicitar información, funciones que suelen realizar los cuadros de diálogo de los editores de GUI . El minibuffer contiene información como el texto que se debe buscar o el nombre de un archivo que se debe leer o guardar. Cuando corresponde, se puede completar la línea de comandos utilizando las teclas de tabulación y espacio.
Emacs guarda el texto en estructuras de datos conocidas como buffers . Los buffers pueden o no mostrarse en pantalla, y todas las características de los buffers son accesibles tanto por los programas Emacs Lisp como por la interfaz de usuario. [27] El usuario puede crear nuevos buffers y descartar los no deseados, y pueden existir muchos buffers al mismo tiempo, limitados únicamente por la memoria disponible. [28] Emacs puede configurarse para guardar la lista de buffers abiertos al salir y volver a abrir esta lista cuando se reinicia. [29]
Algunos buffers contienen texto cargado desde archivos de texto , que el usuario puede editar y guardar de nuevo en un almacenamiento permanente. Se dice que estos buffers son archivos "de visita". Los buffers también sirven para mostrar otros datos, como la salida de comandos de Emacs, listados de directorios , cadenas de documentación mostradas por la biblioteca "ayuda" y mensajes de notificación que en otros editores se mostrarían en un cuadro de diálogo . Algunas de estas notificaciones se muestran brevemente en el minibuffer, y GNU Emacs proporciona un buffer de *Mensajes* que mantiene un historial de las notificaciones más recientes de este tipo. Cuando el minibuffer se utiliza para la salida de Emacs, se le llama "área de eco". [30] Las notificaciones más largas se muestran en buffers propios. La longitud máxima de los mensajes que se mostrarán en el minibuffer es, por supuesto, configurable.
Los buffers también pueden servir como áreas de entrada y salida para un proceso externo, como un shell o REPL . Los buffers que Emacs crea por sí mismo suelen tener un nombre con asteriscos en cada extremo para distinguirlos de los buffers de usuario. La lista de buffers abiertos se muestra en este tipo de buffer.
La mayoría de las secuencias de teclas de Emacs siguen funcionando en cualquier búfer. Por ejemplo, la función estándar Ctrl-s isearch
se puede utilizar para buscar nombres de archivos en búferes de directorio, y la lista de archivos se puede guardar en un archivo de texto como cualquier otro búfer. Los búferes de directorio se pueden cambiar a un modo de escritura, en el que los nombres de archivo y los atributos se pueden editar textualmente; cuando se guarda el búfer, los cambios se escriben en el sistema de archivos. Esto permite cambiar el nombre de varios archivos utilizando las funciones de búsqueda y reemplazo de Emacs. Cuando está equipado, Emacs muestra archivos de imagen en búferes. Emacs es seguro para binarios y limpio de 8 bits. [31]
Emacs puede dividir el área de edición en secciones independientes que no se superponen y que se denominan "ventanas", una característica que ha estado disponible desde 1975, antes de que existiera la interfaz gráfica de usuario de uso común. En la terminología de Emacs, las "ventanas" son similares a lo que otros sistemas llaman " marcos " o " paneles ": una porción rectangular de la pantalla del programa que se puede actualizar e interactuar con ella de forma independiente. Cada ventana de Emacs tiene una barra de estado denominada "línea de modo" que se muestra de forma predeterminada en el borde inferior de la ventana. Las ventanas de Emacs están disponibles tanto en modo de terminal de texto como en modo gráfico y permiten que se muestren más de un búfer, o varias partes de un búfer, a la vez. Las aplicaciones comunes son mostrar un búfer de directorio junto con el contenido de los archivos en el directorio actual (hay modos especiales para hacer que el búfer de archivo siga al archivo resaltado en directorio), mostrar el código fuente de un programa en una ventana mientras otra muestra un búfer de shell con los resultados de compilar el programa, ejecutar un depurador junto con un búfer de shell que ejecuta el programa, trabajar en el código mientras se muestra una página de manual u otra documentación (posiblemente cargada a través de la World Wide Web utilizando uno de los navegadores web integrados de Emacs) o simplemente mostrar múltiples archivos para editarlos a la vez, como un encabezado junto con su archivo de implementación para lenguajes basados en C. Además, existe el modo follow-mode , un modo menor que encadena ventanas para mostrar partes no superpuestas de un búfer. Usando el modo follow-mode , un solo archivo se puede mostrar en múltiples ventanas una al lado de la otra que se actualizan apropiadamente cuando se desplaza. Además, Emacs admite "estrechar" un búfer para mostrar solo una parte de un archivo, con funcionalidad de navegación superior/inferior del búfer y cálculos de tamaño de búfer que reflejan solo el rango seleccionado.
Las ventanas de Emacs están organizadas en mosaicos y no pueden aparecer "encima" o "debajo" de sus compañeras. Emacs puede iniciar múltiples "marcos", que se muestran como ventanas individuales en un entorno gráfico. En una terminal de texto, se muestran múltiples marcos apilados que llenan toda la terminal y se pueden cambiar de uno a otro utilizando los comandos estándar de Emacs. [32]
GNU Emacs puede mostrar o editar una variedad de tipos de texto diferentes y adapta su comportamiento mediante la introducción de modos adicionales denominados "modos principales". Existen modos principales para muchos propósitos diferentes, entre los que se incluyen la edición de archivos de texto ordinarios, el código fuente de muchos lenguajes de marcado y programación , así como la visualización de páginas web , listados de directorios y otra información del sistema. Cada modo principal implica un programa Emacs Lisp que extiende el editor para que se comporte de manera más conveniente para el tipo de texto especificado. Los modos principales suelen proporcionar algunas o todas las siguientes características comunes:
El uso de "modos menores" permite una mayor personalización. Un buffer de edición de GNU Emacs puede utilizar sólo un modo mayor a la vez, pero pueden operar varios modos menores simultáneamente. Estos pueden operar directamente sobre los documentos, como en la forma en que el modo mayor para el lenguaje de programación C define un modo menor separado para cada uno de sus estilos de sangría populares , o pueden alterar el entorno de edición. Algunos ejemplos de esto último incluyen un modo que agrega la capacidad de deshacer cambios en la configuración de la ventana y uno que realiza una verificación de sintaxis sobre la marcha. También hay un modo menor que permite utilizar varios modos mayores en un solo archivo, para mayor comodidad al editar un documento en el que se incluyen varios lenguajes de programación.
GNU Emacs permite utilizarlo como intérprete del lenguaje Emacs Lisp sin mostrar la interfaz de usuario del editor de texto. En el modo por lotes, no se carga la configuración del usuario y los caracteres de interrupción de terminal Cc y Cz tendrán su efecto habitual de salir del programa o suspender la ejecución en lugar de invocar las combinaciones de teclas de Emacs. GNU Emacs tiene opciones de línea de comandos para especificar un archivo para cargar y ejecutar, o se puede pasar una función de Emacs Lisp desde la línea de comandos. Emacs se iniciará, ejecutará el archivo o la función pasados, imprimirá los resultados y luego saldrá. [34] La línea shebang#!/usr/bin/emacs --script
permite la creación de scripts independientes en Emacs Lisp. [35]
El Manual de GNU Emacs , escrito por Richard Stallman, se incluye con GNU Emacs y se puede ver con el navegador de información incorporado. [36] Se incluyen dos manuales adicionales, el Manual de referencia de Emacs Lisp de Bil Lewis, Richard Stallman y Dan Laliberte y An Introduction to Programming in Emacs Lisp de Robert Chassell . Los tres manuales también están publicados en forma de libro por la Free Software Foundation .
GNU Emacs admite muchos alfabetos, sistemas de escritura y convenciones culturales, y proporciona corrección ortográfica para muchos idiomas mediante la llamada a programas externos como ispell . La versión 24 agregó compatibilidad con texto bidireccional y escritura de izquierda a derecha y de derecha a izquierda para idiomas como árabe, persa y hebreo.
Se admiten muchos sistemas de codificación de caracteres , incluido UTF-8 . GNU Emacs utiliza UTF-8 para su codificación a partir de la versión 23, mientras que las versiones anteriores utilizaban su propia codificación internamente y realizaban la conversión al cargar y guardar. La codificación interna que utiliza XEmacs es similar a la de GNU Emacs, pero difiere en los detalles.
La interfaz de usuario de GNU Emacs se originó en inglés y, con la excepción del tutorial para principiantes, no ha sido traducida a ningún otro idioma.
Un subsistema llamado Emacspeak permite a los usuarios ciegos o con discapacidad visual controlar el editor a través de comentarios de audio.
El comportamiento de GNU Emacs puede modificarse y ampliarse casi sin límites incorporando programas Emacs Lisp que definan nuevos comandos, nuevos modos de buffer, nuevos mapas de teclas, añadan opciones de línea de comandos, [37] y así sucesivamente. Muchas extensiones que proporcionan funcionalidades orientadas al usuario definen un modo principal (ya sea para un nuevo tipo de archivo o para crear una interfaz de usuario que no edite texto); otras definen sólo comandos o modos secundarios, o proporcionan funciones que mejoran otra extensión.
Desde la versión 24, GNU Emacs incluye un gestor de paquetes integrado al que se puede acceder con el list-packages
comando que permite a los usuarios buscar e instalar paquetes. Históricamente, los paquetes se descargaban manualmente y a menudo se distribuían a través del grupo de noticias de Usenet gnu.emacs.sources. Con el tiempo, muchos paquetes populares se han incluido en Emacs de forma predeterminada; por ejemplo, la versión 21 comenzó a incluir Org-mode , Calc, TRAMP y muchos otros. [38]
Los paquetes notables incluyen:
En sus inicios, GNU Emacs solía funcionar notablemente más lento que los editores de texto rivales porque la carga e interpretación de su código basado en Lisp implicaba una sobrecarga de rendimiento. Las computadoras modernas son lo suficientemente potentes como para ejecutar GNU Emacs con facilidad, pero las versiones anteriores a la 19.29 (lanzada en 1995) no podían editar archivos de más de 8 MB. El límite de tamaño de archivo se aumentó en versiones sucesivas, y las versiones de 32 bits posteriores a GNU Emacs 23.2 pueden editar archivos de hasta 512 MB de tamaño. Emacs compilado en una máquina de 64 bits puede manejar búferes mucho más grandes. [42]
Aunque GNU Emacs está escrito en gran parte en Emacs Lisp, hace un uso extensivo de código C compilado de forma nativa para mejorar el rendimiento. Además de su propio código C, utiliza bibliotecas externas como libxml2 para analizar XML . Los paquetes instalados por el usuario pueden cargar módulos dinámicos. [43]
Desde la versión 28.1, Emacs puede compilar de forma nativa archivos Emacs Lisp a través de libgccjit
, en lugar de solo compilarlos por bytes , lo que resulta en una mejora significativa en el rendimiento. [44] [45]
GNU Emacs se ejecuta en una amplia variedad de sistemas operativos , incluidos DOS , Windows , [46] [47] [48] y la mayoría de los sistemas operativos similares a Unix , como Linux , los diversos BSD , Solaris , AIX , HP-UX y macOS . [49] [50] [51] Muchos sistemas similares a Unix incluyen Emacs de forma predeterminada. [52] En 2023 se lanzó un puerto oficial para Android . [53] La versión 23.1 eliminó el soporte para algunas plataformas consideradas obsoletas. [3]
GNU Emacs se ejecuta tanto en terminales de texto como en entornos de interfaz gráfica de usuario (GUI). En sistemas operativos tipo Unix, GNU Emacs puede utilizar el sistema X Window para producir su GUI, ya sea directamente mediante widgets de Athena o mediante un "kit de herramientas de widgets" como Motif , LessTif o GTK+ . GNU Emacs también puede utilizar los sistemas gráficos nativos de macOS y Windows para proporcionar barras de menú , barras de herramientas , barras de desplazamiento y menús contextuales que se ajusten mejor a la apariencia de cada plataforma .
Lucid Emacs, basado en una versión temprana de GNU Emacs 19, fue desarrollado a principios de 1991 por Jamie Zawinski y otros en Lucid Inc. Una de las bifurcaciones más conocidas en el desarrollo de software libre ocurrió cuando las bases de código de las dos versiones de Emacs divergieron y los equipos de desarrollo separados cesaron los esfuerzos para fusionarlas nuevamente en un solo programa. [54] Después de que Lucid se declarara en quiebra, Lucid Emacs pasó a llamarse XEmacs . [55] El desarrollo de XEmacs se ha ralentizado, con la versión estable más reciente 21.4.22 lanzada en enero de 2009, mientras que GNU Emacs ha implementado muchas características que antes eran exclusivas de XEmacs. Esto ha llevado a algunos usuarios a proclamar la muerte de XEmacs. [56]
Otras bifurcaciones, menos conocidas que XEmacs, incluyen:
Los cambios en cada versión de Emacs se enumeran en un archivo NEWS que se distribuye con Emacs. [60] Los cambios que se producen al volver a la versión anterior se enumeran en un archivo "Antinews", a menudo con algún comentario sarcástico sobre por qué esto podría ser deseable. [61]
Hay un nuevo esquema de numeración de versiones. Lo que solía ser el primer número de versión, que era 1, se ha descartado ya que no parece que necesite tres niveles de número de versión. Sin embargo, se ha añadido un nuevo tercer número de versión para representar los cambios realizados por los sitios de los usuarios. Este número siempre será cero en Emacs cuando lo distribuya; se incrementará cada vez que se compile Emacs en otro sitio.
Un número de versión con dos componentes (por ejemplo, '22.1') indica una versión publicada; tres componentes indican una versión en desarrollo (por ejemplo, '23.0.50' es lo que eventualmente se convertirá en '23.1').
Sin embargo, aún es posible crear múltiples "marcos" en terminales de texto; dichos marcos se muestran uno a la vez, llenando toda la pantalla de la terminal.
Una fuente es una combinación de fuente y color.
En el modo por lotes, Emacs no muestra el texto que se está editando, y los caracteres de interrupción estándar de la terminal, como Cz y Cc, tienen su efecto habitual. Las funciones de Emacs que normalmente imprimen un mensaje en el área de eco, imprimirán en el flujo de salida estándar (stdout) o en el flujo de error estándar (stderr) en su lugar. (Para ser precisos, funciones como prin1, princ y print imprimen en stdout, mientras que message y error imprimen en stderr). Las funciones que normalmente leen la entrada del teclado desde el minibuffer toman su entrada del flujo de entrada estándar de la terminal (stdin) en su lugar.
NOTICIAS DE GNU Emacs: historial de cambios visibles para el usuario.
Para aquellos usuarios que viven al revés en el tiempo, aquí hay información sobre cómo volver a la versión 24.5 de Emacs. Esperamos que disfruten de la mayor simplicidad que resulta de la ausencia de muchas características de Emacs 25.2.
Emacs 29.4 es una versión de corrección de errores de emergencia; no incluye nuevas funciones excepto una pequeña cantidad de cambios destinados a resolver una vulnerabilidad de seguridad descubierta en Emacs 29.3 y versiones anteriores.
Emacs 29.4 es una versión de corrección de errores de emergencia destinada a corregir la vulnerabilidad de seguridad que se describe a continuación... Los comandos de shell arbitrarios ya no se ejecutan al activar el modo Org. Esto es por razones de seguridad, para evitar la ejecución de comandos maliciosos.
Tramp
[...] significa "Acceso remoto transparente (a archivos), protocolo múltiple".
{{cite web}}
: CS1 maint: URL no apta ( enlace )A los programas como los programas de correo que invocan "el editor" como un elemento inferior para editar algún texto ahora se les puede indicar que utilicen un proceso Emacs existente en lugar de crear un nuevo editor.