Engine next generation internet Emacs
JavaScript Clojure
Switch branches/tags
Nothing to show
Latest commit 7d8aeec Nov 4, 2012 @e-user updated dependencies to a degree everything works with nrepl, kinda; …
…some minor changes to adapt to new versions here and there
Permalink
Failed to load latest commit information.
resources
src
test/engine/test
.gitignore
.gitmodules
COPYING
README
README.md
project.clj

README.md

Engine - Engine new generation internet Emacs

Engine is an attempt at creating an Emacs class editor using a very modern Lisp dialect, Clojure, while exposing the user interface through latest web standards technologies such as HTML5 and CSS3 with a WebSockets and socket.io based communication layer in between.

Technological Background

In contrast to traditional Emacsen such as GNU Emacs and XEmacs, it uses ropes instead of gap buffers to cope with random access insertion and deletion speeds in large buffers, utilizes parallel computing where useful and runs buffer modifications in Software Transactional Memory. Thus, it can properly support multithreaded access to buffers, a feature missed by many in traditional Emacsen.

The whole user interface, including output and input, is outsourced to the Ace code editor, with runtime modifications to redirect input into server-side Engine. Further modification has been made to make Ace look more Emacsish as well. To put it metaphorically, one can imagine that the otherwise standalone Ace editor is turned into a brainless puppet through Engine.

Server side Engine is implemented on top of Aleph, which is in turn based on Netty and Lamina, providing an asynchronous, channel/event-based architecture.

Through its WebSockets/socket.io based interface, Engine could easily be supplemented by a terminal emulator based text interface.

Even though it is partly web technology based, Engine is not meant to run in a "cloud". Using new generation web standard, however, does away with the risks of having to test and maintain compatibility with different graphical toolkits. Furthermore, there's hardly any modern computer without a JVM and a web browser, so Engine is likely to work even in untested environments.

The Beef inside Engine

Whether or not Engine itself will turn into anything popular someday, the socket.io and rope implementations are universally useful and can (and probably will) become autonomous projects anytime.

Rationale

Emacs class editors are the most powerful kind of editors available, at least in potential. They bear the potential of any other kind of editor, including those of the powerful vi class of editors. This is achieved by breaking with the Unix philosophy,
Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.

Instead, Emacsen can rather be seen as input/output processing frameworks running inside modern, virtual Lisp machines. From a certain perspective, the end of physical Lisp machines has made Lisp a mocking guest thriving inside modern, general-purpose computers, with Emacsen as one of its manifestations. A Lisp machine, being a virtual operating system of its own, transforms the Unix philosophy into Write functions that do one thing and do it well. Write functions to work together. Write functions to handle lists, because that is a universal interface.

Where Unix represents a perfect community, Lisp represents enlightenment.
Emacs is the interface to God.

Further reading

  • Ymacs: A similar project, based upon Common Lisp and more traditional AJAX techniques
  • Emacsen: The emacswiki.org definition of Emacs-class editors is clearly a contradiction of the one above, nevertheless it should be taken into account