EMACS

Retour histoire langages
mise à jour 05-Jan-2003
en construction

EMACS est un éditeur de texte, très utilisé par les programmeurs UNIX. Il doit son origine à Richard Stallman du MIT (Artificial Intelligence Laboratory). Le Text Editor utilisé alors sur le système ITS sur les PDP-6 et PDP-10 de l'AIL était TECO.  TECO faisait l'édition au niveau ligne du langage de commande comme beaucoup d' éditeurs de texte de l'époque et comme le fait encore ed, l'éditeur de base de UNIX.

Carl Mikkelson développa un premier éditeur  plein écran conçu comme une commande de TECO, suivant le modèle de l'éditeur E, développé à Stanford. Richard Stallman ajouta le concept de macro en 1974 à cet éditeur de TECO. Les utilisateurs développèrent une collection de macros que d'abord Guy Steele puis Richard Stallman s'efforcèrent d'unifier à partir de 1976. Le résultat en fut EMACS comme "Editor MACroS". Pour mémoire, EMACS était suivi sur ITS d'un programme de formatage appelé BOLIO.

Un premier portage d'ITS sur Tenex et TOPS-20 toujours sur machines Digital  fut entrepris par Stallman et Michael McMahon. Puis McMahon et Daniel Weinreb développèrent des dérivés tels que EINE (EINE Is Not Emacs) et ZWEI (ZWEI was EINE initially). 

Enfin Bernard Greenberg porta Emacs sous Multics en 1978 au CISL de Honeywell. L'éditeur était écrit en MacLisp. Le choix de Lisp permettait de développer facilement des extensions. 

James Gosling en 1981 écrivit en C et MockLisp le premier éditeur Emacs sur UNIX.

En 1984, Stallman reprit EMACS pour en faire un des composants d e base de son projet GNU de logiciels libres. Le GNU EMACS était écrit en C et utilisait Emacs Lisp pour écrire des extensions. C'est en 1985 que la distribution générale de GNU Emacs 15.34 commença. C'est cette version qui devint la version standard sous UNIX.

En 1991, Jamie Zawinski développèrent Lucid Emacs basée sur GNU Emacs 19-alpha. Lucid Emacs porté sur X-Windows de UNIX devint XEmacs divergeant de la continuation des releases GNU. XEmacs fut porté sur Mac et sur MS Windows.

GNU EMACS

La base de EMACS (moteur d'affichage et l'interpréteur de Emacs LISP) est écrit en C. La majorité du code d'édition est écrit en LISP et interprété au moment de l'exécution. Cet ensemble de code LISP est redéfinissable par l'utilisateur, tant pour les données (par ex. la documentation) que pour le programme lui-même.

C'est ainsi qu'ont été ajoutés un navigateur Web (Emacs-W3), un lecteur de courrier et de news Gnus, Doctor (un avatar de ELIZA) et un environnement de programmation.

La souplesse a par contre pénalisé les performances de Emacs surtout sur les systèmes des années 1980-1995

MULTICS EMACS

[source: www.multicians.org/mepap.html ]

Bernard Greenberg publia sa version de Emacs sous Multics MR7.0. ce fut le premier programme opérant plein écran sous Multics. A ce titre, il contribua à la définition de certains protocoles d'Arpanet pour permettre l'utilisation de terminaux à écran. Ce fut aussi le premier programme interagissant au niveau de chaque caractère. Ce fut le premier produit Emacs basé sur le langage LISP.

TECO fut porté sous Multics en 1971, mais n'eut jamais le statut de produit standard. La connexion de terminaux avec une interaction au caractère fut "hackée" par Eugene Ciccarelli du MIT via Arpanet. Elle était loin d'être évidente via le frontal FNP standard de Honeywell et de l'overhead de gestion des processus sur Multics. Si PL/1 était plus efficace que l'interpréteur TECO, l'overhead de MULTICS restait important pour l'enchaînement des macros de Emacs restait trop élevé. C'est ainsi que Greenberg fut convaincu de la supériorité d'une implémentation en LISP où l'ensemble restait dans un même espace d'adressage. C'est ainsi que MacLisp servit à Bruce Edwards et Greenberg pour programmer EMACS à partir de mars 1978.

Le buffer écran était divisé en une liste de editorlines, la  ligne étant un des éléments de l'édition au même titre que le caractère. Un nouvel objet LISP appelé "rplacable string" opérant dans un segment MULTICS servit à faire des opérations directes sur la ligne en cours. Le pointeur à cette chaîne de caractères est un pointeur manipulable depuis le programme Lisp. Les données externes sont adressables depuis des procédures en LAP (Lisp_interfacing Assembler). Un driver (dérivé de l'éditeur TECO "en mode Ctrl-R" comporte une boucle de lecture du terminal.A l'interface Arpanet qui fut la première réalisée, fut ensuite ajouté une modification du FNP (breakall mode patches) sur le système de développement de CISL.

Enfin une fonction Redisplay début 1978 fut ajoutée pour afficher immédiatement les modifications faites par l'éditeur. Pour cela le clavier et l'écran sont considérés comme deux appareils différents par le programme CTL d'interface avec le terminal. Il existe un programme CTL par type de terminal. Les terminaux à chasse variable n'étaient pas supportés sur Multics, mais les caractères accentués ou soulignés posèrent problème.

Les extensions comprennent des fonctions communes manipulant des mots, des phrases, des champs blancs  ou des paragraphes. Elles furent écrites en MacLisp. L'éditeur de MacLisp écrit en Emacs fournit des primitives de base.

Des extensions ultérieures permirent de travailler sur des buffers multiples et d'introduire des tags (position d'un caractère dans le buffer); l'écran utilisateur put être divisé en 2 fenêtres. Un mécanisme optionnel de fenêtre pop-up fut réalisé en mai 1979, qui posa des problèmes sur les liaisons lentes.

Le traitement des messages de service ou en provenance d'autres utilisateurs dut aussi être profondément modifié: le message dut être traité par EMACS et non interrompre l'éditeur en plaçant une message de service n'importe où sur l'écran.

Pour essayer d'optimiser les interactions, au lieu de supprimer l'écho standard du RNP, on introduisit en mi-1979 une négociation d'écho entre EMACS et le FNP, qui rétablit l'écho standard lors de l'entrée d'un nouveau texte (au kilomètre) jusqu'à reconnaissance de caractères spéciaux (TAB, DEL, CR ...). Cependant de nouveaux terminaux intelligents n'utilisaient plus ces codes ASCII de contrôle du Teletype, ce qui entraîna l'adoption du protocole Arpanet SUPDUP (RFC734)pour gérer ce type de terminaux. Finalement, c'est sur la base d'un terminal virtuel basé sur le Datamedia 2500 avec un grand écran que se fit d'abord  la standardisation des terminaux EMACS sur Telnet. Puis le protocole PYZ fut inventé par Daniel Weinreb et Greenberg comme option du Telnet standard (option 22)

XEmacs

[source: http://www.xemacs.org/FAQ/ ]

XEmacs est une version freeware de EMACS opérant dans un environnement à fenêtres sous UNIX, Mac ou Windows. Ses principaux développeurs furent Steve Baur, Jamie Zawinsky, Richard Mlynarik,  Chuck Thomson, Martin Buchholz, Steven Turnbull, Ben Wing, Hrvoje Niksic, 

XEmacs est complètement internationalisé et non plus lié au support de l'ASCII. Une version existe sous l'environnement Microsoft Win32

exemple de copie d'écran de XEmacs sous Windows2000: un écran help se trouve en haut, l'écarn principal à 2 fenêtres avec son menu