help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

A femtolisp based emacs clone


From: edu500ac
Subject: A femtolisp based emacs clone
Date: Sun, 21 Aug 2016 13:15:01 -0700 (PDT)
User-agent: G2/1.0

Dear Members of Gnu.Emacs.help,

A team of engineers, of which I am part, has decided to write a tiny version of
 Emacs. Well, there are many tiny versions of Emacs around: Microemacs, Zile, 
jmacs to name a few. However, the idea is to be in keeping with the Emacs 
Philosophy, and not only providing key-binding for Emacs compatibility. By 
Emacs philosophy, I mean that the new editor must be customizable through a 
Lisp dialect. The small group under the leadership of Hugh Barney has chosen 
femtolisp for writing macros and extensions to the editor. As a proof of 
concept, Hugh Barney designed the architecture of the editor and implemented 
the main editing functions in 2000 lines of C. The idea is that one should not 
need to program in C beyond these 2000 lines. Besides this, 2000 lines divided 
between 12 small files is easy to understand and modify. I mean, even if a 
developer wants to modify a C source file, s/he can do it easily. The C source 
files are classified according to their functionality. For instance, 
commandFemto.c contains the primitive commands; keyFemto.c contains 
keybyndings. I intend to write a comprehensive documentation on how to modify 
femto-Emacs C source files.

Initially, Hugh Barney named the new editor - atto. Then he changed the name to 
femto in acknowledgement of femtolisp. This core femtoEmacs has the following 
features:

1 - Multiple windows that one can open with C-x 2.

2 - C-x C-f to visit a new file. The arrows rotate the files in the directory.

3 - Multiple buffers.

4 - Utf8 for diacritics, etc.

5 - File browsing through the arrow keys

In summary, femtoEmacs has the keybindings and basic functionality of 
GNU-Emacs. Well, maybe not the whole functionality, but the authors are pushing 
in that direction. 

Ed Costa designed the interface with femtolisp and proposed the functions for 
the interaction between Lisp and femtoEmacs buffers and keybinding:

1 - insert, backward, forward-char, backward-char, etc.

2 - syntax highlighting

3 - parentheses checking (it is not working very well)

The project members have chosen femtolisp because it is small and fast, 
although they had flirted with TinyScheme. Femtolisp compiler takes less than 
100 k on a Macintosh. Besides this, femtolisp is about 4 times faster than 
Python, slightly faster than Bigloo VM, has lexical scope, and can be made 
compatible with the language used in the book - Structure and Interpretation of 
Computer Programs.

By the way, femtolisp has lexical scope, backquote, vectors, IO and memory 
strings, compacting GC, support for direct use of C data types à la Python, 
proper tail recursion, printing and reading circular shared structures, 
exceptions, macros, equal and ordered comparison predicates that work on 
circular shared structures, etc.

Femto-Emacs is hosted on and can be cloned from github:

git clone https://github.com/FemtoEmacs/Femto-Emacs/

Our ultimate goal is to create a grass-root movement similar to neovim. This 
way, users will have a tiny emacs that is easy to maintain, but has enough 
functionality to be useful. We are needing collaboration for:

1 -- Generate mingw binaries for Windows. In general, Windows users do not know 
how to compile applications from source. Thus the need of binaries for this 
particular platform.

2 -- Improve the femtolisp interface. For the time being, the only 
functionalities that the lisp interface has are:

1 --  to move the cursor forward and backward

2 -- to insert text 

3 -- to receive text from selected regions 

4 -- to insert text from the clipboard

5 -- to move the cursor to the beginning of line and to the end of line

6 -- to define keywords for a given language

Collaborators are welcome to provide at least the most basic emacs functions.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]