Jump to content

Emacs: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Customizability: add new loc
Tags: Mobile edit Mobile web edit
GNU Emacs is a flagship free/libre software project; it aligns with the ideals of free/libre more than with the ideals of open-source. And I added the information that XEmacs is inactive
Line 8: Line 8:
| caption = Editing multiple [[Dired]] buffers in [[GNU Emacs]]
| caption = Editing multiple [[Dired]] buffers in [[GNU Emacs]]
| author = [[David A. Moon]],<br/>[[Guy L. Steele Jr.]]
| author = [[David A. Moon]],<br/>[[Guy L. Steele Jr.]]
| developer = Various [[open-source software|open-source]] and [[commercial software|commercial]] developers
| developer = Various [[free software|free/libre software]] developers, including volunteers and [[commercial software|commercial]] developers
| released = {{Start date and age|df=yes|1976}}<ref>{{cite web|url=https://www.emacswiki.org/emacs/EmacsReleaseDates|title=Emacs Release Dates}}</ref><ref name=jwz_timeline>
| released = {{Start date and age|df=yes|1976}}<ref>{{cite web|url=https://www.emacswiki.org/emacs/EmacsReleaseDates|title=Emacs Release Dates}}</ref><ref name=jwz_timeline>
{{cite web|title=Emacs Timeline|url=http://www.jwz.org/doc/emacs-timeline.html|accessdate=11 August 2015 | last = Zawinski | first = Jamie | authorlink = Jamie Zawinski | publisher = | date = 2005-06-21 |orig-year=1999 }}</ref>
{{cite web|title=Emacs Timeline|url=http://www.jwz.org/doc/emacs-timeline.html|accessdate=11 August 2015 | last = Zawinski | first = Jamie | authorlink = Jamie Zawinski | publisher = | date = 2005-06-21 |orig-year=1999 }}</ref>
Line 22: Line 22:
'''Emacs''' {{IPAc-en|ˈ|iː|m|æ|k|s}} or '''EMACS''' ('''Editor MACroS''')<ref name="Greenberg">{{cite book | url = http://www.multicians.org/mepap.html | title = Multics Emacs: The History, Design and Implementation | last = Greenberg | first = Bernard S. | year = 1979 | location = | publisher = }}</ref><ref name="Gnu Emacs FAQ">{{cite web |url=https://www.gnu.org/software/emacs/emacs-faq.html#Origin-of-the-term-Emacs | title = GNU Emacs FAQ }}</ref><ref name="MACSimizing TECO">{{cite web |url=http://www.codeartnow.com/hacker-art-1/macsimizing-teco | title = MACSimizing TECO | author = Adrienne G. Thompson}}</ref> is a family of [[text editor]]s that are characterized by their [[extensibility]].<ref>{{cite web|title=A Tutorial Introduction to GNU Emacs|url=http://www2.lib.uchicago.edu/keith/tcl-course/emacs-tutorial.html|quote=For an editor to be called "emacs" the main requirement is that it be fully extensible with a real programming language, not just a macro language.}}</ref> The manual for the most widely used variant,<ref>{{cite web|url=https://ebooks-it.org/1565924967-ebook.htm|title=GNU Emacs Pocket Reference|quote=GNU Emacs is the most popular and widespread of the Emacs family of editors.}}</ref> [[GNU Emacs]], describes it as "the extensible, customizable, self-documenting, real-time display editor".<ref>{{cite web|title=GNU Emacs Manual|url=https://www.gnu.org/software/emacs/manual/html_node/emacs/index.html|publisher=FSF|accessdate=24 November 2012}}</ref> Development of the first Emacs began in the mid-1970s, and work on its direct descendant, GNU Emacs, continues actively {{as of|2020|lc=on}}.
'''Emacs''' {{IPAc-en|ˈ|iː|m|æ|k|s}} or '''EMACS''' ('''Editor MACroS''')<ref name="Greenberg">{{cite book | url = http://www.multicians.org/mepap.html | title = Multics Emacs: The History, Design and Implementation | last = Greenberg | first = Bernard S. | year = 1979 | location = | publisher = }}</ref><ref name="Gnu Emacs FAQ">{{cite web |url=https://www.gnu.org/software/emacs/emacs-faq.html#Origin-of-the-term-Emacs | title = GNU Emacs FAQ }}</ref><ref name="MACSimizing TECO">{{cite web |url=http://www.codeartnow.com/hacker-art-1/macsimizing-teco | title = MACSimizing TECO | author = Adrienne G. Thompson}}</ref> is a family of [[text editor]]s that are characterized by their [[extensibility]].<ref>{{cite web|title=A Tutorial Introduction to GNU Emacs|url=http://www2.lib.uchicago.edu/keith/tcl-course/emacs-tutorial.html|quote=For an editor to be called "emacs" the main requirement is that it be fully extensible with a real programming language, not just a macro language.}}</ref> The manual for the most widely used variant,<ref>{{cite web|url=https://ebooks-it.org/1565924967-ebook.htm|title=GNU Emacs Pocket Reference|quote=GNU Emacs is the most popular and widespread of the Emacs family of editors.}}</ref> [[GNU Emacs]], describes it as "the extensible, customizable, self-documenting, real-time display editor".<ref>{{cite web|title=GNU Emacs Manual|url=https://www.gnu.org/software/emacs/manual/html_node/emacs/index.html|publisher=FSF|accessdate=24 November 2012}}</ref> Development of the first Emacs began in the mid-1970s, and work on its direct descendant, GNU Emacs, continues actively {{as of|2020|lc=on}}.


Emacs has over 10,000 built-in commands and its [[user interface]] allows the user to combine these commands into [[macro (computer science)|macros]] to automate work. Implementations of Emacs typically feature a dialect of the [[Lisp (programming language)|Lisp]] programming language that provides a deep extension capability, allowing users and developers to write new commands and applications for the editor. Extensions have been written to [[Gnus|manage email]], [[Dired|files]], [[Org-mode|outlines]], and [[RSS]] feeds,<ref>{{cite web|url=http://nullprogram.com/blog/2013/09/04/|title=Introducing Elfeed, an Emacs Web Feed Reader}}</ref> as well as clones of ''[[ELIZA]]'', ''[[Pong]]'', ''[[Conway's Game of Life|Conway's Life]]'', ''[[Snake (video game genre)|Snake]]'' and ''[[Tetris]]''.<ref>{{cite web|url=https://www.gnu.org/software/emacs/manual/html_node/emacs/Amusements.html|title=Amusements|quote=Finally, if you find yourself frustrated, try describing your problems to the famous psychotherapist Eliza. Just do M-x doctor.}}</ref>
Emacs has over 10,000 built-in commands and its [[user interface]] allows the user to combine these commands into [[macro (computer science)|macros]] to automate work. Implementations of Emacs typically feature a dialect of the [[Lisp (programming language)|Lisp]] programming language that provides a deep extension capability, allowing users and developers to write new commands and applications for the editor. Extensions have been written to manage [[Gnus|email]], [[Dired|files]], [[Org-mode|outlines]], and [[RSS]] feeds,<ref>{{cite web|url=http://nullprogram.com/blog/2013/09/04/|title=Introducing Elfeed, an Emacs Web Feed Reader}}</ref> as well as clones of ''[[ELIZA]]'', ''[[Pong]]'', ''[[Conway's Game of Life|Conway's Life]]'', ''[[Snake (video game genre)|Snake]]'' and ''[[Tetris]]''.<ref>{{cite web|url=https://www.gnu.org/software/emacs/manual/html_node/emacs/Amusements.html|title=Amusements|quote=Finally, if you find yourself frustrated, try describing your problems to the famous psychotherapist Eliza. Just do M-x doctor.}}</ref>


The original EMACS was written in 1976 by [[David A. Moon]] and [[Guy L. Steele Jr.]] as a set of Editor MACroS for the [[TECO (text editor)|TECO]] editor.<ref name=jwz_timeline/><ref name="Greenberg" /><ref name="Gnu Emacs FAQ"/><ref name="MACSimizing TECO"/><ref>[[Richard Stallman]] is often credited as another co-creator, but as [[Daniel Weinreb]] wrote, "The original (TECO-based) Emacs was created and designed by Guy L. Steele Jr. and David Moon. After they had it working, and it had become established as the standard text editor at the AI lab, Stallman took over its maintenance." Moon himself responded "All true, so far as I can remember. But in all fairness I have to say that Stallman greatly improved Emacs after he “liberated” it from Guy and me." See {{citation|archive-url=https://web.archive.org/web/20090101103828/http://danweinreb.org/blog/rebuttal-to-stallmans-story-about-the-formation-of-symbolics-and-lmi |archive-date=January 1, 2009 |url=http://danweinreb.org/blog/rebuttal-to-stallmans-story-about-the-formation-of-symbolics-and-lmi |first=Dan |last=Weinreb |authorlink=Daniel Weinreb |title=Rebuttal to Stallman's Story About The Formation of Symbolics and LMI |work=Dan Weinreb's blog: software and innovation |date=November 11, 2007 |url-status=dead }}.</ref> It was inspired by the ideas of the TECO-macro editors TECMAC and TMACS.<ref>{{cite web|url=http://www.xemacs.org/Documentation/21.5/html/internals_3.html |title=A history of Emacs |accessdate=2007-08-22 |date=2006-12-11 |work=XEmacs Internals Manual }}</ref>
The original EMACS was written in 1976 by [[David A. Moon]] and [[Guy L. Steele Jr.]] as a set of Editor MACroS for the [[TECO (text editor)|TECO]] editor.<ref name=jwz_timeline/><ref name="Greenberg" /><ref name="Gnu Emacs FAQ"/><ref name="MACSimizing TECO"/><ref>[[Richard Stallman]] is often credited as another co-creator, but as [[Daniel Weinreb]] wrote, "The original (TECO-based) Emacs was created and designed by Guy L. Steele Jr. and David Moon. After they had it working, and it had become established as the standard text editor at the AI lab, Stallman took over its maintenance." Moon himself responded "All true, so far as I can remember. But in all fairness I have to say that Stallman greatly improved Emacs after he “liberated” it from Guy and me." See {{citation|archive-url=https://web.archive.org/web/20090101103828/http://danweinreb.org/blog/rebuttal-to-stallmans-story-about-the-formation-of-symbolics-and-lmi |archive-date=January 1, 2009 |url=http://danweinreb.org/blog/rebuttal-to-stallmans-story-about-the-formation-of-symbolics-and-lmi |first=Dan |last=Weinreb |authorlink=Daniel Weinreb |title=Rebuttal to Stallman's Story About The Formation of Symbolics and LMI |work=Dan Weinreb's blog: software and innovation |date=November 11, 2007 |url-status=dead }}.</ref> It was inspired by the ideas of the TECO-macro editors TECMAC and TMACS.<ref>{{cite web|url=http://www.xemacs.org/Documentation/21.5/html/internals_3.html |title=A history of Emacs |accessdate=2007-08-22 |date=2006-12-11 |work=XEmacs Internals Manual }}</ref>


The most popular, and most ported, version of Emacs is GNU Emacs, which was created by [[Richard Stallman]] for the [[GNU Project]].<ref>{{cite web |url=http://popcon.debian.org/main/editors/by_vote |title=Debian Popularity Contest |first=Bill |last=Allombert |publisher=Debian |work=Editors report |accessdate=22 November 2011}}</ref> [[XEmacs]] is a variant that [[fork (software development)|branched]] from GNU Emacs in 1991. GNU Emacs and XEmacs use similar Lisp dialects and are, for the most part, compatible with each other.
The most popular, and most ported, version of Emacs is GNU Emacs, which was created by [[Richard Stallman]] for the [[GNU Project]].<ref>{{cite web |url=http://popcon.debian.org/main/editors/by_vote |title=Debian Popularity Contest |first=Bill |last=Allombert |publisher=Debian |work=Editors report |accessdate=22 November 2011}}</ref> [[XEmacs]] is a variant that [[fork (software development)|branched]] from GNU Emacs in 1991. GNU Emacs and XEmacs use similar Lisp dialects and are, for the most part, compatible with each other. XEmacs development is inactive.


Emacs is, along with [[vi]], one of the two main contenders in the traditional [[editor war]]s of [[Unix]] culture. Emacs is among the oldest [[free and open source]] projects still under development.<ref>{{cite web|url=http://www.zdnet.com/article/the-10-oldest-significant-open-source-programs/|title=The 10 oldest, significant open-source programs}}</ref>
Emacs is, along with [[vi]], one of the two main contenders in the traditional [[editor war]]s of [[Unix]] culture. Emacs is among the oldest [[free and open source]] projects still under development.<ref>{{cite web|url=http://www.zdnet.com/article/the-10-oldest-significant-open-source-programs/|title=The 10 oldest, significant open-source programs}}</ref>
Line 84: Line 84:
[[File:Xemacs-21.5.b29.png|thumb|[[XEmacs]] 21.5 on [[GNU]]/[[Linux]] ]]
[[File:Xemacs-21.5.b29.png|thumb|[[XEmacs]] 21.5 on [[GNU]]/[[Linux]] ]]


Lucid Emacs, based on an early alpha version of GNU Emacs 19, was developed beginning in 1991 by [[Jamie Zawinski]] and others at [[Lucid Inc.]] One of the best-known early forks in [[free software]] development occurred when the codebases of the two Emacs versions diverged and the separate development teams ceased efforts to merge them back into a single program.<ref>{{cite web | last = Stephen J. | first = Turnbull | title = XEmacs vs. GNU Emacs | url = http://www.xemacs.org/About/XEmacsVsGNUemacs.html | accessdate = 2012-10-02 }}</ref> Lucid Emacs has since been renamed [[XEmacs]]. Its development has slowed, with the most recent stable version 21.4.22 released in January 2009 (while a beta was released in 2013), while GNU Emacs has implemented many formerly XEmacs-only features.<ref>{{cite web|url=http://steve-yegge.blogspot.com/2008/04/xemacs-is-dead-long-live-xemacs.html|title=XEmacs is Dead. Long Live XEmacs!}}</ref>{{better source needed|date=July 2019}}
Lucid Emacs, based on an early alpha version of GNU Emacs 19, was developed beginning in 1991 by [[Jamie Zawinski]] and others at [[Lucid Inc.]] One of the best-known early forks in [[free software]] development occurred when the codebases of the two Emacs versions diverged and the separate development teams ceased efforts to merge them back into a single program.<ref>{{cite web | last = Stephen J. | first = Turnbull | title = XEmacs vs. GNU Emacs | url = http://www.xemacs.org/About/XEmacsVsGNUemacs.html | accessdate = 2012-10-02 }}</ref> Lucid Emacs has since been renamed [[XEmacs]]. Its development is currently inactive, with the most recent stable version 21.4.22 released in January 2009 (while a beta was released in 2013), while GNU Emacs has implemented many formerly XEmacs-only features.<ref>{{cite web|url=http://steve-yegge.blogspot.com/2008/04/xemacs-is-dead-long-live-xemacs.html|title=XEmacs is Dead. Long Live XEmacs!}}</ref>{{better source needed|date=July 2019}}


=== Other forks of GNU Emacs ===
=== Other forks of GNU Emacs ===

Revision as of 12:25, 23 August 2020

Emacs
Original author(s)David A. Moon,
Guy L. Steele Jr.
Developer(s)Various free/libre software developers, including volunteers and commercial developers
Initial release1976; 48 years ago (1976)[1][2]
Written inLisp, C
Operating systemCross-platform
TypeText editor

Emacs /ˈmæks/ or EMACS (Editor MACroS)[3][4][5] is a family of text editors that are characterized by their extensibility.[6] The manual for the most widely used variant,[7] GNU Emacs, describes it as "the extensible, customizable, self-documenting, real-time display editor".[8] Development of the first Emacs began in the mid-1970s, and work on its direct descendant, GNU Emacs, continues actively as of 2020.

Emacs has over 10,000 built-in commands and its user interface allows the user to combine these commands into macros to automate work. Implementations of Emacs typically feature a dialect of the Lisp programming language that provides a deep extension capability, allowing users and developers to write new commands and applications for the editor. Extensions have been written to manage email, files, outlines, and RSS feeds,[9] as well as clones of ELIZA, Pong, Conway's Life, Snake and Tetris.[10]

The original EMACS was written in 1976 by David A. Moon and Guy L. Steele Jr. as a set of Editor MACroS for the TECO editor.[2][3][4][5][11] It was inspired by the ideas of the TECO-macro editors TECMAC and TMACS.[12]

The most popular, and most ported, version of Emacs is GNU Emacs, which was created by Richard Stallman for the GNU Project.[13] XEmacs is a variant that branched from GNU Emacs in 1991. GNU Emacs and XEmacs use similar Lisp dialects and are, for the most part, compatible with each other. XEmacs development is inactive.

Emacs is, along with vi, one of the two main contenders in the traditional editor wars of Unix culture. Emacs is among the oldest free and open source projects still under development.[14]

History

Emacs was started by Guy L. Steele Jr. as a project to unify the many divergent TECO command sets and key bindings at MIT[4]
The interface of Emacs was influenced by the design of the Symbolics space-cadet keyboard[15]
Editing C source code in GNU Emacs
Editing, compiling and executing C++ code from GNU Emacs

Emacs development began during the 1970s at the MIT AI Lab, whose PDP-6 and PDP-10 computers used the Incompatible Timesharing System (ITS) operating system that featured a default line editor known as Tape Editor and Corrector (TECO). Unlike most modern text editors, TECO used separate modes in which the user would either add text, edit existing text, or display the document. One could not place characters directly into a document by typing them into TECO, but would instead enter a character ('i') in the TECO command language telling it to switch to input mode, enter the required characters, during which time the edited text was not displayed on the screen, and finally enter a character (<esc>) to switch the editor back to command mode. (A similar technique was used to allow overtyping.) This behavior is similar to that of the program ed.

Richard Stallman visited the Stanford AI Lab in 1972 or 1974 and saw the lab's E editor, written by Fred Wright.[16] He was impressed by the editor's intuitive WYSIWYG (What You See Is What You Get) behavior, which has since become the default behavior of most modern text editors. 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. Stallman reimplemented this mode to run efficiently and then added a macro feature to the TECO display-editing mode that allowed the user to redefine any keystroke to run a TECO program.[5]

E had another feature that TECO lacked: random-access editing. TECO was a page-sequential editor that was designed for editing paper tape on the PDP-1 and typically allowed editing on only one page at a time, 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. Almost all modern editors use this approach.

The new version of TECO quickly became popular at the AI Lab and soon accumulated a large collection of custom macros whose names often ended in MAC or MACS, which stood for macro. Two years later, Guy Steele took on the project of unifying the diverse macros into a single set.[17] Steele and Stallman's finished implementation included facilities for extending and documenting the new macro set.[5] The resulting system was called EMACS, which stood for Editing MACroS or, alternatively, E with MACroS. Stallman picked the name Emacs "because <E> was not in use as an abbreviation on ITS at the time."[18] An apocryphal hacker koan alleges that the program was named after Emack & Bolio's, a popular Cambridge ice cream store.[19] The first operational EMACS system existed in late 1976.[20]

Stallman saw a problem in too much customization and de facto forking and set certain conditions for usage.[citation needed] He later wrote:[20]

EMACS was distributed on a basis of communal sharing, which means all improvements must be given back to me to be incorporated and distributed.

The original Emacs, like TECO, ran only on the PDP-10 running ITS. 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. Mike McMahon ported Emacs from ITS to the TENEX and TOPS-20 operating systems. Other contributors to early versions of Emacs include Kent Pitman, Earl Killian, and Eugene Ciccarelli. By 1979, Emacs was the main editor used in MIT's AI lab and its Laboratory for Computer Science.[21]

Implementations

Early implementations

James Gosling wrote the first Emacs-like editor to run on Unix (Gosling Emacs) in 1981

In the following years, programmers wrote a variety of Emacs-like editors for other computer systems. These included EINE (EINE Is Not EMACS) and ZWEI[22] (ZWEI Was EINE Initially), which were written for the Lisp machine by Mike McMahon and Daniel Weinreb, and Sine (Sine Is Not Eine),[23] which was written by Owen Theodore Anderson. Weinreb's EINE was the first Emacs written in Lisp. In 1978, Bernard Greenberg wrote Multics Emacs almost entirely in Multics Lisp at Honeywell's Cambridge Information Systems Lab. 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. Many versions of Emacs, including GNU Emacs, would later adopt Lisp as an extension language.

James Gosling, who would later invent NeWS and the Java programming language, wrote Gosling Emacs in 1981. The first Emacs-like editor to run on Unix, Gosling Emacs was written in C and used Mocklisp, a language with Lisp-like syntax, as an extension language.

GNU Emacs

GNU Emacs running in a text console
GNU Emacs running on Microsoft Windows

Richard Stallman began work on GNU Emacs in 1984 to produce a free software alternative to the proprietary Gosling Emacs. GNU Emacs was initially based on Gosling Emacs, but Stallman's replacement of its Mocklisp interpreter with a true Lisp interpreter required that nearly all of its code be rewritten. This became the first program released by the nascent GNU Project. GNU Emacs is written in C and provides Emacs Lisp, also implemented in C, as an extension language. Version 13, the first public release, was made on March 20, 1985. The first widely distributed version of GNU Emacs was version 15.34, released later in 1985. Early versions of GNU Emacs were numbered as 1.x.x, with the initial digit denoting the version of the C core. The 1 was dropped after version 1.12, as it was thought that the major number would never change, and thus the numbering skipped from 1 to 13.[24] In September 2014, it was announced on the GNU emacs-devel mailing list that GNU Emacs would adopt a rapid release strategy and version numbers would increment more quickly in the future.[25]

GNU Emacs was later ported to Unix. It offered more features than Gosling Emacs, in particular a full-featured Lisp as its extension language, and soon replaced Gosling Emacs as the de facto Unix Emacs editor. 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.[26]

Most of GNU Emacs functionality is implemented through a scripting language called Emacs Lisp. Because about 70% of GNU Emacs is written in the Elisp extension language,[27] one only needs to port the C core which implements the Elisp interpreter. This makes porting Emacs to a new platform considerably less difficult than porting an equivalent project consisting of native code only.

GNU Emacs development was relatively closed until 1999 and was used as an example of the Cathedral development style in The Cathedral and the Bazaar. The project has since adopted a public development mailing list and anonymous CVS access. Development took place in a single CVS trunk until 2008 and was then switched to the Bazaar DVCS. On November 11, 2014, development was moved to Git.[28]

Richard Stallman has remained the principal maintainer of GNU Emacs, but he has stepped back from the role at times. Stefan Monnier and Chong Yidong were maintainers from 2008 to 2015.[29][30] John Wiegley was named maintainer in 2015 after a meeting with Stallman at MIT.[31] As of early 2014, GNU Emacs has had 579 individual committers throughout its history.[32]

XEmacs

XEmacs 21.5 on GNU/Linux

Lucid Emacs, based on an early alpha version of GNU Emacs 19, was developed beginning in 1991 by Jamie Zawinski and others at Lucid Inc. One of the best-known early forks in free software development occurred when the codebases of the two Emacs versions diverged and the separate development teams ceased efforts to merge them back into a single program.[33] Lucid Emacs has since been renamed XEmacs. Its development is currently inactive, with the most recent stable version 21.4.22 released in January 2009 (while a beta was released in 2013), while GNU Emacs has implemented many formerly XEmacs-only features.[34][better source needed]

Other forks of GNU Emacs

Other notable forks include:

  • Aquamacs – based on GNU Emacs (Aquamacs 3.2 is based on GNU Emacs version 24 and Aquamacs 3.3 is based on GNU Emacs version 25) which focuses on integrating with the Apple Macintosh user interface
  • Meadow – a Japanese version for Microsoft Windows[35]
  • SXEmacs – Steve Youngs' fork of XEmacs[36]

Various Emacs editors

uEmacs/Pk 4.0.15 on Linux
The mg tiny Emacs-like editor in OpenBSD 5.3. Editing Ruby source code
JOVE running in a Debian box
Zmacs, an Emacs for Lisp machines

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.[37] Such computers were high end workstations and minicomputers in the 1980s, and this left a need for smaller reimplementations that would run on common personal computer hardware. 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.[38]

Other projects aim to implement Emacs in a different dialect of Lisp or a different programming language altogether. Although not all are still actively maintained, these clones include:

  • MicroEMACS, which was originally written by Dave Conroy and further developed by Daniel Lawrence and which exists in many variations.
  • mg, originally called MicroGNUEmacs and, later, mg2a, a public-domain offshoot of MicroEMACS intended to more closely resemble GNU Emacs. Now installed by default on OpenBSD.
  • JOVE (Jonathan's Own Version of Emacs), Jonathan Payne's non-programmable Emacs implementation for UNIX-like systems.
  • MINCE (MINCE Is Not Complete Emacs), a version for CP/M and later DOS, from Mark of the Unicorn. MINCE evolved into Final Word, which eventually became the Borland Sprint word processor.
  • Perfect Writer, a CP/M implementation derived from MINCE that was included circa 1982 as the default word processor with the very earliest releases of the Kaypro II and Kaypro IV. It was later provided with the Kaypro 10 as an alternative to WordStar.
  • Freemacs, a DOS version that uses an extension language based on text macro expansion and fits within the original 64 KiB flat memory limit.
  • Zile. Zile was a recursive acronym for Zile Is Lossy Emacs,[39] but the project was rewritten in Lua and now gives the expansion as Zile Implements Lua Editors. The new Zile still includes an implementation of Emacs in Lua called Zemacs. There is also an implementation of vi called Zi.
  • Zmacs, for the MIT Lisp Machine and its descendants, implemented in ZetaLisp.
  • Climacs, a Zmacs-influenced variant implemented in Common Lisp.
  • Epsilon,[40] an Emacs clone by Lugaru Software. Versions for DOS, Windows, Linux, FreeBSD, Mac OS X and O/S 2 are bundled in the release. It uses a non-Lisp extension language with C syntax and used a very early concurrent command shell buffer implementation under the single-tasking MS-DOS.
  • PceEmacs is the Emacs-based editor for SWI-Prolog.
  • Amacs, an Apple II ProDOS version of Emacs implemented in 6502 assembly by Brian Fox.[41][42]
  • Hemlock, originally written in Spice Lisp, then Common Lisp. A part of CMU Common Lisp. Influenced by Zmacs. Later forked by Lucid Common Lisp (as Helix), LispWorks and Clozure CL projects. There is also a Portable Hemlock project, which aims to provide a Hemlock, which runs on several Common Lisp implementations.
  • umacs,[43] an implementation under OS-9
  • edwin, an Emacs-like text editor included with MIT/GNU Scheme.

Editors with Emacs emulation

Features

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. It also features keyboard macros for performing user-defined batches of editing commands.

GNU Emacs is a real-time display editor, as its edits are displayed onscreen as they occur. This is standard behavior for modern text editors but EMACS was among the earliest to implement this functionality instead of having to issue a separate command to insert new edits into the existing text as in vi.

General architecture

Almost all of the functionality in Emacs, including basic editing operations such as the insertion of characters into a document, is achieved through functions written in a dialect of the Lisp programming language. The dialect used in GNU Emacs is known as Emacs Lisp (ELisp). The ELisp layer sits atop a stable core of basic services and platform abstraction written in the C programming language. In this Lisp environment, variables and functions can be modified with no need to recompile or restart Emacs.

Emacs operates on data structures called buffers containing text with additional attributes; every buffer maintains its own point (cursor location) and mark (another location, delimiting the selected region together with the point), the name of the file it is visiting (if applicable) and the set of active modes (exactly one major mode[clarification needed] and any number of minor modes[clarification needed]), which control editor behaviour through variables. Elisp code can be executed interactively through named commands, which can be bound to key presses or accessed by name; some commands evaluate arbitrary Elisp code from buffers (e.g. eval-region or eval-buffer).

Buffers are displayed in windows, which are tiled portions of the terminal screen or the GUI window (called a frame in Emacs terms; multiple frames are possible). Unless configured otherwise, windows include scroll bars, line numbers, a header line at the top (usually displaying the buffer title or filename) and a mode line at the bottom (usually listing the active modes and point position of the buffer).

Multiple windows can be opened onto the same buffer, for example to see different parts of a long text, and multiple buffers can share the same text, for example to take advantage of different major modes in a mixed-language file. The mode can also be changed manually as needed with M-x <mode name>.

Customizability

  • Keystrokes can be recorded into macros and replayed to automate complex, repetitive tasks. This is often done on an ad-hoc basis, with each macro discarded after use, although macros can be saved and invoked later.
  • At startup, Emacs executes an Emacs Lisp script named ~/.emacs (recent versions also look for ~/emacs.el, ~/.emacs.d/init.el, and ~/.config/emacs/init.el;[46] Emacs will execute the first one it finds, ignoring the rest). This personal customization file can be arbitrarily long and complex, but typical content includes:
    • Setting global variables or invoking functions to customize Emacs behaviour, for example (set-default-coding-systems 'utf-8)
    • Key bindings to override standard ones and to add shortcuts for commands that the user finds convenient but don't have a key binding by default. Example: (global-set-key (kbd "C-x C-b") 'ibuffer)
    • Loading, enabling and initializing extensions (Emacs comes with many extensions, but only a few are loaded by default.)
    • Configuring event hooks to run arbitrary code at specific times, for example to automatically recompile source code after saving a buffer (after-save-hook)
    • Executing arbitrary files, usually to split an overly long configuration file into manageable and homogeneous parts (~/.emacs.d/ and ~/elisp/ are traditional locations for these personal scripts)
  • The customize extension allows the user to set configuration properties such as the color scheme interactively, from within Emacs, in a more user-friendly way than by setting variables in .emacs: it offers search, descriptions and help text, multiple choice inputs, reverting to defaults, modification of the running Emacs instance without reloading, and other conveniences similar to the preferences functionality of other programs. The customized values are saved in .emacs (or another designated file) automatically.
  • Themes, affecting the choice of fonts and colours, are defined as elisp files and chosen through the customize extension.

Self-documenting

The first Emacs contained a help library that included documentation for every command, variable and internal function. 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. Each function includes a documentation string that is displayed to the user on request, a practice that subsequently spread to programming languages including Lisp, Java, Perl, and Python. This help system can take users to the actual code for each function, whether from a built-in library or an added third-party library.

Emacs also has a built-in tutorial. Emacs displays instructions for performing simple editing commands and invoking the tutorial when it is launched with no file to edit. The tutorial is by Stuart Cracraft and Richard Stallman.

Culture

Church of Emacs

Richard Stallman as St IGNUcius, a saint in the Church of Emacs

The Church of Emacs, formed by Richard Stallman, is a parody religion created for Emacs users.[47] While it refers to vi as the editor of the beast (vi-vi-vi being 6-6-6 in Roman numerals), it does not oppose the use of vi; rather, it calls it proprietary software anathema. ("Using a free version of vi is not a sin but a penance."[48]) The Church of Emacs has its own newsgroup, alt.religion.emacs,[49] that has posts purporting to support this parody religion. Supporters of vi have created an opposing Cult of vi.

Stallman has jokingly referred to himself as St I GNU cius, a saint in the Church of Emacs.[50]

Emacs pinky

There is folklore attributing a repetitive strain injury colloquially called Emacs pinky to Emacs' strong dependence on modifier keys,[51] although there have not been any studies done to show Emacs causes more such problems than other keyboard-heavy computer programs.

Users have addressed this through various approaches. Some users recommend simply using the two Control keys on typical PC keyboards like Shift keys while touch typing to avoid overly straining the left pinky.[52] Software-side methods include:[53]

  • Customizing the key layout so that the Control key is transposed with the caps lock key.[54] Similar techniques include defining the caps lock key as an additional Control key or transposing the Control and Meta keys.However, as these keys are still pressed with the same finger, they may still contribute to Emacs pinky.[clarification needed]
  • Software, such as xwrits or the built-in type-break-mode in Emacs, that reminds the user to take regularly scheduled breaks.
  • Using the ErgoEmacs keybindings (with minor mode ergoemacs-mode).[55]
  • Customizing the whole keyboard layout to move statistically frequent Emacs keys to more appropriate places.[56]
  • Packages such as ace-jump-mode[57] or elisp extensions that provide similar functionality of tiered navigation, first asking for a character then replacing occurrences of the character with access keys for cursor movement.
  • evil-mode, an advanced Vim emulation layer.
  • god-mode, which provides an approach similar to vim's with a mode for entering Emacs commands without modifier keys.
  • Using customized key layout offered by Spacemacs, a project where Space key is used as the main key for initiating control sequences. The project also heavily incorporates both evil-mode and god-mode.[58]
  • StickyKeys, which turns key sequences into key combinations.[59]
  • Emacs' built-in viper-mode that allows use of the vi key layout for basic text editing and the Emacs scheme for more advanced features.[60]
  • Giving a dual role to a more-comfortably accessed key such as the Space bar so that it functions as a Control key when pressed in combination with other keys. Ergonomic keyboards or keyboards with a greater number of keys adjacent to the space bar, such as Japanese keyboards, allow thumb control of other modifier keys too like Meta or Shift.[61]
  • Using a limited ergonomic subset of keybindings, and accessing other functionality by typing M-x <command-name>. M-x itself can also be rebound.
  • Driving Emacs through voice input.

Hardware solutions include special keyboards such as Kinesis's Contoured Keyboard, which places the modifier keys where they can easily be operated by the thumb, or the Microsoft Natural keyboard, whose large modifier keys are placed symmetrically on both sides of the keyboard and can be pressed with the palm of the hand.[51] Foot pedals can also be used.

The Emacs pinky is a relatively recent development. The Space-cadet keyboard on which Emacs was developed had oversized Control keys that were adjacent to the space bar and were easy to reach with the thumb.[62]

Terminology

The word emacs is sometimes pluralized as emacsen, by phonetic analogy with boxen and VAXen, referring to different varieties of Emacs.[63]

See also

References

  1. ^ "Emacs Release Dates".
  2. ^ a b Zawinski, Jamie (2005-06-21) [1999]. "Emacs Timeline". Retrieved 11 August 2015.
  3. ^ a b Greenberg, Bernard S. (1979). Multics Emacs: The History, Design and Implementation.
  4. ^ a b c "GNU Emacs FAQ".
  5. ^ a b c d Adrienne G. Thompson. "MACSimizing TECO".
  6. ^ "A Tutorial Introduction to GNU Emacs". For an editor to be called "emacs" the main requirement is that it be fully extensible with a real programming language, not just a macro language.
  7. ^ "GNU Emacs Pocket Reference". GNU Emacs is the most popular and widespread of the Emacs family of editors.
  8. ^ "GNU Emacs Manual". FSF. Retrieved 24 November 2012.
  9. ^ "Introducing Elfeed, an Emacs Web Feed Reader".
  10. ^ "Amusements". Finally, if you find yourself frustrated, try describing your problems to the famous psychotherapist Eliza. Just do M-x doctor.
  11. ^ Richard Stallman is often credited as another co-creator, but as Daniel Weinreb wrote, "The original (TECO-based) Emacs was created and designed by Guy L. Steele Jr. and David Moon. After they had it working, and it had become established as the standard text editor at the AI lab, Stallman took over its maintenance." Moon himself responded "All true, so far as I can remember. But in all fairness I have to say that Stallman greatly improved Emacs after he “liberated” it from Guy and me." See Weinreb, Dan (November 11, 2007), "Rebuttal to Stallman's Story About The Formation of Symbolics and LMI", Dan Weinreb's blog: software and innovation, archived from the original on January 1, 2009.
  12. ^ "A history of Emacs". XEmacs Internals Manual. 2006-12-11. Retrieved 2007-08-22.
  13. ^ Allombert, Bill. "Debian Popularity Contest". Editors report. Debian. Retrieved 22 November 2011.
  14. ^ "The 10 oldest, significant open-source programs".
  15. ^ Raymond, Eric S.; Cameron, Debra; Rosenblatt, Bill (1996). Learning GNU Emacs, 2nd Edition. Sebastopol, CA: O'Reilly. pp. 408–409. ISBN 1-56592-152-6.
  16. ^ Arthur Samuel (March 1980). "Essential E" (PDF). Retrieved 2020-04-19.
  17. ^ "EMACS vs. vi: The endless geek 'holy war'". Archived from the original on 2014-11-26. Retrieved 2014-05-30. "EMACS as such actually started out as a standards project," emails Guy Steele
  18. ^ Stallman, Richard M. (1987). "The EMACS Full-Screen Editor". GARB. No. Maj 1987. Lysator, Linköping University. pp. 8–11. Retrieved 2007-09-14.
  19. ^ Reynolds, Craig (1992-02-10). Wiseman, David G. (ed.). "The Emac Bolio Name Koan". David G. Wiseman: Stories of Computer Folklore. A cocky novice once said to Stallman: 'I can guess why the editor is called Emacs, but why is the justifier called Bolio?'. Stallman replied forcefully, Names are but names, Emack & Bolio's is the name of a popular ice cream shop in Boston town. Neither of these men had anything to do with the software.' His question answered, yet unanswered, the novice turned to go, but Stallman called to him, 'Neither Emacs nor Bolio had anything to do with the ice cream shop, either.'[permanent dead link]
  20. ^ a b Stallman, Richard (March 26, 1981). EMACS: The Extensible, Customizable, Self-Documenting, Display Editor (PDF) (Technical report). MIT AI Lab. AI Memo 519a. Retrieved 2011-01-07.
  21. ^ Leigh Klotz (2007-08-29). "email quoted in "Be Careful What You Joke About"". The New York Times. Retrieved 2010-05-01.
  22. ^ "Comment by ZWEI's author Dan Weinreb". I wrote the second Emacs ever: the Lisp machine implementation, whose spec was "do what Stallman's PDP-10 (original) Emacs does", and then progressed from there. There's just a whole LOT of it. It took me and Mike McMahon endless hours to implement so many commands to make ZWEI/Zmacs.
  23. ^ Owen Theodore Anderson (January 1979). "The Design and Implementation of a Display-Oriented Editor Writing System" (PDF). Retrieved 2012-09-09.
  24. ^ "A History of Emacs".
  25. ^ "emacs-devel msg 00872 (2014-09-29)". In retrospect 24.3 should have been named 25.1 and 24.4 should have been named 26.1. The .N thingy should really be kept only for bug-fix releases and neither of 24.3, 24.4, nor the previously planned 24.5 are bug-fix releases.
  26. ^ Stoll, Clifford (1988). "Stalking the wily hacker". Communications of the ACM. 31 (5): 484–497. doi:10.1145/42411.42412.
  27. ^ "GNU Emacs". Open Hub. Retrieved 2017-11-25.
  28. ^ Raymond, Eric (2014-11-12). "New Git repository is up". Retrieved 2017-11-25.
  29. ^ Stallman, Richard (2008-02-22). "Re: Looking for a new Emacs maintainer or team". gnu.org Mailing List. Retrieved 2017-11-25.
  30. ^ McNamara, Paul (2008-02-25). "Stallman on handing over GNU Emacs, its future and the importance of nomenclature". Network World. Retrieved 2017-11-25.
  31. ^ Chirgwin, Richard (2015-11-05). "Emacs gets new maintainer as Richard Stallman signs off". The Register. Retrieved 2017-11-25.
  32. ^ Raymond, Eric (2014-03-29). "Ugliest…repository…conversion…ever". Retrieved 2017-11-25. twenty-nine years of continuous development by no fewer than 579 people
  33. ^ Stephen J., Turnbull. "XEmacs vs. GNU Emacs". Retrieved 2012-10-02.
  34. ^ "XEmacs is Dead. Long Live XEmacs!".
  35. ^ FrontPage - Meadow Wiki Archived 2012-02-16 at the Wayback Machine
  36. ^ "SXEmacs Website". Sxemacs.org. 2009-10-11. Retrieved 2009-11-08.
  37. ^ "My Lisp Experiences and the Development of GNU Emacs". There were people in those days, in 1985, who had one-megabyte machines without virtual memory. They wanted to be able to use GNU Emacs. This meant I had to keep the program as small as possible.
  38. ^ "GNU Zile (Zile is Lossy Emacs) - Summary". Modern computers have more than enough resources to start and run a full Emacs in a fraction of a second, and Emacs is probably what you want. Zile is a small, fast, and powerful Emacs clone. It is useful for small footprint installations (e.g. on floppy disk), machines with little memory, or quick editing sessions, especially on remote machines or as a different user, e.g. root.
  39. ^ "Zile home page".
  40. ^ "Lugaru Software Homepage".
  41. ^ "AMACS source".
  42. ^ "apple2.org".
  43. ^ Paul S. Dayan (1992). The OS-9 Guru - 1 : The Facts. Galactic Industrial Limited. ISBN 0-9519228-0-7.
  44. ^ "Cocoa text system".
  45. ^ "Setting up keybindings for the Command Window and Editor". Mathworks Blogs. 2007-05-11. Retrieved 2019-08-18.
  46. ^ "Init file".
  47. ^ "Saint IGNUcius - Richard Stallman". Retrieved 29 January 2015.
  48. ^ "The unabridged selective transcript of Richard M Stallman's talk at the ANU". Retrieved 29 January 2015.
  49. ^ alt.religion.emacs newsgroup
  50. ^ "Saint IGNUcius - Richard Stallman". www.stallman.org. Retrieved 27 March 2018.
  51. ^ a b "How To Avoid The Emacs Pinky Problem". Xahlee.org. Retrieved 2009-11-08.
  52. ^ "Emacs: Why You Should Not Swap {Caps Lock, Control} Keys". In touch typing, modifiers comes in pairs, such as ⇧ Shift key. The accepted ergonomic way to press modifier combinations is using one hand to press the modifier key and the other to press the letter key. Using 2 hands avoids single-hand straining its muscle.
  53. ^ "EmacsWiki: Repeated Strain Injury". Retrieved 29 January 2015.
  54. ^ "Moving The Ctrl Key". EmacsWiki. Retrieved 2009-11-08.
  55. ^ "ErgoEmacs Homepage". Retrieved 2018-09-01.
  56. ^ "Keymacs layout".
  57. ^ "EmacsWiki: Ace Jump". Retrieved 29 January 2015.
  58. ^ "Spacemacs". Retrieved 2015-04-20.
  59. ^ BayleShanks (2009-10-07). "Sticky Modifiers". EmacsWiki. Retrieved 2009-11-08.
  60. ^ "Viper Mode". EmacsWiki. Retrieved 2009-11-08.
  61. ^ "At Home Modifier by Evdev". Retrieved 2015-04-14.
  62. ^ "Why Emacs's Keyboard Shortcuts are Painful".
  63. ^ "VAXen". Catb.org. Retrieved 2009-11-08.

Bibliography