On Tuesday 03 February 2004 23:54, joel vennin wrote:
> Few days ago, i'm asking how create a Kemacs (or a Kpart). So i've decided
> to fine a good project which support lisp. I've found ecls :p.
> I've a little question: is it a good way to create a Kemacs from scratch
> using ecls ?
Actually, I worked long ago on replacing the elisp interpreter with ecl on
Xemacs and Emacs. I finally opted to work with the first one, which has a
more structured code base, and got so far as removing its garbage collector
and core dumper, and replacing it with the Boehm-Weiser garbage collector.
That was ok: the editor was working with more or less 30% overhead in the
amount of memory, but was responsive enough. Two things kept me from going
furhter: money (I was promised some that never arrived) and the complexity of
the editor (The *emacs have a lot of data structures for metadata regarding
faces, cut & paste regions, etc).
If I were to do it once again I would be on a safer side and:
* Either add ECL as a scripting language to a simpler editor with a good
interface (Zemacs, Zed, Kwrite/Kate..)
* Or work on the portable version of Hemlock (I think this is already an
ongoing project) and fix or complain about anything in ECL that prevents you
from implementing the terminal version of it (The XWindows library in ECL is
crappy and needs fixing).
> In the near future do you think that ecls support (SETF (VALUES ...) ...)
> and 'format ?
Porting the pretty printer and and (SETF VALUES) from other lisps (I am
thinking about CMUCL right now), should be easy for somebody with good skills
The pretty printer is probably the most difficult part, because in CMUCL (and
maybe in the original implementation in the CMU arxive) it uses custom
streams. But ECL also allows creating custom streams using CLOS, even though
they do not inherit from the STREAM class: basically you need to create the
methods STREAM-CLEAR-INPUT, STREAM-CLEAR-OUTPUT, STREAM-CLOSE,
STREAM-FORCE-OUTPUT, STREAM-INPUT-P, STREAM-INTERACTIVE-P, STREAM-LISTEN,
STREAM-OUTPUT-P, STREAM-READ-CHAR, STREAM-UNREAD-CHAR, and STREAM-WRITE-CHAR.