Emacs

Familia de editores de texto

Emacs ( / ˈ m æ k s / ), originalmente llamadoEMACS(acrónimo de "Editor Macros"),[1][2][3]es una familia deeditores de textoque se caracterizan por suextensibilidad.[4]El manual de la variante más utilizada,[5] GNU Emacs, lo describe como "el editor de visualización en tiempo real, extensible, personalizable y autodocumentado".[6]El desarrollo del primer Emacs comenzó a mediados de la década de 1970,[7][8]y el trabajo en GNU Emacs, descendiente directo del original, está en curso; su última versión es la 29.4[9] , lanzado en junio de 2024.

Emacs tiene más de 10.000 comandos integrados y su interfaz de usuario permite al usuario combinar estos comandos en macros para automatizar el trabajo. Las implementaciones de Emacs suelen presentar un dialecto del lenguaje de programación Lisp , lo que permite a los usuarios y desarrolladores escribir nuevos comandos y aplicaciones para el editor. Se han escrito extensiones para, entre otras cosas, gestionar archivos , acceso remoto , [10] correo electrónico , esquemas , multimedia , integración de Git , feeds RSS , [11] y edición colaborativa , [12] así como implementaciones de ELIZA , Pong , Conway's Life , Snake , Dunnet y Tetris . [13]

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 . [14] [1] [2] [3] [15] Se inspiró en las ideas de los editores de macros TECO TECMAC y TMACS. [16]

La versión más popular y más portada de Emacs es GNU Emacs, que fue creada por Richard Stallman para el Proyecto GNU . [17] XEmacs es una variante que se derivó de GNU Emacs en 1991. GNU Emacs y XEmacs utilizan dialectos Lisp similares y son, en su mayor parte, compatibles entre sí. El desarrollo de XEmacs está inactivo.

GNU Emacs es, junto con vi , uno de los dos principales contendientes en las tradicionales guerras de editores de la cultura Unix . GNU Emacs es uno de los proyectos libres y de código abierto más antiguos que aún se encuentran en desarrollo. [18]

Historia

Emacs fue iniciado por Guy L. Steele Jr. como un proyecto para unificar los muchos conjuntos de comandos y combinaciones de teclas divergentes de TECO en el MIT [2]
David A. Luna
La interfaz de Emacs estuvo influenciada por el diseño del teclado Space Cadet , que buscaba permitir a los usuarios escribir tantos tipos diferentes de entrada como fuera posible. [19]

El desarrollo de Emacs comenzó durante la década de 1970 en el Laboratorio de Inteligencia Artificial del MIT , cuyas computadoras PDP-6 y PDP-10 usaban el sistema operativo Incompatible Timesharing System (ITS) que presentaba un editor de línea predeterminado conocido como Tape Editor and Corrector (TECO). A diferencia de la mayoría de los editores de texto modernos, TECO usaba modos separados en los que el usuario agregaría texto, editaría texto existente o mostraría el documento. Uno no podía colocar caracteres directamente en un documento escribiéndolos en TECO, sino que en su lugar ingresaba un carácter ('i') en el lenguaje de comandos de TECO indicándole que cambiara al modo de entrada, ingresara los caracteres requeridos, tiempo durante el cual el texto editado no se mostraba en la pantalla, y finalmente ingresara un carácter (<esc>) para cambiar el editor nuevamente al modo de comando. (Se usó una técnica similar para permitir la sobreescritura). Este comportamiento es similar al del programa ed .

En la década de 1970, TECO ya era un programa antiguo, lanzado inicialmente en 1962. Richard Stallman visitó el Laboratorio de IA de Stanford en 1976 [20] y vio el editor E del laboratorio , escrito por Fred Wright. [21] Quedó impresionado por el comportamiento intuitivo WYSIWYG (What You See Is What You Get) del editor, que desde entonces se ha convertido en el comportamiento predeterminado de la mayoría de los editores de texto modernos. Regresó al MIT, donde Carl Mikkelsen, un hacker del Laboratorio de IA, había añadido a TECO un modo combinado de visualización/edición llamado Control-R que permitía actualizar la visualización de la pantalla cada vez que el usuario introducía una pulsación de tecla. Stallman reimplementó este modo para que se ejecutara de forma eficiente y luego añadió una función macro al modo de visualización-edición de TECO que permitía al usuario redefinir cualquier pulsación de tecla para ejecutar un programa TECO. [3]

E tenía otra característica de la que carecía TECO: la edición de acceso aleatorio. TECO era un editor secuencial de páginas que fue diseñado para editar cintas de papel en el PDP-1 en una época en la que la memoria de la computadora era generalmente pequeña debido al costo, y era una característica de TECO que permitía editar solo una página a la vez de manera secuencial en el orden de las páginas del archivo. En lugar de adoptar el enfoque de E de estructurar el archivo para el acceso aleatorio de páginas en el disco, Stallman modificó TECO para manejar buffers grandes de manera más eficiente y cambió su método de administración de archivos para leer, editar y escribir el archivo completo como un solo buffer. Casi todos los editores modernos utilizan este enfoque.

La nueva versión de TECO se hizo popular rápidamente en el Laboratorio de IA y pronto acumuló una gran colección de macros personalizadas cuyos nombres a menudo terminaban en MAC o MACS , que significaba macro . Dos años después, Guy Steele se encargó del proyecto de unificar las diversas macros en un único conjunto. [22] La implementación final de Steele y Stallman incluía funciones para ampliar y documentar el nuevo conjunto de macros. [3] El sistema resultante se llamó EMACS, que significaba Editing MACroS o, alternativamente, E with MACroS . Stallman eligió el nombre Emacs "porque <E> no se usaba como abreviatura en ITS en ese momento". [23] Un koan hacker apócrifo alega que el programa recibió su nombre de Emack & Bolio's , una popular heladería de Boston . [24] El primer sistema EMACS operativo existió a fines de 1976. [25]

Stallman vio un problema en la excesiva personalización y la bifurcación de facto y estableció ciertas condiciones para su uso. [ cita requerida ] Más tarde escribió: [25]

EMACS se distribuyó sobre la base de compartir comunitariamente, lo que significa que todas las mejoras deben ser devueltas a mí para ser incorporadas y distribuidas.

El Emacs original, al igual que TECO, sólo se ejecutaba en el PDP-10 que ejecutaba ITS. Su comportamiento era lo suficientemente diferente al de TECO como para que pudiera considerarse un editor de texto por derecho propio, y rápidamente se convirtió en el programa de edición estándar en ITS. Mike McMahon trasladó Emacs de ITS a los sistemas operativos TENEX y TOPS-20 . Otros contribuyentes a las primeras versiones de Emacs incluyen a Kent Pitman , Earl Killian y Eugene Ciccarelli. En 1979, Emacs era el editor principal utilizado en el laboratorio de IA del MIT y su Laboratorio de Ciencias de la Computación. [26]

Implementaciones

Implementaciones tempranas

Zmacs , un Emacs para máquinas Lisp , una evolución de EINE y ZWEI
James Gosling escribió un editor similar a Emacs para ejecutarse en Unix ( Gosling Emacs ) en 1981

En los años siguientes, los programadores escribieron una variedad de editores similares a Emacs para otros sistemas informáticos. Estos incluyeron EINE ( EINE Is Not EMACS ) y ZWEI [27] ( ZWEI Was EINE Initially ), que fueron escritos para la máquina Lisp por Mike McMahon y Daniel Weinreb , y Sine ( Sine Is Not Eine ), [28] que fue escrito por Owen Theodore Anderson. EINE de Weinreb fue el primer Emacs escrito en Lisp. En 1978, Bernard Greenberg escribió Multics Emacs casi completamente en Multics Lisp en el Cambridge Information Systems Lab de Honeywell . Multics Emacs fue mantenido más tarde por Richard Soley , quien continuó desarrollando el editor similar a Emacs NILE para el Proyecto NIL, y por Barry Margolin. Muchas versiones de Emacs, incluido GNU Emacs, adoptarían más tarde Lisp como lenguaje de extensión.

James Gosling , quien más tarde inventaría NeWS y el lenguaje de programación Java , escribió Gosling Emacs en 1981. El primer editor similar a Emacs que se ejecutó en Unix [ cita requerida ] , Gosling Emacs fue escrito en C y utilizó Mocklisp , un lenguaje con sintaxis similar a Lisp, como lenguaje de extensión.

Los primeros anuncios de CCA EMACS de Computer Corporation of America (Steve Zimmerman) [29] aparecieron en 1984. [30] Las comparaciones de 1985 con GNU Emacs, cuando salió, mencionaban gratis frente a 2.400 dólares. [31] [ cita irrelevante ]

GNU Emacs

GNU Emacs ejecutándose en una consola de texto
GNU Emacs ejecutándose en Microsoft Windows

Richard Stallman comenzó a trabajar en GNU Emacs en 1984 para producir una alternativa de software libre al propietario Gosling Emacs. GNU Emacs se basó inicialmente en Gosling Emacs, pero la sustitución de Stallman de su intérprete Mocklisp por un verdadero intérprete Lisp requirió que casi todo su código fuera reescrito. Este se convirtió en el primer programa publicado por el naciente Proyecto GNU. GNU Emacs está escrito en C y proporciona Emacs Lisp , también implementado en C, como lenguaje de extensión. La versión 13, la primera publicación pública, se realizó el 20 de marzo de 1985. La primera versión ampliamente distribuida de GNU Emacs fue la versión 15.34, publicada más tarde en 1985. Las primeras versiones de GNU Emacs fueron numeradas como 1.xx , con el dígito inicial denotando 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 numeración pasó del 1 al 13. [ 32] En septiembre de 2014, se anunció en la lista de correo GNU emacs-devel que GNU Emacs adoptaría una estrategia de lanzamiento rápido y que los números de versión aumentarían más rápidamente en el futuro. [33]

GNU Emacs 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. [34]

La mayor parte de la funcionalidad de GNU Emacs se implementa a través de un lenguaje de programación llamado Emacs Lisp . Debido a que aproximadamente el 70% de GNU Emacs está escrito en el lenguaje de extensión Emacs Lisp, [35] uno solo necesita portar el núcleo C que implementa el intérprete de Emacs Lisp. Esto hace que portar Emacs a una nueva plataforma sea considerablemente menos difícil que portar un proyecto equivalente que consista solo en código nativo.

El desarrollo de GNU Emacs estuvo relativamente cerrado hasta 1999 y se utilizó como ejemplo del estilo de desarrollo Cathedral en The Cathedral y 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 luego se cambió al DVCS de Bazaar . El 11 de noviembre de 2014, el desarrollo se trasladó a Git . [36]

Archivo C en Emacs 27 con el tema modus-operandi

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 fueron mantenedores desde 2008 hasta 2015. [37] [38] John Wiegley fue nombrado mantenedor en 2015 después de una reunión con Stallman en el MIT. [39] A principios de 2014, GNU Emacs ha tenido 579 colaboradores individuales a lo largo de su historia. [40]

XEmacs

XEmacs 21.5 en Linux

Lucid Emacs, basado en una versión alfa temprana de GNU Emacs 19, fue desarrollado a principios de 1991 por Jamie Zawinski y otros en Lucid Inc. Una de las primeras 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 por fusionarlas nuevamente en un solo programa. [41] Desde entonces, Lucid Emacs ha sido renombrado XEmacs . Su desarrollo está actualmente inactivo, con la versión estable más reciente 21.4.22 lanzada en enero de 2009 (mientras que se lanzó una beta en 2013), mientras que GNU Emacs ha implementado muchas características que anteriormente solo estaban disponibles en XEmacs. [42] [ se necesita una mejor fuente ]

Otras bifurcaciones de GNU Emacs

Otras bifurcaciones notables incluyen:

  • Aquamacs – basado en GNU Emacs (Aquamacs 3.2 se basa en GNU Emacs versión 24 y Aquamacs 3.3 se basa en GNU Emacs versión 25) que se centra en la integración con la interfaz de usuario de Apple Macintosh
  • Meadow – una versión japonesa para Microsoft Windows [43]

Varios editores de Emacs

uEmacs/Pk 4.0.15 en Linux
El pequeño editor tipo Emacs mg en OpenBSD 5.3. Edición de código fuente Ruby
JOVE ejecutándose en una máquina Debian

En el pasado, proliferaron los proyectos destinados a producir versiones pequeñas de Emacs. GNU Emacs se orientó inicialmente a ordenadores con un espacio de direcciones plano de 32 bits y al menos 1  MiB de RAM. [44] Estos ordenadores eran estaciones de trabajo y miniordenadores de gama alta en los años 1980, y esto dejó una necesidad de reimplementaciones más pequeñas que pudieran funcionar en el hardware de ordenadores personales comunes . Los ordenadores actuales tienen potencia y capacidad más que suficientes para eliminar estas restricciones, pero más recientemente se han diseñado clones pequeños para que quepan en discos de instalación de software o para su uso en hardware menos capaz. [45]

Otros proyectos tienen como objetivo implementar Emacs en un dialecto diferente de Lisp o en un lenguaje de programación totalmente diferente. Aunque no todos se mantienen en activo, estos clones incluyen:

  • MicroEMACS , que fue escrito originalmente por Dave Conroy y desarrollado por Daniel Lawrence y que existe en muchas variantes.
  • mg , originalmente llamado MicroGNUEmacs y, más tarde, mg2a, una rama de dominio público de MicroEMACS destinada a parecerse más a GNU Emacs. Ahora se instala de forma predeterminada en OpenBSD .
  • JOVE (Jonathan's Own Version of Emacs), la implementación no programable de Emacs de Jonathan Payne para sistemas tipo UNIX .
  • MINCE (MINCE no es Emacs completo), una versión para CP/M y posteriormente para DOS, de Mark of the Unicorn . MINCE evolucionó hasta convertirse en Final Word, que finalmente se convirtió en el procesador de textos Borland Sprint .
  • Perfect Writer , una implementación de CP/M derivada de MINCE que se incluyó alrededor de 1982 como procesador de texto predeterminado con las primeras versiones de Kaypro II y Kaypro IV. Más tarde se incluyó con Kaypro 10 como alternativa a WordStar .
  • Freemacs , una versión DOS que utiliza un lenguaje de extensión basado en la expansión de macros de texto y se ajusta al límite de memoria plana original de 64 KiB .
  • Zmacs , para MIT Lisp Machine y sus descendientes, implementado en ZetaLisp .
  • Epsilon , [46] un clon de Emacs de Lugaru Software. Se incluyen versiones para DOS, Windows, Linux, FreeBSD, Mac OS X y OS/2 en la versión. Utiliza un lenguaje de extensión que no es Lisp con sintaxis C y utiliza una implementación de búfer de shell de comandos concurrentes muy temprana bajo el MS-DOS de una sola tarea.
  • PceEmacs es el editor basado en Emacs para SWI-Prolog .
  • Hemlock , originalmente escrito en Spice Lisp , luego en Common Lisp . Una parte de CMU Common Lisp . Influenciado por Zmacs . Más tarde, bifurcado por Lucid Common Lisp (como Helix), LispWorks y proyectos Clozure CL . También existe un proyecto Portable Hemlock, que tiene como objetivo proporcionar un Hemlock que se ejecute en varias implementaciones de Common Lisp.
  • edwin , un editor de texto similar a Emacs incluido en MIT/GNU Scheme.

Editores con emulación Emacs

  • El sistema de texto de Cocoa utiliza parte de la misma terminología y comprende muchos enlaces de navegación de Emacs. Esto es posible porque la interfaz de usuario nativa utiliza la tecla Comando (equivalente a Super) en lugar de la tecla Control . [47]
  • Eclipse (IDE) proporciona un conjunto de combinaciones de teclas de Emacs.
  • Epsilon (editor de texto) Tiene como valor predeterminado la emulación de Emacs y admite un modo vi.
  • GNOME Builder tiene un modo de emulación para Emacs.
  • GNU Readline es un editor de líneas que comprende las combinaciones de teclas de navegación estándar de Emacs. También tiene un modo de emulación vi .
  • IntelliJ IDEA proporciona un conjunto de combinaciones de teclas de Emacs.
  • JED tiene un modo de emulación para Emacs.
  • El editor Joe's Own emula las combinaciones de teclas de Emacs cuando se invoca como jmacs .
  • MATLAB proporciona combinaciones de teclas Emacs para su editor. [48]
  • Multi-Edit proporciona combinaciones de teclas de Emacs para su editor.
  • KornShell tiene un modo de edición de línea Emacs que es anterior a Gnu Readline. [49]
  • Visual Studio Code tiene varias extensiones disponibles para emular las combinaciones de teclas de Emacs.
  • Oracle SQL Developer puede guardar y cargar diseños alternativos de atajos de teclado. Uno de los diseños integrados proporciona combinaciones de teclas similares a las de Emacs, incluido el uso de diferentes comandos para lograr un comportamiento más cercano.

Características

Emacs es principalmente un editor de texto y está diseñado para manipular fragmentos de texto, aunque es capaz de formatear e imprimir documentos como un procesador de textos al interactuar con programas externos como LaTeX , Ghostscript o un navegador web. Emacs proporciona comandos para manipular y mostrar de forma diferencial unidades semánticas de texto como palabras , oraciones , párrafos y construcciones de código fuente como funciones . También cuenta con macros de teclado para ejecutar lotes de comandos de edición definidos por el usuario.

GNU Emacs es un editor de visualización en tiempo real , ya que sus modificaciones se muestran en pantalla a medida que se producen. Este es un comportamiento estándar para los editores de texto modernos, pero EMACS fue uno de los primeros en implementarlo. La alternativa es tener que emitir un comando específico para mostrar el texto (por ejemplo, antes o después de modificarlo). Esto era común en editores de línea y contexto anteriores (o simplemente más simples), como QED (BTS, CTSS, Multics), ed (Unix), ED (CP/M) y Edlin (DOS).

Arquitectura general

Casi toda la funcionalidad de Emacs, incluidas las operaciones de edición básicas como la inserción de caracteres en un archivo, se logra mediante funciones escritas en un dialecto del lenguaje de programación Lisp . El dialecto utilizado en GNU Emacs se conoce como Emacs Lisp (Elisp), y fue desarrollado expresamente para portar Emacs a GNU y Unix . La capa Emacs Lisp se asienta sobre un núcleo estable de servicios básicos y abstracción de plataforma escritos en el lenguaje de programación C , lo que permite que GNU Emacs se pueda portar a una amplia variedad de sistemas operativos y arquitecturas sin modificar la semántica de implementación del sistema Lisp donde vive la mayor parte del editor. En este entorno Lisp, las variables y funciones se pueden modificar sin necesidad de reconstruir o reiniciar Emacs, e incluso las versiones recientemente redefinidas de las características principales del editor se compilan de forma asincrónica y se cargan en el entorno en vivo para reemplazar las definiciones existentes. El GNU Emacs moderno presenta compilación de código nativo y bytecode para Emacs Lisp.

Toda la configuración se almacena en variables, clases y estructuras de datos, y se modifica simplemente actualizándolas en vivo. El uso de un dialecto Lisp en este caso es una ventaja clave, ya que la sintaxis Lisp consiste en las llamadas expresiones simbólicas (o sexprs), que pueden actuar como expresiones de código evaluables y como un formato de serialización de datos similar a, pero más simple y más general que, los conocidos como XML , JSON y YAML . De esta manera, hay poca diferencia en la práctica entre personalizar las características existentes y escribir otras nuevas, las cuales se logran de la misma manera básica. Esto es operativamente diferente de la mayoría de los editores extensibles modernos, por ejemplo, como VS Code , en el que se utilizan lenguajes separados para implementar la interfaz y las características del editor y para codificar su configuración y opciones definidas por el usuario. El objetivo del diseño abierto de Emacs es exponer de forma transparente los componentes internos de Emacs al usuario de Emacs durante el uso normal de la misma forma en que estarían expuestos al desarrollador de Emacs que trabaja en el árbol git , y eliminar lo más posible la distinción entre usar Emacs y programar Emacs, al mismo tiempo que se proporciona un entorno de edición estable, práctico y receptivo para usuarios novatos.

Datos interactivos

La principal estructura de datos de edición de texto es el buffer , una región de memoria que contiene datos (normalmente texto) con atributos asociados. Los más importantes son:

  • El punto : el cursor de edición ;
  • La marca : una ubicación configurable que, junto con el punto, permite la selección de
  • La región : una colección conceptualmente contigua de texto a la que se aplicarán comandos de edición;
  • El nombre y el inodo del archivo que el buffer está visitando (si lo hay);
  • El directorio predeterminado , desde donde se ejecutarán de forma predeterminada todos los comandos de nivel de sistema operativo ;
  • Los modos del buffer , incluido un modo principal y posiblemente varios modos secundarios
  • La codificación del buffer , el método mediante el cual Emacs representa los datos del buffer al usuario;
  • y una variedad de variables locales de buffer y estado de Emacs Lisp.

Los modos , en particular, son un concepto importante en Emacs, que proporciona un mecanismo para desagregar la funcionalidad de Emacs en conjuntos de comportamientos y combinaciones de teclas relevantes para los datos de buffers específicos. Los modos principales proporcionan un paquete general de funciones y comandos relevantes para los datos de un buffer y la forma en que los usuarios pueden interactuar con él (por ejemplo, editar el código fuente en un lenguaje específico, editar hexadecimal , ver el sistema de archivos, interactuar con git , etc.), y los modos secundarios definen colecciones subsidiarias de funcionalidad aplicable a muchos modos principales (como auto-save-mode). Los modos secundarios se pueden activar o desactivar tanto localmente para cada buffer como globalmente para todos los buffers, mientras que los modos principales solo se pueden activar por buffer. Cualquier otro dato relevante para un buffer pero que no esté incluido en un modo se puede manejar simplemente enfocando ese buffer y modificando en vivo los datos relevantes directamente.

Cualquier interacción con el editor (como pulsaciones de teclas o clics en un botón del ratón) se realiza evaluando código Emacs Lisp, típicamente un comando , que es una función diseñada explícitamente para uso interactivo. Las teclas se pueden redefinir arbitrariamente y también se puede acceder a los comandos por nombre; algunos comandos evalúan código arbitrario de Emacs Lisp proporcionado por el usuario de varias maneras (por ejemplo, una familia de eval-funciones, que operan en buffer, regiono expression). Incluso las entradas de usuario más simples (como caracteres imprimibles ) se efectúan como funciones Emacs Lisp, como self-insert-command, vinculada por defecto a la mayoría de las teclas del teclado en un búfer de edición de texto típico, que se parametriza a sí misma con el carácter definido por la configuración regional asociado con la tecla utilizada para llamarla.

Por ejemplo, al presionar la ftecla en un buffer que acepta entrada de texto se evalúa el código , que inserta una copia de la constante de carácter en el punto . El , en este caso, está determinado por lo que Emacs llama el argumento universal : todo el código de comando de Emacs acepta un valor numérico que, en su uso más simple, indica la repetición de una acción, pero en casos más complejos (donde la repetición no tiene sentido) puede producir otros comportamientos. Estos argumentos pueden suministrarse mediante prefijos de comando, como + , o de manera más compacta + , que se expande a . Cuando no se suministra ningún prefijo, el argumento universal es : cada comando se ejecuta implícitamente una vez, pero puede llamarse multiplicar, o de una manera diferente, cuando se suministra con dicho prefijo. Dichos argumentos también pueden ser no positivos cuando tenga sentido que lo sean; depende de la función que acepta el argumento determinar, de acuerdo con su propia semántica, lo que significa un número dado para ella. Un uso común es que las funciones realicen acciones en sentido inverso simplemente verificando el signo del argumento universal, como un comando de ordenación que ordena en sentido inverso de manera predeterminada y en sentido inverso cuando se llama con un argumento negativo, usando el valor absoluto de su argumento como clave de ordenación (por ejemplo, ordenar en sentido inverso por índice de columna (o delimitador) 7), o deshacer/rehacer, que son simplemente negativos entre sí (recorrer hacia adelante y hacia atrás un historial recursivo de diferencias en una cierta cantidad de pasos a la vez).(self-insert-command 1 ?f)?f 1Controlu 7 fMeta7 f(self-insert-command 7 ?f)1-7

Lenguaje de comandos

Debido a su vocabulario relativamente grande de comandos, Emacs cuenta con un lenguaje de comandos establecido hace mucho tiempo , para expresar de manera concisa las pulsaciones de teclas necesarias para realizar una acción. Este lenguaje de comandos reconoce las siguientes teclas de mayúsculas y modificadoras: , , , , , y . Es posible que no todas estén presentes en un teclado de estilo IBM, aunque normalmente se pueden configurar como se desee. Estas se representan en lenguaje de comandos como los prefijos respectivos: , , , , , y . Las teclas cuyos nombres solo se pueden imprimir con más de un carácter se encierran entre corchetes angulares. Por lo tanto, un atajo de teclado como + + + (verificar fórmulas dependientes y calcular todas las celdas en todos los libros abiertos en Excel ) se representaría en lenguaje de comandos de Emacs como , mientras que un comando de Emacs como + + + (búsqueda incremental de archivos por expresión regular que coincida con el nombre de archivo ), se expresaría como . El lenguaje de comandos también se utiliza para expresar las acciones necesarias para invocar comandos sin un atajo asignado: por ejemplo, el comando (que inicializa un búfer en la memoria para el almacenamiento y manipulación temporal de texto), cuando lo invoca el usuario, se informará como , y Emacs escaneará el espacio de nombres de los comandos contextualmente disponibles para devolver la secuencia más corta de pulsaciones de teclas que lo lexiquen de forma única.CtrlAlt⇧ ShiftMetaSuperHyperC-A-S-M-s-H-CtrlAlt⇧ ShiftF9C-A-S-<f9>Metas f CtrlMetasM-s f C-M-sscratch-bufferM-x scra <return>

Visualización dinámica

Debido a que Emacs es anterior a la terminología estándar moderna para interfaces gráficas de usuario , utiliza nombres algo divergentes para los elementos de interfaz familiares. Los buffers, los datos con los que interactúan los usuarios de Emacs, se muestran al usuario dentro de ventanas , que son porciones en mosaico de la pantalla del terminal o la ventana GUI, a las que Emacs se refiere como marcos ; en la terminología moderna, un marco de Emacs sería una ventana y una ventana de Emacs sería una división. Dependiendo de la configuración, las ventanas pueden incluir sus propias barras de desplazamiento, números de línea, a veces una 'línea de encabezado' generalmente para facilitar la navegación y una línea de modo en la parte inferior (generalmente muestra el nombre del buffer, los modos activos y la posición del punto del buffer, entre otros). La parte inferior de cada marco se usa para mensajes de salida (entonces llamado 'área de eco') y entrada de texto para comandos (entonces llamado 'minibuffer').

En general, los elementos de visualización de Emacs (ventanas, marcos, etc.) no pertenecen a ningún dato o proceso específico. Los buffers no están asociados con ventanas, y se pueden abrir múltiples ventanas en el mismo buffer, por ejemplo, para rastrear diferentes partes de un texto largo una al lado de la otra sin desplazarse hacia atrás y hacia adelante, y múltiples buffers pueden compartir el mismo texto, por ejemplo, para aprovechar diferentes modos principales en un archivo de lenguaje mixto. De manera similar, las instancias de Emacs no están asociadas con marcos particulares, y se pueden abrir múltiples marcos que muestren un solo proceso de Emacs en ejecución, por ejemplo, un marco por pantalla en una configuración de múltiples monitores, o un marco de terminal conectado a través de ssh desde un sistema remoto y un marco gráfico que muestre el mismo proceso de Emacs a través del monitor del sistema local.

Así como los buffers no requieren ventanas, la ejecución de procesos de Emacs no requiere ningún marco, y un patrón de uso común es implementar Emacs como un servidor de edición : ejecutarlo como un demonio sin interfaz gráfica y conectarse a él a través de un cliente que genere marcos. Este servidor puede entonces estar disponible en cualquier situación en la que se requiera un editor, simplemente declarando que el programa cliente es del usuario o variable. Dicho servidor continúa ejecutándose en segundo plano, administrando cualquier proceso secundario, acumulando stdin de tuberías abiertas, puertos o fifos, realizando acciones periódicas o preprogramadas y recordando el historial de deshacer del buffer, fragmentos de texto guardados, historial de comandos y otros estados del usuario entre sesiones de edición. En este modo de operación, Emacs se superpone a la funcionalidad de programas como screen y tmux .EDITORVISUAL

Debido a su separación de las preocupaciones de visualización de la funcionalidad de edición, Emacs puede mostrarse de manera aproximadamente similar en cualquier dispositivo más complejo que una terminal tonta , incluyendo la provisión de elementos gráficos WIMP típicos en terminales de texto con suficientes funciones, aunque los marcos gráficos son el modo de visualización preferido, proporcionando un superconjunto estricto de las funciones de los marcos de terminales de texto.

Personalización y extensibilidad

  • Las acciones del usuario se pueden registrar en macros y reproducir para automatizar tareas complejas y repetitivas. Esto se hace a menudo de forma ad hoc, y cada macro se descarta después de su uso, aunque las macros se pueden guardar y volver a invocar más tarde.
    • Debido a la uniformidad de la definición de las características de Emacs en términos de Emacs Lisp, lo que se considera una "acción del usuario" a los efectos de la automatización de macros es flexible: las macros pueden incluir, por ejemplo, pulsaciones de teclas, comandos, clics del ratón, otras macros y cualquier cosa que pueda efectuarse a través de ellas. Por lo tanto, las macros pueden ser recursivas y pueden definirse e invocarse dentro de macros.
  • Al iniciarse, Emacs ejecuta un script Emacs Lisp llamado ~/.emacs (las versiones recientes también buscan ~/emacs.el , ~/.emacs.d/init.el y ~/.config/emacs/init.el , [50] así como variaciones similares en ~/.config/emacs/early-init.el . [51] Emacs lee early-init.el primero si existe, y puede usarse para configurar o cortocircuitar las características principales de Emacs antes de que se carguen, como el sistema de visualización gráfica o el administrador de paquetes . Luego ejecutará la primera versión .emacs o init.el que encuentre, ignorando el resto. Este archivo de personalización personal puede ser arbitrariamente largo y complejo, pero el contenido típico incluye:
    • Establecer variables globales o invocar funciones para personalizar el comportamiento de Emacs, por ejemplo(set-default-coding-systems 'utf-8)
    • Combinaciones de teclas para anular las estándar y agregar atajos para comandos que el usuario considere convenientes pero que no tienen una combinación de teclas predeterminada. Ejemplo:(global-set-key (kbd "C-x C-b") 'ibuffer)
    • Cargar, habilitar e inicializar extensiones (Emacs viene con muchas extensiones, pero solo unas pocas se cargan de forma predeterminada).
    • Configurar ganchos de eventos para ejecutar código arbitrario en momentos específicos, por ejemplo, para volver a compilar automáticamente el código fuente después de guardar un búfer ( after-save-hook)
    • Ejecutar archivos arbitrarios, generalmente para dividir un archivo de configuración demasiado largo en partes manejables y homogéneas ( ~/.emacs.d/ y ~/elisp/ son ubicaciones tradicionales para estos scripts personales)
  • La extensión de personalización permite al usuario configurar propiedades de configuración como el esquema de colores de forma interactiva, desde Emacs, de una forma más sencilla que configurando variables en .emacs : ofrece búsqueda, descripciones y texto de ayuda, entradas de opción múltiple, reversión a valores predeterminados, modificación de la instancia de Emacs en ejecución sin recarga y otras ventajas similares a la funcionalidad de preferencias de otros programas. Los valores personalizados se guardan en .emacs (u otro archivo designado) automáticamente.
  • Los temas , que afectan la elección de fuentes y colores, se definen como archivos Emacs Lisp y se eligen a través de la extensión personalizada.
  • Modos que permiten editar una variedad de lenguajes de programación (por ejemplo, emacs-lisp-mode, c-mode, java-mode, ESS para R) cambiando las fuentes para resaltar el código y las combinaciones de teclas modificadas (foreword-function vs. forward-page). Otros modos incluyen aquellos que admiten la edición de hojas de cálculo (dismal) y texto estructurado.

Autodocumentación

El primer Emacs contenía una biblioteca de ayuda que incluía documentación para cada comando, variable y función interna. Debido a esto, los defensores de Emacs describieron el software como autodocumentado , ya que presenta al usuario información sobre sus características normales y su estado actual. Cada función incluye una cadena de documentación que se muestra al usuario cuando lo solicita, una práctica que posteriormente se extendió a los lenguajes de programación, incluidos Lisp , Java , Perl y Python . Este sistema de ayuda puede llevar a los usuarios al código real de cada función, ya sea desde una biblioteca incorporada o una biblioteca de terceros agregada.

Emacs también tiene un tutorial integrado . Emacs muestra instrucciones para ejecutar comandos de edición simples e invocar el tutorial cuando se inicia sin ningún archivo para editar. El tutorial es de Stuart Cracraft y Richard Stallman.

Cultura

Iglesia de Emacs

La Iglesia de Emacs , formada por Richard Stallman , es una religión parodia creada para los usuarios de Emacs. [52] Aunque se refiere a vi como el editor de la bestia (vi-vi-vi es 6-6-6 en números romanos), no se opone al uso de vi; más bien, lo llama anatema del software propietario . ("Usar una versión libre de vi no es un pecado sino una penitencia ". [53] ) La Iglesia de Emacs tiene su propio grupo de noticias , alt.religion.emacs , [54] que tiene publicaciones que pretenden apoyar a esta religión parodia. Los partidarios de vi han creado un Culto a vi en oposición .

Stallman se ha referido a sí mismo en broma como San Ignacio   de Antioquía , un santo de la Iglesia de Emacs. [55] Esto es en referencia a Ignacio de Antioquía , un padre de la Iglesia primitiva venerado en el cristianismo.

Terminología

La palabra emacs a veces se pluraliza como emacsen , por analogía fonética con boxen y VAXen , haciendo referencia a diferentes variedades de Emacs. [56]

Véase también

Referencias

  1. ^ ab Greenberg, Bernard S. (1979). Multics Emacs: Historia, diseño e implementación.
  2. ^ abc "Preguntas frecuentes sobre GNU Emacs".
  3. ^ abcd Adrienne G. Thompson. "MACSimizing TECO". Archivado desde el original el 24 de octubre de 2013. Consultado el 26 de febrero de 2012 .
  4. ^ "Un tutorial de introducción a GNU Emacs". Para que un editor se denomine "emacs", el requisito principal es que sea completamente extensible con un lenguaje de programación real, no sólo con un lenguaje de macros.
  5. ^ "Referencia de bolsillo de GNU Emacs". GNU Emacs es el editor más popular y extendido de la familia de editores Emacs.
  6. ^ "Manual de GNU Emacs". FSF . Consultado el 24 de noviembre de 2012 .
  7. ^ Zawinski, Jamie (29 de octubre de 2007). "Cronología de Emacs". www.jwz.org . Consultado el 31 de julio de 2023 .
  8. ^ "Sobre el origen de Emacs en 1976 (artículos del blog de Emacs)". onlisp.co.uk . Consultado el 24 de julio de 2024 .
  9. ^ "Emacs 29.4 lanzado".
  10. ^ "Manual del usuario de Tramp". Free Software Foundation . Consultado el 4 de abril de 2009 .
  11. ^ "Presentamos Elfeed, un lector de feeds web de Emacs".
  12. ^ "Edición colaborativa utilizando tipos de datos replicados libres de conflictos".
  13. ^ "Diversiones". Por último, si te sientes frustrado, intenta describir tus problemas a la famosa psicoterapeuta Eliza. Solo hazlo Mx doctor.
  14. ^ Zawinski, Jamie (2005-06-21) [1999]. "Emacs Timeline" (Línea de tiempo de Emacs) . Consultado el 11 de agosto de 2015 .
  15. ^ A Richard Stallman se le atribuye a menudo ser otro cocreador, pero como escribió Daniel Weinreb , "El Emacs original (basado en TECO) fue creado y diseñado por Guy L. Steele Jr. y David Moon. Después de que lo hicieron funcionar y se había establecido como el editor de texto estándar en el laboratorio de IA, Stallman se hizo cargo de su mantenimiento". El propio Moon respondió: "Todo es cierto, hasta donde puedo recordar. Pero para ser justos, debo decir que Stallman mejoró enormemente Emacs después de que lo "liberara" de Guy y de mí". Véase Weinreb, Dan (11 de noviembre de 2007), "Refutación a la historia de Stallman sobre la formación de Symbolics y LMI", blog de Dan Weinreb: software e innovación , archivado desde el original el 1 de enero de 2009.{{citation}}: CS1 maint: URL no apta ( enlace ).
  16. ^ "Una historia de Emacs". Manual de funcionamiento interno de XEmacs . 2006-12-11 . Consultado el 2007-08-22 .
  17. ^ Allombert, Bill. "Concurso de popularidad de Debian". Informe de los editores . Debian . Consultado el 22 de noviembre de 2011 .
  18. ^ "Los 10 programas de código abierto más antiguos y significativos". ZDNet .
  19. ^ Raymond, Eric S.; Cameron, Debra; Rosenblatt, Bill (1996). Aprendiendo GNU Emacs, 2da edición. Sebastopol, CA: O'Reilly. pp. 408–409. ISBN 1-56592-152-6.
  20. ^ Williams, Sam (2002). Libre como en libertad: la cruzada de Richard Stallman por el software libre. Sebastopol, CA: O'Reilly Media. pág. 82. ISBN 0-596-00287-4.
  21. ^ Arthur Samuel (marzo de 1980). "Essential E" (PDF) . Consultado el 19 de abril de 2020 .
  22. ^ "EMACS vs. vi: La interminable 'guerra santa' de los geeks". Archivado desde el original el 26 de noviembre de 2014. Consultado el 30 de mayo de 2014 ."EMACS como tal en realidad comenzó como un proyecto de estándares", escribe Guy Steele por correo electrónico.
  23. ^ Stallman, Richard M. (1987). "El editor de pantalla completa de EMACS". GARB . No. Maj 1987. Lysator, Linköping University. págs. 8–11 . Consultado el 14 de septiembre de 2007 .
  24. ^ Reynolds, Craig (1992-02-10). Wiseman, David G. (ed.). "El koan del nombre Emac Bolio". David G. Wiseman: Historias del folclore informático . Archivado desde el original el 16 de enero de 2003. Un novato arrogante le dijo una vez a Stallman: "Puedo adivinar por qué el editor se llama Emacs, pero ¿por qué el justificador se llama Bolio?". Stallman respondió con fuerza: "Los nombres son solo nombres, Emack & Bolio's es el nombre de una popular heladería en la ciudad de Boston. Ninguno de estos hombres tuvo nada que ver con el software". Con su pregunta respondida, pero sin respuesta, el novato se dio vuelta para irse, pero Stallman lo llamó: "Ni Emacs ni Bolio tuvieron nada que ver con la heladería tampoco".
  25. ^ ab Stallman, Richard (26 de marzo de 1981). EMACS: El editor de pantalla extensible, personalizable y autodocumentado (PDF) (informe técnico). MIT AI Lab. AI Memo 519a . Consultado el 7 de enero de 2011 .
  26. ^ Leigh Klotz (29 de agosto de 2007). "Correo electrónico citado en "Ten cuidado con lo que bromeas"". The New York Times . Consultado el 1 de mayo de 2010 .
  27. ^ "Comentario del autor de ZWEI, Dan Weinreb". Escribí el segundo Emacs de la historia: la implementación de la máquina Lisp, cuya especificación era "hacer lo que hace el Emacs PDP-10 (original) de Stallman", y luego progresé a partir de ahí. Hay MUCHO. Mike McMahon y yo pasamos horas interminables implementando tantos comandos para hacer ZWEI/Zmacs.
  28. ^ Owen Theodore Anderson (enero de 1979). "El diseño y la implementación de un sistema de escritura con editor orientado a la pantalla" (PDF) . Consultado el 9 de septiembre de 2012 .
  29. ^ Christopher Kelty; Mario Biagioli; Peter Jaszi; Martha Woodmansee (2015). Creación y destrucción de propiedad intelectual . Computer Corporation of America (CCA) EMACS, escrito por Steve Zimmerman
  30. ^ "Emacs". 17 de diciembre de 2017.
  31. ^ "Diferencias entre GNU Emacs y CCA Emacs".
  32. ^ "Una historia de Emacs".
  33. ^ "emacs-devel msg 00872 (2014-09-29)". En retrospectiva, la versión 24.3 debería haberse llamado 25.1 y la 24.4 debería haberse llamado 26.1. El término .N debería conservarse solo para versiones que corrijan errores, y ni la 24.3, ni la 24.4, ni la 24.5, que estaba prevista anteriormente, son versiones que corrijan errores.
  34. ^ Stoll, Clifford (1988). "Acosando al hacker astuto". Comunicaciones de la ACM . 31 (5): 484–497. doi : 10.1145/42411.42412 . S2CID  6956966.
  35. ^ "GNU Emacs". Open Hub . Consultado el 25 de noviembre de 2017 .
  36. ^ Raymond, Eric (12 de noviembre de 2014). "El nuevo repositorio Git está disponible" . Consultado el 25 de noviembre de 2017 .
  37. ^ Stallman, Richard (22 de febrero de 2008). "Re: Buscando un nuevo mantenedor o equipo de Emacs". Lista de correo de gnu.org . Consultado el 25 de noviembre de 2017 .
  38. ^ McNamara, Paul (25 de febrero de 2008). «Stallman habla sobre la entrega de GNU Emacs, su futuro y la importancia de la nomenclatura». Network World . Archivado desde el original el 23 de mayo de 2008. Consultado el 25 de noviembre de 2017 .
  39. ^ Chirgwin, Richard (5 de noviembre de 2015). "Emacs obtiene un nuevo encargado de mantenimiento tras la salida de Richard Stallman". The Register . Consultado el 25 de noviembre de 2017 .
  40. ^ Raymond, Eric (29 de marzo de 2014). "La conversión de repositorio más fea de la historia" . Consultado el 25 de noviembre de 2017. Veintinueve años de desarrollo continuo por no menos de 579 personas .
  41. ^ Stephen J., Turnbull. "XEmacs vs. GNU Emacs" . Consultado el 2 de octubre de 2012 .
  42. ^ "XEmacs ha muerto. ¡Viva XEmacs!".
  43. ^ FrontPage - Meadow Wiki Archivado el 16 de febrero de 2012 en Wayback Machine.
  44. ^ "Mis experiencias con Lisp y el desarrollo de GNU Emacs". En aquella época, en 1985, había gente que tenía máquinas de un megabyte sin memoria virtual. Querían poder usar GNU Emacs. Esto significaba que tenía que mantener el programa lo más pequeño posible.
  45. ^ "GNU Zile (Zile es Emacs con pérdida) - Resumen". Las computadoras modernas tienen recursos más que suficientes para iniciar y ejecutar un Emacs completo en una fracción de segundo, y Emacs es probablemente lo que usted necesita. Zile es un clon de Emacs pequeño, rápido y potente. Es útil para instalaciones que ocupan poco espacio (por ejemplo, en disquete), máquinas con poca memoria o sesiones de edición rápidas, especialmente en máquinas remotas o como un usuario diferente, por ejemplo, root.
  46. ^ "Página de inicio de Lugaru Software".
  47. ^ "Sistema de texto de cacao".
  48. ^ "Configuración de combinaciones de teclas para la ventana de comandos y el editor". Blogs de Mathworks . 2007-05-11 . Consultado el 2019-08-18 .
  49. ^ Bolsky, Morris I.; Korn, David G. (1989). "Agradecimientos". El lenguaje de programación y comandos KornShell. Englewood Cliffs, NJ: Prentice Hall. pp. xii. ISBN 0-13-516972-0.
  50. ^ "Archivo de inicio".
  51. ^ "Archivo de inicialización temprana".
  52. ^ "San Ignacio - Richard Stallman" . Consultado el 29 de enero de 2015 .
  53. ^ "Transcripción selectiva y completa de la charla de Richard M Stallman en la ANU". Archivado desde el original el 4 de octubre de 2011. Consultado el 29 de enero de 2015 .
  54. ^ grupo de noticias alt.religion.emacs
  55. ^ "San Ignacio - Richard Stallman". www.stallman.org . Consultado el 27 de marzo de 2018 .
  56. ^ "VAXen". Catb.org . Consultado el 8 de noviembre de 2009 .

Bibliografía

  • Ciccarelli, Eugene (1978). Introducción al editor de Emacs . Cambridge, Massachusetts: Laboratorio de Inteligencia Artificial del MIT. AIM-447.PDF
  • Stallman, Richard M. (1981) [1979]. EMACS: El editor de pantalla extensible, personalizable y autodocumentado . Cambridge, Massachusetts: Laboratorio de Inteligencia Artificial del MIT. AIM-519A.PDF HTML
  • Stallman, Richard M. (2002). Manual de GNU Emacs (15.ª edición). GNU Press. ISBN 1-882114-85-X.
  • Stallman, Richard M. (2002). "Mis experiencias con Lisp y el desarrollo de GNU Emacs" . Consultado el 1 de febrero de 2007 .
  • Chassel, Robert J. (2004). Introducción a la programación en Emacs Lisp. GNU Press. ISBN 1-882114-56-6.
  • Glickstein, Bob (abril de 1997). Cómo escribir extensiones para GNU Emacs . O'Reilly & Associates. ISBN 1-56592-261-1.
  • Cameron, Debra; Elliott, James; Loy, Marc; Raymond, Eric; Rosenblatt, Bill (diciembre de 2004). Learning GNU Emacs, 3.ª edición. O'Reilly & Associates. ISBN 0-596-00648-9.
  • Finseth, Craig A. (1991). El arte de editar textos -o- Emacs para el mundo moderno. Springer-Verlag & Co. ISBN 978-1-4116-8297-9.
  • Thompson, Adrienne G. (2009). "MACSimizing TECO" (Cómo simplificar la MAC de TECO) . Consultado el 26 de febrero de 2012 .
  • Sitio web oficial
  • Lista de implementaciones de Emacs
  • Panorama arquitectónico
Obtenido de "https://es.wikipedia.org/w/index.php?title=Emacs&oldid=1252643809"