[Mono-list] ANN: Pyjama Project, and need help

Doug Blank doug.blank at gmail.com
Wed Jan 5 08:37:46 EST 2011

Hello mono-list; hope this is appropriate place to post!

After some initial prototypes, we are heading in a general direction
with our cross-platform IDE incorporating Mono, Gtk#, the DLR, and
associated languages for education.

I'm looking for some feedback on current implementation, so if you
have the inclination, your feedback is appreciated!

The project is called Pyjama, and has a homepage here:


Overview videos:


Quickstart instructions:

You can download the current packaged Pyjama (7MB) from:


and unzip. You'll need a current installation of Mono, Gtk, and
optionally Gtk-SourceView (for nice source code highlighting and line

Start with Pyjama/pyjama and try loading some of the Pyjama/examples/
(Windows has a hardcoded path to Mono in src/pyjama.py).

Additional information available on the website. Briefly:

There are 5 directories in the Pyjama folder:
  bin - contains the startup files, and language dll files for languages
  bin/Lib - contains the standard language (ie, Python) libraries
  languages - contains the language definition files for Python, Ruby,
Scheme, and Dinah
  modules - Cross-language modules that can be used by all Pyjama languages
  examples - sample code
  src - the source code for the Pyjama Project

Pyjama is written in IronPython, using the Gtk# graphical user
interface.  The Python files for the Pyjama Project are in
Pyjama/src/*.py. They are:
  document.py - base classes for Document interface
  editor.py - the Editor Window
  engine.py - base classes for the Engine interface
  pyjama.py - setup and startup code
  reflection.py - code to read DLL data
  shell.py - the Shell Window
  utils.py - utility functions and classes
  window.py - base class for Shell and Editor

Pyjama is an editor and executor of code from a Language. Languages
are defined in Pyjama/languages and define two items: editor document,
and an executor engine. Pyjama has 5 languages, in various states of
  Python (finished)
  Ruby (nearly finished)
  Scheme (somewhat working)
  Sympl (example language in Python)
  Dinah (drag and drop language, just started)

You can switch between languages in the shell with Ctrl+1 through Ctrl+4.

A Language file in Pyjama/languages/*.py defines the editing document,
and the shell executor API. Documents can do things like open, save,
and display data for editing. Engines can do things like execute,
execute_file, and parse files. Engines also allow for the languages to
share data and functionality.

There is a long list of items to be completed just to be functional,
and I'll be working on this full time this semester. If anyone would
like to join this open source project, please let me know. There are a
couple of hacky seeming spots that I'd like to clean up:

1. Is the background executing code appropriately done? See Pyjama/src/shell.py

2. In a couple of places I'm using ManualResetEvent,
Gtk.Application.Invoke, and WaitOne; is that the best way to
accomplish syncing between threads? See grep ManualResetEvent src/*.py

3. The error display code doesn't always work. See grep EXCEPTION */*.py

Any feedback appreciated!


More information about the Mono-list mailing list