Could Emacs be rewritten in Python?
Patrick K. O'Brien
pobrien at orbtech.com
Sun Apr 6 13:39:17 EDT 2003
Paul Rubin <http://phr.cx@NOSPAM.invalid> writes:
> pobrien at orbtech.com (Patrick K. O'Brien) writes:
> > If you were crazy enough to think that you could create a program
> > along the lines of Emacs, but written in Python, how would you go
> > about it? How would you design the domain model for files, buffers,
> > windows, and frames? How would you allow the same level of
> > customizability? How would you map functions (or methods or whatever)
> > to keys? Any thoughts?
>
> I think you're going to need some C extensions to represent buffers
> similar to how Emacs does it. It's hard to move blocks of characters
> around in Python with the array module without constantly re-allocating
> the arrays. Of course it can't be done with strings because Python
> strings are immutable.
The Scintilla text control (written in C and wrapped in wxPython by a
control called wxStyledTextCtrl) handles the on-screen representation
and user-manipulation of the text. So that part is actually easy.
Just read in a file, feed it to Scintilla, and go. The next step is
wrapping all this in an Emacs-like framework.
> Aside from that, the general architecture can probably be similar to
> Emacs. You might want to use a multi-threaded interpreter to make
> extensions more flexible (e.g. so they can respond to keystrokes while
> doing other stuff). You generally won't need as much C code as Emacs
> used, because computers are much faster now than when Emacs was
> written. Python and Emacs Lisp are fairly similar in speed, I think.
I shouldn't need any C, hopefully, since I'm using Scintilla.
Mimicking the Emacs architecture is where I want to focus next - how
to represent commands and keybindings and user-coded extensions and
customizations and so forth.
--
Patrick K. O'Brien
Orbtech http://www.orbtech.com/web/pobrien
-----------------------------------------------
"Your source for Python programming expertise."
-----------------------------------------------
More information about the Python-list
mailing list