Emacs est une famille d'éditeurs de texte, connus pour leur extensibilité et leur capacité à s’adapter à une grande variété de tâches informatiques. vignette|Capture d'écran de Spacemacs, une distribution moderne de GNU Emacs Emacs constitue une plateforme basée sur un interpréteur Lisp interactif (REPL), conçue pour développer et exécuter des outils manipulant du texte, par défaut un éditeur, et les automatiser via des scripts ou des macros. Ce système offre une plateforme intégrée où des fonctionnalités comme l’édition de texte et de code ou l’organisation de tâches coexistent dans un environnement cohérent, piloté par un même langage et une même logique.
L'EMACS originel, signifiant Editing MACroS running on TECO, c'est-à-dire « macros d'édition pour TECO », a été écrit en 1976 par Richard Stallman, initialement avec Guy Steele. Il a été inspiré par les idées développées dans TECMAC et TMACS, deux jeux de macros d'édition pour TECO, notamment écrits par Guy Steele, David Moon, Richard Greenblatt et Charles Frankston.
Parmi les nombreuses déclinaisons apparues au fil des ans, GNU Emacs, initié en 1984 par Stallman, est devenu l’implémentation de référence et continue d’évoluer grâce aux contributions de la communauté. XEmacs, un fork de GNU Emacs débuté en 1991, a également été une implémentation majeure d'Emacs avant que son développement ne ralentisse dans les années 2010. Plus récemment, des distributions spécifiques de GNU Emacs sont apparues, telles que Spacemacs ou Doom Emacs, offrant des expériences utilisateur enrichies grâce à des configurations prêtes à l'emploi et des interfaces modernisées.
Histoire thumb|right|Richard Stallman, créateur de GNU Emacs.
Emacs naquit au MIT AI Lab dans les années 1970. Sa naissance, ainsi que celle du projet GNU, est racontée en détails par son auteur, Richard Stallman, dans son livre Free as in Freedom. Avant sa création, l'éditeur par défaut sur ITS, le système d'exploitation des ordinateurs PDP-6 et PDP-10 du l'AI Lab, était un éditeur ligne par ligne connu sous le nom de TECO, lui même né sur le PDP-1. Contrairement aux éditeurs de texte modernes, TECO traitait la saisie, l'édition et l'affichage du document via des modes séparés, tel que vi le fit plus tard. La saisie de caractères dans TECO n'insérait pas les caractères directement dans le document ; il était nécessaire de donner une séquence d'instructions dans le langage de commande de TECO pour lui demander d'insérer les caractères souhaités. Pendant ce temps, le texte édité n'était pas affiché à l'écran. Ce comportement est similaire à celui du programme ed, toujours rencontré de nos jours.
En 1972 (ou 1974), Richard Stallman visite le Stanford AI Lab et découvre l'éditeur E. Ce dernier dispose d'une interface WYSIWYG intuitive, comme celle qu'ont universellement adoptée les éditeurs modernes, à quelques exceptions près. Impressionné par cette fonctionnalité, Richard Stallman retourne au MIT, où Carl Mikkelsen, l'un des hackers de l'AI Lab, vient d'ajouter à TECO le mode édition-affichage appelé Control-R, qui rafraîchit l'écran à chaque fois que l'utilisateur appuie sur une touche. Stallman réécrit et optimise ce mode en lui ajoutant la possibilité d'exécuter des macros, ce qui permet à l'utilisateur de redéfinir n'importe quelle touche pour exécuter un programme TECO.vignette|Un clavier Space Cadet, utilisé sur les machines Lisp sur lesquelles Emacs fut initialement développé, influençant ses raccourcis clavier.Cette nouvelle version de TECO rencontre un succès immédiat à l'AI Lab, et une vaste collection de macros personnalisées s'accumule rapidement, ces dernières ayant souvent un nom se terminant par « MAC » ou « MACS », pour « macros ». Deux ans plus tard, Guy Steele initie le projet d'unifier la trop grande diversité des jeux de commandes claviers en un jeu unique. Après une nuit de travail entre Steele et Stallman, ce dernier termine le codage, qui inclut des facilités pour étendre et documenter ce nouveau jeu de macros. Ce nouvel éditeur standardisé est alors nommé « EMACS », pour « Editing MACroS » (« macros d'édition » en français). D'après Stallman, le nom « Emacs fût choisi car <E> ne servait pas d'abréviation sur ITS à ce moment. »
Stallman réalise plus tard le danger d'une trop grande liberté de personnalisation et des forks de facto, et pose alors certaines conditions à son utilisation :
Implémentations d'Emacs vignette|Zmacs, sur les machines Lisp. Descendant de EINE et ZWEI, cette lignée fut la première à employer Lisp plutôt que TECO à la fin des années 1970. L'Emacs originel, tout comme TECO, ne fonctionnait que sur PDP-10. De nombreux Emacs ou assimilés ont ensuite été écrits dans les années suivantes pour d'autres systèmes informatiques, notamment SINE (SINE Is Not EMACS, « Sine n'est pas EMACS »), EINE (EINE Is Not EMACS) et ZWEI (ZWEI Was EINE Initially, « ZWEI était auparavant EINE ») pour la machine Lisp, qui ont été écrits par Michael McMahon et Daniel Weinreb (« eine » et « zwei » signifient « une » et « deux » en allemand). ZWEI deviendra ensuite Zmacs au début des années 1980.
En 1978, Bernard Greenberg écrit Emacs pour Multics au Cambridge Information Systems Lab de Honeywell. Multics Emacs est écrit en MacLisp, un dialecte de langage de programmation Lisp. Les extensions des utilisateurs sont également écrites en Lisp. Le choix de Lisp autorise une extensibilité jusque-là inconnue, et a été repris par de nombreux Emacs ultérieurs.
Bien qu'EMACS ait été conçu avec TECO, son comportement est suffisamment différent pour qu'il puisse être considéré comme un éditeur de texte à part entière. Il est rapidement devenu le programme d'édition standard sur ITS. Il a aussi été porté d'ITS vers les systèmes d'exploitation TENEX et TOPS-20 par Michael McMahon, mais pas tout de suite sur Unix. Le premier éditeur similaire à Emacs à fonctionner sur UNIX est Gosling Emacs développé par James Gosling en 1981. Il est écrit en langage C et son langage d'extension, Mocklisp, a une syntaxe très similaire au Lisp, mais n'a pas de liste ou d'autre type de donnée structuré. Gosling a en premier lieu permis de redistribuer Gosling Emacs sans restriction formelle, mais l'a vendu à Unipress Software en 1984, le rendant ainsi logiciel propriétaire.
Projet GNU En 1984, Stallman commence à travailler sur GNU Emacs pour produire un logiciel libre comme alternative à Gosling Emacs. Basé à l'origine sur Gosling Emacs, Stallman a fini par remplacer l'interpréteur interne Mocklisp par un véritable interpréteur Lisp, ce qui a entraîné le remplacement de pratiquement tout le code. Il devient alors le premier programme distribué par le projet GNU naissant. GNU Emacs est écrit en C et fournit Emacs Lisp (lui-même écrit en C) comme langage d'extension. La première version largement distribuée de GNU Emacs est la 15.34, publiée en 1985 (les versions 2 à 12 n'ont jamais existé, les premières versions étaient numérotées 1.x.y, mais peu après la version 1.12, la décision d'abandonner le 1. a été prise, car il semblait établi que le numéro majeur ne changerait jamais. La version 13, la première distribuée publiquement, a été publiée le ). La version 16.56 est la plus ancienne dont le code source est encore disponible.
Tout comme Gosling Emacs, GNU Emacs fonctionne sur UNIX ; toutefois, GNU Emacs possède bien plus de fonctionnalités, particulièrement un environnement Lisp complet comme langage d'extension. De ce fait, il remplace bientôt Gosling Emacs comme éditeur Emacs de facto sur UNIX.
Fork Démarré en 1991, Lucid Emacs a été développé par Jamie Zawinski ainsi que d'autres personnes de Lucid inc., en partant d'une version alpha de GNU Emacs 19. Les bases de codes ont rapidement divergé, et les deux équipes de développement ont abandonné les tentatives de fusion censées aboutir à un programme unique. Lucid Emacs a ensuite été rebaptisé XEmacs dans les années 1990. Une grande partie des apports de XEmacs ont depuis été intégrés dans GNU Emacs, conduisant à un essoufflement du projet dans les années 2010.
Autres éditeurs Emacs Liste des implémentations d'Emacs
Fonctionnalités
La richesse de fonctionnalités offerte par Emacs est le résultat d'une conception inhabituelle. Pratiquement toutes les fonctionnalités de l'éditeur, depuis les opérations d'édition de base comme l'insertion d'un caractère dans un fichier jusqu’à la configuration de l'interface utilisateur, sont contrôlées par le biais d'un dialecte du langage de programmation Lisp, appelé Emacs Lisp. Dans cet environnement Lisp, les variables et même les fonctions peuvent être modifiées à la volée, sans qu'il soit nécessaire de recompiler ou même de redémarrer l'éditeur. De ce fait, le comportement d'Emacs peut être changé presque sans limites, que ce soit par l'utilisateur, ou (plus généralement) en chargeant d'importantes portions de code, appelées libraries (« bibliothèques »), packages (« paquetages ») ou extensions.
Emacs dispose de plus de 10 000 commandes intégrées, toutes écrites en Emacs Lisp, et son interface permet à l'utilisateur de combiner ces commandes en macros pour les automatiser ou en créer de nouvelles. Emacs inclut également un grand nombre d'applications elles aussi écrites en Emacs Lisp, et de nombreuses autres, indépendantes, peuvent être téléchargées via le MELPA, un dépôt en ligne permettant d’installer facilement des packages supplémentaires. Via les modes majeurs fournis par ces applications, Emacs peut ainsi être utilisé comme un environnement de développement intégré (EDI), permettant aux programmeurs de modifier, compiler et déboguer leur code depuis une unique interface. D'autres applications apportent des fonctions de gestion de projet, de développement ou d'organisation, par exemple :
dap-mode, interface de débogage basée sur le Debug Adapter Protocol, permettant de tracer et inspecter le code dynamiquement via un débogueur externe (gdb, lldb) ; Dired, un gestionnaire de fichiers flexible avec support de l’automatisation et de la manipulation de fichiers en masse ; Ediff, pour travailler de manière interactive avec les fichiers de différences ; Emerge, pour comparer des fichiers et les fusionner ; Eww, un navigateur web, notamment utilisé par les clients mail ; Eshell, un shell Unix intégré programmable en Emacs Lisp ; Exwm, un gestionnaire de fenêtres pour X.Org, permettant d'utiliser Emacs comme environnement de bureau ; Gnus et mu4e, des clients mail complets ; gptel ou aidermacs, assistants d'intelligence artificielle à la façon de Copilot dans Visual Studio Code ; Helm/Ivy/Vertico/Selectrum, des systèmes d'auto-complétion et de sélection pour naviguer efficacement dans les fichiers et les commandes ; lsp-mode (Language Server Protocol), intégration native de LSP pour un support IDE avec complétion et aide contextuelle pour de nombreux langages ; Magit, une interface Git intuitive et interactive ; MULE, MUltiLingual extensions to Emacs, permettant l'édition de texte écrit dans plusieurs alphabets et plusieurs langues, semblable à Unicode ; Org, un système de gestion de l'information personnel en mode texte permettant la prise de notes, l'organisation de tâches et la planification de projets. Le mode Org permet également la programmation lettrée ainsi que la création de documents, de feuilles de calcul, de présentations ou de pages web avec exportation dans de multiples formats ; Org-roam, extension d'Org-mode pour créer une base de connaissance de notes interconnectées à la manière de Wikipédia ou d'un Zettelkasten; Projectile, un gestionnaire de projets pour naviguer, compiler et gérer des projets complexes ; Tramp, un module permettant d'éditer des fichiers distants via SSH, partages réseau et d’autres protocoles comme s’ils étaient locaux