[4] The manual for the most widely used variant,[5] GNU Emacs, describes it as "the extensible, customizable, self-documenting, real-time display editor".
Implementations of Emacs typically feature a dialect of the Lisp programming language, allowing users and developers to write new commands and applications for the editor.
Extensions have been written to, among other things, manage files, remote access,[10] e-mail, outlines, multimedia, Git integration, RSS feeds,[11] and collaborative editing,[12] as well as implementations of ELIZA, Pong, Conway's Life, Snake, Dunnet, and Tetris.
GNU Emacs is, along with vi, one of the two main contenders in the traditional editor wars of Unix culture.
He returned to MIT where Carl Mikkelsen, a hacker at the AI Lab, had added to TECO a combined display/editing mode called Control-R that allowed the screen display to be updated each time the user entered a keystroke.
TECO was a page-sequential editor that was designed for editing paper tape on the PDP-1 at a time when computer memory was generally small due to cost, and it was a feature of TECO that allowed editing on only one page at a time sequentially in the order of the pages in the file.
Instead of adopting E's approach of structuring the file for page-random access on disk, Stallman modified TECO to handle large buffers more efficiently and changed its file-management method to read, edit, and write the entire file as a single buffer.
[22] Steele and Stallman's finished implementation included facilities for extending and documenting the new macro set.
"[23] An apocryphal hacker koan alleges that the program was named after Emack & Bolio's, a popular Boston ice cream store.
Its behavior was sufficiently different from that of TECO that it could be considered a text editor in its own right, and it quickly became the standard editing program on ITS.
Other contributors to early versions of Emacs include Kent Pitman, Earl Killian, and Eugene Ciccarelli.
Multics Emacs was later maintained by Richard Soley, who went on to develop the NILE Emacs-like editor for the NIL Project, and by Barry Margolin.
Early Ads for Computer Corporation of America's CCA EMACS (Steve Zimmerman)[29] appeared in 1984.
Markus Hess exploited a security flaw in GNU Emacs' email subsystem in his 1986 cracking spree in which he gained superuser access to Unix computers.
[36] Richard Stallman has remained the principal maintainer of GNU Emacs, but he has stepped back from the role at times.
[42][better source needed] Other notable forks include: In the past, projects aimed at producing small versions of Emacs proliferated.
GNU Emacs was initially targeted at computers with a 32-bit flat address space and at least 1 MiB of RAM.
Today's computers have more than enough power and capacity to eliminate these restrictions, but small clones have more recently been designed to fit on software installation disks or for use on less capable hardware.
Although not all are still actively maintained, these clones include: Emacs is primarily a text editor and is designed for manipulating pieces of text, although it is capable of formatting and printing documents like a word processor by interfacing with external programs such as LaTeX, Ghostscript or a web browser.
Emacs provides commands to manipulate and differentially display semantic units of text such as words, sentences, paragraphs and source code constructs such as functions.
The Emacs Lisp layer sits atop a stable core of basic services and platform abstraction written in the C programming language, which enables GNU Emacs to be ported to a wide variety of operating systems and architectures without modifying the implementation semantics of the Lisp system where most of the editor lives.
All configuration is stored in variables, classes, and data structures, and changed by simply updating these live.
The use of a Lisp dialect in this case is a key advantage, as Lisp syntax consists of so-called symbolic expressions (or sexprs), which can act as both evaluatable code expressions and as a data serialisation format akin to, but simpler and more general than, well known ones such as XML, JSON, and YAML.
Major modes provide a general package of functions and commands relevant to a buffer's data and the way users might be interacting with it (e.g. editing source code in a specific language, editing hex, viewing the filesystem, interacting with git, etc.
Even the simplest user inputs (such a printable characters) are effectuated as Emacs Lisp functions, such as the self-insert-command , bound by default to most keyboard keys in a typical text editing buffer, which parameterises itself with the locale-defined character associated with the key used to call it.
For example, pressing the f key in a buffer that accepts text input evaluates the code (self-insert-command 1 ?f), which inserts one copy of the character constant ?f at point.
The 1, in this case, is determined by what Emacs terms the universal argument: all Emacs command code accepts a numeric value which, in its simplest usage, indicates repetition of an action, but in more complex cases (where repetition doesn't make sense) can yield other behaviours.
Such a server continues to run in the background, managing any child processes, accumulating stdin from open pipes, ports, or fifos, performing periodic or pre-programmed actions, and remembering buffer undo history, saved text snippets, command history, and other user state between editing sessions.
Because of its separation of display concerns from editing functionality, Emacs can display roughly similarly on any device more complex than a dumb terminal, including providing typical graphical WIMP elements on sufficiently featureful text terminals - though graphical frames are the preferred mode of display, providing a strict superset of the features of text terminal frames.
Because of this, Emacs proponents described the software as self-documenting in that it presents the user with information on its normal features and its current state.