A PDL-centric GUI REPL written with Prima.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



A Run-Eval-Print-Loop written with Prima targetting the PDL community.

Alpha Version

This is a script that I started writing in January, 2011. At the time it was a hack to let me play with a GUI REPL, but it was a huge hack. Since that time I have begun extracting the modular pieces into library pieces, the most complete of which is Prima::InputHistory. However, much work remains to be done, and much documentation remains to be written. Do not be surprised if the user-interface changes, and certainly do not be surprised if the (currently undocumented) Tab API changes. However, for the daily use of hacking on data and making simple plots, these will not much matter.


Unfortunately, this project has been on a hiatus since roughly June. I have three major widgets that I want to write and test, and then integrate fully into the system.

The first is Prima::InputHistory, which I wrote quite a while ago and for which I have already implemented a test suite.

The second is Prima::CaptureStdOut, which has a first draft implementation of a bigger concept. I wrote the Prima::CaptureStdOut widget and initial test suite back in June. An even better implementation would break the widget into two pieces: one that listened for events on stdout and stderr and fired callbacks (called perhaps Prima::StdOutTee), and another that prettily displays the output of those events (called perhaps Prima::StdOutText). Then, it would be possible for different widgets to subscribe to the IO events. You could have the same output going to different widgets, and have those widgets get updates simultaneously. It would be neat. A more sophisticaed output handler could also be given Perl objects to display, and then could query the objects to see if they had their own custom display widgets. A PDL spreadsheet-like explorer comes to mind, for example. This sort of advanced display widget would make it possible to sanely display an output piddle. That, in turn, would allow me to put the "P" back into the REPL. In combination with InputHistory, this would also allow a natural evolution of the REPL into a Notebook.

Finally, I want to integrate an IRC client into the GUI so that beginners can immediately get one-on-one help. I have a basic IRC client in Prima that I've meant to convert to a widget, but I got too busy. I'm also unsure how I would write a good test suite for it.

Once I have those major components, I need to work finalizing and testing the tab API and improving the file buffer tabs.

Supported Platforms and Filing Bugs

prima-repl is supposed to work on Windows, Mac, and Linux. If you find trouble, please report it to the issue tracker on Github at https://github.com/run4flat/App-Prima-REPL/issues.


Currently, this software is only distributed on Github. I intend to release it to CPAN at the same time that I release PDL::Drawing::Prima and PDL::Graphics::Prima. Strictly speaking, this application does not depend on either of those packages, but they provide very nice plotting capabilities for PDL, so if you use PDL I highly recommend installing them.

At any rate, you cannot install this software with a simple cpan or cpanm. Instead, do the following:

install Prima

Prima is available on CPAN, you will need version 1.33. If you are on a Linux machine you must install your X11 header files, which are considered dev files on many flavors of Linux. If you are a Windows or Mac user, you should be fine as long as you have a C compiler for your system.

There may be a couple of errors on test stage. I recommend to ignore them.

Note for Mac users: I have found that Prima will fail to build/install if I have libjpeg or libtiff installed. That's a real bummer, and it's something that I'm going to try to work on. If you have those installed and you don't run into trouble, please let me know. If you run into trouble, you can either uninstall them or you can try to help me and Dmitry figure out what's wrong.

optional: install PDL::Drawing::Prima

PDL::Drawin::Prima is needed for the plotting library that I mention next. Note that you should only install this if you are a PDL user and you have PDL installed.

git clone git://github.com/run4flat/PDL-Drawing-Prima.git
cd PDL-Drawing-Prima
perl Build.PL
# try running some of the scripts in examples/
./Build install
optional: install PDL::Graphics::Prima

PDL::Graphics::Prima is a fantastic plotting library that is currently in alpha. It will be changing in the next month or so. The Simple interface should remain unchanged, but the underlying PlotType and DataSet systems are undergoing a substantial reorganization. That partially-completed reorganization is currently in the master branch (sorry), but the last usable version of the library has been tagged. To install it, do the following (Windows users may need to use nmake or dmake instead or make):

git clone git://github.com/run4flat/PDL-Graphics-Prima.git
cd PDL-Graphics-Prima
git checkout v0.01
perl Makefile.PL
# try running example scripts in test, though
# they are not really tests
make install
install App::Prima::REPL

One more piece, the actual REPL:

git clone git://github.com/run4flat/App-Prima-REPL.git
cd App-Prima-REPL
perl Buld.PL
# You can play with it like so:
perl -Mblib blib/script/prima-repl
# OK, now install!
./Build install

Copyright and License

Copyright (C) 2011, 2012 David Mertens

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

Author: David Mertens <dcmertens.perl.csharp@gmail.com>

Note that my email is intentionally obfuscated. Knowing that I am a Perl programmer, you can probably remove the part that does not belong.