This document explains how to install and use ILISP ("a generalized (X)Emacs interface to an underlying Lisp system") with OpenMCL.
---- Prerequisites: ----
Emacs and/or XEmacs installed under LinuxPPC or Darwin. Apple ships a TTY-based version of FSF Emacs with MacOS X; other Emacs and XEmacs packages for Darwin/MacOS X are available from other sources.
Most LinuxPPC distributions have packages available for both emacs variants.
In some cases, these packages will install a version of ILISP (along with many other emacs utilities and extensions); the version that's installed is probably a little older than the current version and is probably missing support for OpenMCL.
ilisp-5.11.tar.gz This seems to be the current release as of 23 Jun 2001.
ilisp-5.11+openmcl.patch A patch file to add support for OpenMCL to ILISP-5.11
OpenMCL 0.4 or later See http://openmcl.clozure.com for information about obtaining the latest version of OpenMCL.
---- Installation. ----
There are a number of different ways to install [X]Emacs extensions; the discussion below will assume that ILISP's files are to be installed in a subdirectory of the user's home directory. On multiuser systems (or systems with shared filesystems), it might be preferable to install the package in some global location (perhaps [X]Emacs's "site-lisp" directory); note that it's often a bad idea to overwrite files that're installed as part of an [X]Emacs package (by "rpm" or "dpkg" or some similar tool), since doing so can confuse package-management tools.
To simplify things, this also assumes that you're using at most one of XEmacs and GNU Emacs; if you want to be able to use ILISP from either variant, you may need to create duplicate sets of .elc files for each editor.
Obtain "ilisp-5.11.tar.gz" and "ilisp-5.11+openmcl.patch"; move both files to your home directory.
Uncompress and extract the contents of
ilisp-5.11.tar.gz
:
% cd % tar foxvz ilisp-5.11.tar.gz % cd ilisp-5.11 % patch < ../ilisp-5.11+openmcl.patch The "patch" command should produce the output: patching file `Makefile' patching file `cl-ilisp.lisp' patching file `ilisp-dia.el' patching file `ilisp-mak.el' patching file `ilisp-openmcl.el' patching file `ilisp.el' patching file `openmcl.lisp' and shouldn't produce any warnings or errors.
Read the INSTALLATION file in the ilisp-5.11 directory; if applicable, edit the Makefile as needed.
If you're impatient, you can do:
% make EMACS=xemacs
if you're installing for xemacs, or:
% make
for emacs (the default).
This should compile a few dozen .el files; xemacs seems to generate more warnings than emacs does, but none of them seem to be serious(or even interesting ...)
If you have the necessary tools (texinfo, tex, ...) installed, cd to the "docs" subdirectory and do a "make" there.
Modify your ~/.emacs file so that the directory containing the ilisp-5.11 files is on [x]emacs's load path and so that the emacs function (openmcl) will run openmcl under ILISP. At a minimum, this would involve adding something like::
(setq load-path (cons (expand-file-name "~/ilisp-5.11/") load-path)) (autoload 'openmcl "ilisp" "Inferior Open MCL" t) See the file "ilisp-5.11/ilisp.emacs" for examples of other customization settings that affect ILISP. Some recent versions of XEmacs can be configured to use a ~/.xemacs/init.el file instead of .emacs.
With those .emacs settings in place (you may need to quit and restart [X]Emacs, or otherwise cause those additions to be evaluated), do::
M-x openmcl
This should run OpenMCL inside an emacs buffer (and make a lot of - hopefully useful - key bindings and other behavior available.)
If you aren't familiar with ILISP in general, you may wish to view the online documentation; if you weren't able to build a local copy in the "docs" subdirectory, the User Manual is available at:
http://ilisp.cons.org/doc/ilisp.html
If "M-x openmcl" worked, you should do:
M-x ilisp-compile-inits
to compile the lisp components of ILISP.
---- Bugs and rough edges. ----
Both ILISP and OpenMCL can deadlock (get into states where they're each waiting for the other to provide input.) If enough ^Cs and ^Gs don't get ILISP and the lisp back in synch with each other, M-x repair-ilisp often seems to work.
As distributed, OpenMCL is compiled with *SAVE-LOCAL-SYMBOLS*
(and
*FASL-SAVE-LOCAL-SYMBOLS*
) set to NIL; as a consequence, the ARGLIST
function doesn't know the names of non-keyword arguments and generates
GENYSMs ("arg-0", "arg-1", etc.) for functions that weren't compiled
to save local-symbol information.
If you want to generate a heap image in which all functions have local-symbol information (which is also available to BACKTRACE), do:
? (setq *fasl-save-local-symbols* t) T ? (xcompile-ccl t) ; Recompile everything ... ? (xload-level-0 :force) ; Recompile all of level-0, make a new ppc-boot ; (or "ppc-boot.image" for Darwin) ... ? (quit) % cd ccl % ./ppccl ppc-boot ; for LinuxPPC or % ./dppccl ppc-boot.image ; for Darwin ;Loading ... ... ;Loading ? (save-application "PPCCL")
The resulting image seems to be about 5/4 the size of a PPCCL without local symbols.
ILISP can optionally interface to the underlying Lisp's debugger; there isn't too much of a debugger in OpenMCL yet, and I didn't even try to support this. (There's even less of an INSPECT in OpenMCL, so the same applies ...)
The things that ARE supported seem to work reliably.
Ideally, we'll be able to test this for a while, fix and enhance whatever seems to need fixing and enhancing most, and try to get the OpenMCL support incorporated into the main ILISP distribution.
Thanks to Hamilton Link for his work in getting ILISP running under OpenMCL. I hope that having ILISP support will make OpenMCL easier to use, explore and enhance.