The GNU Manifesto is a call-to-action by Richard Stallman encouraging participation and support of the GNU Project 's goal in developing the GNU free computer operating system . The GNU Manifesto was published in March 1985 in Dr. Dobb's Journal of Software Tools . It is held in high regard within the free software movement as a fundamental philosophical source.
69-514: The full text is included with GNU software such as Emacs , and is publicly available. Some parts of the GNU Manifesto began as an announcement of the GNU Project posted by Richard Stallman on September 27, 1983, in form of an email on Usenet newsgroups . The project's aim was to give computer users freedom and control over their computers by collaboratively developing and providing software that
138-504: A Language Server Protocol integration, and the productivity system Org-mode . A large community of users have contributed extensions such as the Git interface Magit , the Vim emulation layer Evil, several search frameworks, the window manager EXWM, and tools for working with a wide range of programming languages. The original EMACS was written in 1976 by David A. Moon and Guy L. Steele Jr. as
207-517: A compiler which can translate Emacs Lisp source files into a special representation termed bytecode . Emacs Lisp bytecode files have the filename suffix " .elc ". Compared to source files, bytecode files load and run faster, occupy less disk space, and use less memory when loaded. Bytecode still runs more slowly than primitives, but functions loaded as bytecode can be easily modified and re-loaded. In addition, bytecode files are platform-independent. The standard Emacs Lisp code distributed with Emacs
276-525: A dialog box . Some of these notifications are displayed briefly in the minibuffer, and GNU Emacs provides a *Messages* buffer that keeps a history of the most recent notifications of this type. When the minibuffer is used for output from Emacs, it is called the "echo area". Longer notifications are displayed in buffers of their own. The maximum length of messages that will be displayed in the minibuffer is, of course, configurable. Buffers can also serve as input and output areas for an external process such as
345-410: A shell or REPL . Buffers which Emacs creates on its own are typically named with asterisks on each end, to distinguish from user buffers. The list of open buffers is itself displayed in this type of buffer. Most Emacs key sequences remain functional in any buffer. For example, the standard Ctrl-s isearch function can be used to search filenames in dired buffers, and the file list can be saved to
414-415: A status bar called the "mode line" displayed by default at the bottom edge of the window. Emacs windows are available both in text-terminal and graphical modes and allow more than one buffer, or several parts of a buffer, to be displayed at once. Common applications are to display a dired buffer along with the contents of files in the current directory (there are special modes to make the file buffer follow
483-486: A NEWS file distributed with Emacs. Changes brought about by downgrading to the previous release are listed in an "Antinews" file, often with some snarky commentary on why this might be desirable. Emacs Lisp Emacs Lisp is a Lisp dialect made for Emacs . It is used for implementing most of the editing functionality built into Emacs, the remainder being written in C , as is the Lisp interpreter . Emacs Lisp code
552-582: A central component of the GNU project and a flagship project of the free software movement. The program's tagline is "the extensible self-documenting text editor." Most functionality in GNU Emacs is implemented in user-accessible Emacs Lisp , allowing deep extensibility directly by users and through community-contributed packages. Its built-in features include a file browser and editor ( Dired ), an advanced calculator (Calc), an email client and news reader ( Gnus ),
621-401: 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's email subsystem in his 1986 cracking spree, in which he gained superuser access to Unix computers. Although users commonly submitted patches and Elisp code to the net.emacs newsgroup , participation in GNU Emacs development
690-497: A header along with its implementation file for C-based languages. In addition, there is follow-mode , a minor mode that chains windows to display non-overlapping portions of a buffer. Using follow-mode , a single file can be displayed in multiple side-by-side windows that update appropriately when scrolled. In addition, Emacs supports "narrowing" a buffer to display only a portion of a file, with top/bottom of buffer navigation functionality and buffer size calculations reflecting only
759-425: A major mode (either for a new file type or to build a non-text-editing user interface); others define only commands or minor modes, or provide functions that enhance another extension. Since version 24 GNU Emacs includes a built-in package manager accessible with the list-packages command that allows users to search for and install packages. Historically, packages were downloaded manually, often distributed through
SECTION 10
#1732844884694828-474: A package that originally was a third-party add-on but has been included in GNU Emacs since version 22. Emacs uses the "minibuffer," normally the bottommost line, to display messages and request information, functions that are often performed by dialog boxes in GUI editors. The minibuffer holds information such as text to target in a search or the name of a file to read or save. When applicable, command-line completion
897-418: A philosophical basis for launching the project, and importance of bringing it to fruition — proprietary software is a way to divide users, who are no longer able to help each other. Stallman refuses to write proprietary software as a sign of solidarity with them. The author provides many reasons for why the project and software freedom is beneficial to users, although he agrees that its wide adoption will make
966-450: A popular magazine Linux Focus released its manifesto. 20 years later, a popular illustrations publisher has published their Linux developer manifesto. GNU Emacs GNU Emacs is a text editor and suite of free software tools. Its development began in 1984 by GNU Project founder Richard Stallman , based on the Emacs editor developed for Unix operating systems. GNU Emacs has been
1035-445: A set of macros for the TECO editor, and in 1984, Richard Stallman began work on GNU Emacs, to produce a free software replacement 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
1104-456: A special file that only Customize uses, to avoid the possibility of altering the user's own file. Besides being a programming language that can be compiled to bytecode and transcompiled to native code , Emacs Lisp can also function as an interpreted scripting language , much like the Unix Bourne shell or Perl , by calling Emacs in batch mode . In this way it may be called from
1173-544: A suitable disclaimer or assignment of their copyright interest to the Free Software Foundation (FSF.) Small contributions of fewer than 10 lines of code are exempt. This policy is in place so that the FSF can defend the software in court if its copyleft license is violated. In 2011, it was noticed that GNU Emacs had been accidentally releasing some binaries without corresponding source code for two years, in opposition to
1242-420: A text file just as any other buffer. Dired buffers can be switched to a writable mode, in which filenames and attributes can be edited textually; when the buffer is saved, the changes are written to the filesystem. This allows multiple files to be renamed using the search and replace features of Emacs. When so equipped, Emacs displays image files in buffers. Emacs is binary safe and 8-bit clean. Emacs can split
1311-435: A time, but multiple minor modes can operate simultaneously. These may operate directly on documents, as in the way the major mode for the C programming language defines a separate minor mode for each of its popular indent styles , or they may alter the editing environment. Examples of the latter include a mode that adds the ability to undo changes to the window configuration and one that performs on-the-fly syntax checking. There
1380-497: A versatile text editor over implementing a general-purpose programming language. For example, Emacs Lisp cannot easily read a file a line at a time—the entire file must be read into an Emacs buffer. However, Emacs Lisp provides many features for navigating and modifying buffer text at a sentence, paragraph, or higher syntactic level as defined by modes. Here follows a simple example of an Emacs extension written in Emacs Lisp. In Emacs,
1449-513: Is also a minor mode that allows multiple major modes to be used in a single file, for convenience when editing a document in which multiple programming languages are embedded. GNU Emacs supports the capability to use it as an interpreter for the Emacs Lisp language without displaying the text editor user interface. In batch mode, user configuration is not loaded and the terminal interrupt characters C-c and C-z will have their usual effect of exiting
SECTION 20
#17328448846941518-462: Is an exception, often appearing as " .emacs " despite being evaluated as any Emacs Lisp code. Since the mid-1990s, Emacs also loads ~/.emacs.el and ~/.emacs.d/init.el . Additionally, users may specify any file to load as a config file on the command line, or explicitly state that no config file is to be loaded. When the files are loaded, an interpreter component of the Emacs program reads and parses
1587-413: Is available using the tab and space keys. Emacs keeps text in data structures known as buffers . Buffers may or may not be displayed onscreen, and all buffer features are accessible by both Emacs Lisp programs and the user interface. The user can create new buffers and dismiss unwanted ones, and many buffers can exist at the same time, limited only by available memory. Emacs can be configured to save
1656-441: Is based on Stallman's idea of software freedom (although the written definition had not existed until February 1986). The manifesto was written as a way to familiarize more people with these concepts, and to find more support in form of work, money, programs and hardware. The GNU Manifesto possessed its name and full written form in 1985 but was updated in minor ways in 1987. The GNU Manifesto opens with an explanation of what
1725-1037: Is bundled with GNU Emacs and can be viewed with the built-in info browser. Two additional manuals, the Emacs Lisp Reference Manual by Bil Lewis, Richard Stallman, and Dan Laliberte and An Introduction to Programming in Emacs Lisp by Robert Chassell , are included. All three manuals are also published in book form by the Free Software Foundation . GNU Emacs has support for many alphabets, scripts, writing systems, and cultural conventions and provides spell-checking for many languages by calling external programs such as ispell . Version 24 added support for bidirectional text and left-to-right and right-to-left writing direction for languages such as Arabic, Persian and Hebrew. Many character encoding systems, including UTF-8 , are supported. GNU Emacs uses UTF-8 for its encoding as of version 23, while prior versions used their own encoding internally and performed conversion upon load and save. The internal encoding used by XEmacs
1794-570: Is implemented by a collection of Emacs code called a package or library . For example, there is a library for highlighting keywords in program source code, and a library for playing the game of Tetris . Each library is implemented using one or more Emacs Lisp source files. Libraries can define one or more major modes to activate and control their function. Emacs developers write certain functions in C. These are primitives , also termed built-in functions or subrs . Although primitives can be called from Lisp code, they can only be modified by editing
1863-415: Is in its use of dynamic rather than lexical scope by default. That is, a function may reference local variables in the scope it is called from, but not in the scope where it was defined. Recently, there has been an ongoing effort to update code to use lexical scoping, for reasons outlined below. The development of Emacs Lisp was guided by the goal of providing data structures and features specific to making
1932-559: Is loaded as bytecode, although the matching source files are usually provided for the user's reference as well. User-supplied extensions are typically not byte-compiled, as they are neither as large nor as computationally intensive. Notably, the "cl-lib" package implements a fairly large subset of Common Lisp . This package replaces an earlier "cl" package, which would overwrite existing Emacs Lisp function definitions with ones more similar to those found in Common Lisp. The "cl-lib" package, on
2001-436: Is most closely related to Maclisp , with some later influence from Common Lisp . It supports imperative and functional programming methods. Lisp was the default extension language for Emacs derivatives such as EINE and ZWEI . When Richard Stallman forked Gosling Emacs into GNU Emacs, he also chose Lisp as the extension language, because of its powerful features, including the ability to treat functions as data. Although
2070-651: Is similar to that of GNU Emacs but differs in details. The GNU Emacs user interface originated in English and, with the exception of the beginners' tutorial, has not been translated into any other language. A subsystem called Emacspeak enables visually impaired and blind users to control the editor through audio feedback. The behavior of GNU Emacs can be modified and extended almost without limit by incorporating Emacs Lisp programs that define new commands, new buffer modes, new keymaps, add command-line options, and so on. Many extensions providing user-facing functionality define
2139-450: Is used to modify, extend and customize Emacs. Those not wanting to write the code themselves the Customize function can be used. It provides a set of preferences pages allowing the user to set options and preview their effect in the running Emacs session. When the user saves their changes, Customize simply writes the necessary Emacs Lisp code to the user's config file , which can be set to
GNU Manifesto - Misplaced Pages Continue
2208-630: The GNU General Public License (GPL) state that the Emacs source code, including both the C and Emacs Lisp components, are freely available for examination, modification, and redistribution. Older versions of the GNU Emacs documentation appeared under an ad-hoc license that required the inclusion of certain text in any modified copy. In the GNU Emacs user's manual, for example, this included instructions for obtaining GNU Emacs and Richard Stallman's essay The GNU Manifesto . The XEmacs manuals, which were inherited from older GNU Emacs manuals when
2277-623: The Usenet newsgroup gnu.emacs.sources. Over time many popular packages have been included in Emacs by default; for example version 21 began bundling Org-mode , Calc, TRAMP, and many others. Notable packages include: In its early history, GNU Emacs often ran noticeably slower than rival text editors because the loading and interpreting of its Lisp -based code incurs a performance overhead. Modern computers are powerful enough to run GNU Emacs with ease, but versions prior to 19.29 (released in 1995) couldn't edit files larger than 8 MB. The file size limit
2346-611: The control key and/or the meta key , alt key or super keys in conjunction with a regular key produces modified keystrokes that invoke functions from the Emacs Lisp environment. Commands such as save-buffer and save-buffers-kill-emacs combine multiple modified keystrokes. Some GNU Emacs commands work by invoking external programs, such as ispell for spell-checking and the GNU Compiler Collection (GCC) for program compilation . Emacs also supports "inferior processes," long-lived child processes that interact with
2415-465: The source code of many markup and programming languages , as well as displaying web pages , directory listings and other system info. Each major mode involves an Emacs Lisp program that extends the editor to behave more conveniently for the specified type of text. Major modes typically provide some or all of the following common features: The use of "minor modes" enables further customization. A GNU Emacs editing buffer can use only one major mode at
2484-444: The C source files and recompiling. In GNU Emacs , primitives are not available as external libraries; they are part of the Emacs executable. In XEmacs , runtime loading of such primitives is possible, using the operating system's support for dynamic linking . Functions may be written as primitives because they need access to external data and libraries not otherwise available from Emacs Lisp, or because they are called often enough that
2553-514: The Common Lisp standard had yet to be formulated, Scheme existed at the time but Stallman chose not to use it because of its comparatively poor performance on workstations (as opposed to the minicomputers that were Emacs' traditional home), and he wanted to develop a dialect which he thought would be more easily optimized. The Lisp dialect used in Emacs differs substantially from the more modern Common Lisp and Scheme dialects used for applications programming. A prominent characteristic of Emacs Lisp
2622-556: The GNU Project is, and what is the current, at the time, progress in creation of the GNU operating system . The system, although based on, and compatible with Unix, is meant by the author to have many improvements over it, which are listed in detail in the manifesto. One of the major driving points behind the GNU project, according to Stallman, was the rapid (at the time) trend toward Unix and its various components becoming proprietary (i.e. closed-source and non-libre) software. The manifesto lays
2691-434: The code is evaluated . It is not necessary to recompile, restart Emacs, or even rehash a configuration file. If the code is saved into an Emacs init file, then Emacs will load the extension the next time it starts. Otherwise, the changes must be reevaluated manually when Emacs is restarted. Emacs Lisp code is stored in filesystems as plain text files, by convention with the filename suffix " .el ". The user's init file
2760-448: The command line or via an executable file, and its editing functions, such as buffers and movement commands are available to the program just as in the normal mode. No user interface is presented when Emacs is started in batch mode; it simply executes the passed-in script and exits, displaying any output from the script. Emacs Lisp is also termed Elisp , although there are also older, unrelated Lisp dialects with that name. Emacs Lisp
2829-469: The comparative speed of C versus Emacs Lisp makes a worthwhile difference. However, because errors in C code can easily lead to segmentation violations or to more subtle bugs, which crash the editor, and because writing C code that interacts correctly with the Emacs Lisp garbage collector is error-prone, the number of functions implemented as primitives is kept to a necessary minimum. Byte-compiling can make Emacs Lisp code execute faster. Emacs contains
GNU Manifesto - Misplaced Pages Continue
2898-409: The editing area can be split into separate areas called windows , each displaying a different buffer . A buffer is a region of text loaded into Emacs' memory (possibly from a file) which can be saved into a text document. Users can press the default C-x 2 key binding to open a new window. This runs the Emacs Lisp function split-window-below . Normally, when the new window appears, it displays
2967-410: The editing area into separate non-overlapping sections called "windows," a feature that has been available since 1975, predating the graphical user interface in common use. In Emacs terminology, "windows" are similar to what other systems call " frames " or " panes " – a rectangular portion of the program's display that can be updated and interacted with independently. Each Emacs window has
3036-417: The editor. This is used to implement shell-mode , running a Unix shell as inferior process, as well as read–eval–print loop (REPL) modes for various programming languages. Emacs' support for external processes makes it suitable for interactive programming along the lines of Interlisp or Smalltalk . Users who prefer the widely used IBM Common User Access keyboard shortcut layout can use cua-mode ,
3105-510: The file highlighted in dired), to display the source code of a program in one window while another displays a shell buffer with the results of compiling the program, to run a debugger along with a shell buffer running the program, to work on code while displaying a man page or other documentation (possibly loaded over the World Wide Web using one of Emacs' built-in web browsers) or simply to display multiple files for editing at once such as
3174-471: The fork occurred, have the same license. Newer versions of the documentation use the GNU Free Documentation License with "invariant sections" that require the inclusion of the same documents and that the manuals proclaim themselves as GNU Manuals . For GNU Emacs, like many other GNU packages, it remains policy to accept significant code contributions only if the copyright holder executes
3243-399: The functions and variables, storing them in memory. They are then available to other editing functions, and to user commands. Functions and variables can be freely modified and redefined without restarting the editor or reloading the config file. In order to save time and memory space, much of the functionality of Emacs loads only when required. Each set of optional features shipped with Emacs
3312-401: The graphics systems native to macOS and Windows to provide menubars , toolbars , scrollbars and context menus conforming more closely to each platform's look and feel . Lucid Emacs, based on an early version of GNU Emacs 19, was developed beginning in 1991 by Jamie Zawinski and others at Lucid Inc. One of the best-known forks in free software development occurred when the codebases of
3381-411: The help of the polysylabi platform bridge. Emacs Lisp is a Lisp-2 like Common Lisp, meaning that it has a function namespace which is separate from the namespace it uses for other variables. Like MacLisp, Emacs Lisp uses dynamic scope , offering static (or lexical) as an option starting from version 24. It can be activated by setting the file local variable lexical-binding . Before this option
3450-498: The intended spirit of the GPL. Richard Stallman described this incident as "a very bad mistake," which was promptly fixed. The FSF did not sue any downstream redistributors who unknowingly violated the GPL by distributing these binaries. In its normal editing mode, GNU Emacs behaves like common text editors by allowing the user to type text with the keyboard and move the editing point with arrow keys . Escape key sequences or pressing
3519-471: The list of open buffers on exit, and reopen this list when it is restarted. Some buffers contain text loaded from text files , which the user can edit and save back to permanent storage. These buffers are said to be "visiting" files. Buffers also serve to display other data, such as the output of Emacs commands, dired directory listings, documentation strings displayed by the "help" library and notification messages that in other editors would be displayed in
SECTION 50
#17328448846943588-401: The new window to display another (new) buffer. The second statement, (global-set-key ...) re-binds the key sequence "C-x 2" to the new function. This can also be written using the feature called advice , which allows the user to create wrappers around existing functions instead of defining their own. This has the advantage of not requiring keybindings to be changed and working wherever
3657-423: The original function is called, as well as being simpler to write but the disadvantage of making debugging more complicated. For this reason, advice is not allowed in the source code of GNU Emacs, but if a user wishes, the advice feature can be used in their code to reimplement the above code as follows: This instructs split-window-below to execute the user-supplied code whenever it is called, after executing
3726-542: The other hand, follows Emacs Lisp style guidelines more closely and prefixes each function and macro it defines with "cl-" (e.g., cl-defun , which doesn't conflict with the name of the built-in defun ), avoiding the unexpected changes in behavior that could occur whenever the "cl" package was loaded. Emacs Lisp (unlike some other Lisp implementations) does not do tail-call optimization . Without this, tail recursions can eventually lead to stack overflow . The apel library aids in writing portable Emacs Lisp code, with
3795-477: The program or suspending execution instead of invoking Emacs keybindings. GNU Emacs has command line options to specify either a file to load and execute, or an Emacs Lisp function may be passed in from the command line. Emacs will start up, execute the passed-in file or function, print the results, then exit. The shebang line #!/usr/bin/emacs --script allows the creation of standalone scripts in Emacs Lisp. The GNU Emacs Manual , written by Richard Stallman,
3864-454: The rest of the function. Advice can also be specified to execute before the original function, around it (literally wrapping the original), or to conditionally execute the original function based on the results of the advice. Emacs 24.4 replaces this defadvice mechanism with advice-add , which is claimed to be more flexible and simpler. The advice above could be reimplemented using the new system as: These changes take effect as soon as
3933-526: The role at times. Stefan Monnier and Chong Yidong have overseen maintenance since 2008. On September 21, 2015 Monnier announced that he would be stepping down as maintainer effective with the feature freeze of Emacs 25. Longtime contributor John Wiegley was announced as the new maintainer on November 5, 2015. Wiegley was joined by Eli Zaretskii in July, 2016, and Lars Ingebrigtsen in September, 2020. The terms of
4002-410: The same buffer as the previous one. Suppose we wish to make it display the next available buffer. In order to do this, the user writes the following Emacs Lisp code, in either an existing Emacs Lisp source file or an empty Emacs buffer: The first statement, (defun ...) , defines a new function, my-split-window-func , which calls split-window-below (the old window-splitting function), then tells
4071-586: The selected range. Emacs windows are tiled and cannot appear "above" or "below" their companions. Emacs can launch multiple "frames", which are displayed as individual windows in a graphical environment. On a text terminal, multiple frames are displayed stacked filling the entire terminal, and can be switched using the standard Emacs commands. GNU Emacs can display or edit a variety of different types of text and adapts its behavior by entering add-on modes called "major modes". There are major modes for many different purposes including editing ordinary text files,
4140-411: The then-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"
4209-558: The two Emacs versions diverged and the separate development teams ceased efforts to merge them back into a single program. After Lucid filed for bankruptcy, Lucid Emacs was renamed XEmacs . XEmacs development has slowed, with the most recent stable version 21.4.22 released in January 2009, while GNU Emacs has implemented many formerly XEmacs-only features. This has led some users to proclaim XEmacs' death. Other forks, less known than XEmacs, include: Changes in each Emacs release are listed in
SECTION 60
#17328448846944278-510: The user can load dynamic modules. Since version 28.1, Emacs can natively compile Emacs Lisp files via libgccjit , as opposed to just byte compiling them, resulting in a significant boost in performance. GNU Emacs runs on a wide variety of operating systems , including DOS , Windows , and most Unix-like operating systems, such as Linux , the various BSDs , Solaris , AIX , HP-UX and macOS . Many Unix-like systems include Emacs by default. In 2023 an official port for Android
4347-425: The work of programmers less profitable. A large part of the GNU Manifesto is focused on rebutting possible objections to GNU Project's goals. They include the programmer's need to make a living, the issue of advertising and distributing free software, and the perceived need of a profit incentive. Throughout history, the GNU Manifesto has inspired various other UNIX-related manifestos. Based on it, 10 years later,
4416-520: Was added, one could use the lexical-let macro from the (now deprecated) "cl" package to provide effective lexical scope. In dynamic scoping, if a programmer declares a variable within the scope of a function, it is available to subroutines called from within that function. Originally, this was intended as an optimization ; lexical scoping was still uncommon and of uncertain performance. In computer scientist Olin Shivers's recollection, "I asked RMS when he
4485-533: Was dropped after version 1.12 as it was thought that the major number would never change, and thus the major version skipped from "1" to "13". A new third version number was added to represent changes made by user sites. In the current numbering scheme, a number with two components signifies a release version, with development versions having three components. GNU Emacs was later ported to the Unix operating system . It offered more features than Gosling Emacs, in particular
4554-442: Was implementing emacs lisp why it was dynamically scoped and his exact reply was that lexical scope was too inefficient." Dynamic scoping was also meant to provide greater flexibility for user customizations. However, dynamic scoping has several disadvantages. Firstly, it can easily lead to bugs in large programs, due to unintended interactions between variables in different functions. Secondly, accessing variables under dynamic scoping
4623-426: Was raised in successive versions, and 32 bit versions after GNU Emacs 23.2 can edit files up to 512 MB in size. Emacs compiled on a 64-bit machine can handle much larger buffers. While GNU Emacs is largely written in Emacs Lisp, it makes extensive use of natively compiled C code to improve performance. In addition to its own C code, it uses external libraries such as libxml2 for parsing XML . Packages installed by
4692-574: Was relatively restricted 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 today uses the Git DVCS . Richard Stallman has remained the principal maintainer of GNU Emacs, but he has stepped back from
4761-401: Was released. Version 23.1 removed supported for some platforms deemed obsolete. GNU Emacs runs both on text terminals and in graphical user interface (GUI) environments. On Unix-like operating systems, GNU Emacs can use the X Window System to produce its GUI either directly using Athena widgets or by using a "widget toolkit" such as Motif , LessTif , or GTK+ . GNU Emacs can also use
#693306