Mercurial > hg > xemacs-beta
diff man/ilisp.texi @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | 4b173ad71786 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/ilisp.texi Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,2048 @@ +\input texinfo @c -*-texinfo-*- Last modified: April 10, 1993 +@setfilename ../info/ilisp.info +@settitle The ILISP Inferior LISP Interface + +@c NOTE: KEYBINDING DESCRIPTIONS IN THIS FILE +@c +@c Texinfo doesn't support the functionality of substitute-command-keys, +@c which kind of makes things tough when the bindings change. +@c +@c Note that all the keys here which use the ILISP prefix have +@c @key{C-z} before them, so a global replace can be used to put in a +@c specific value for this (if wanted). The whole string should be +@c rpelaced, as in (replace-string "@key{C-z}" "@key{C-c}"). Any occurrances +@c of this should be in the proper @kbd{} construct, or in a table. +@c +@c Key command descriptions in tables have the function listed after +@c them, as in "@item RET (return-ilisp)" so it should be poosible +@c to update these descriptions with a little elisp code. +@c +@c Todd Kaufmann 17-Mar-91 +@c toad@cs.cmu.edu + + +@c ================================================================ +@c THIS file has the new style title page commands. + +@c Run using special version of `texinfo.tex'. +@c Version 2.13 or higher is recommended. + +@c Also, run `makeinfo' rather than `texinfo-format-buffer'. +@c (Get the texinfo2 package.) +@c ================================================================ + +@c Use this if you want small book size like the GNU Emacs bound book. +@c smallbook + +@c tex +@c \overfullrule=0pt +@c end tex + +@comment INDEX USAGE: +@c +@c @cindex concept +@c @findex function +@c @vindex variable +@c @kindex key +@c @pindex command (normally program) +@c +@c not used: +@c @tindex (data)type + + +@c +@c Combine indices. +@c @synindex cp fn +@c @syncodeindex vr fn +@c @syncodeindex ky fn +@c @syncodeindex pg fn +@c @syncodeindex tp fn +@c oops: texinfo-format-buffer ignores synindex +@c So, use makeinfo.c. Get texinfo2.tar.Z off of prep.ai.mit.edu +@c + +@c TODO: +@c - Add doc for rlogin lisps. +@c - Add doc for trace-defun-break + + +@ifinfo +This file documents ILISP. + +This is edition 0.11 of the ILISP manual +for ILISP Version 5.5. + +Copyright (C) 1991,1992,1993 Todd Kaufmann + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation approved +by the Foundation. +@end ifinfo +@c + +@c +@setchapternewpage odd + +@titlepage +@title ILISP User Manual +@subtitle A GNU Emacs Interface for Interacting with Lisp +@subtitle Edition 0.11, June 1993 +@subtitle For ILISP Version 5.5 +@c +@c the following comment string is removed by the ctrl-c-doc.sh script, +@c which can be used to change all ilisp-prefix bindings to C-c (or +@c other). +@c +@comment ctrl-C version: @subtitle This is the ``@key{C-z}'' version of the manual. + +@author by Todd Kaufmann, Chris McConnell and Ivan Vazquez + +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1991, 1992, 1993 Todd Kaufmann + +@sp 2 +This is edition 0.11 of the @cite{ILISP User Manual} +for ILISP Version 5.5, +June 1993. + +@sp 2 + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation approved +by this author. +@end titlepage +@page + + +@node Top, Distribution, (dir), (dir) +@comment node-name, next, previous, up + + +@ifinfo +This Info file documents ILISP, a GNU Emacs interface for a lisp +running in a buffer. +@comment ctrl-C version: @sp +@comment ctrl-C version: This is the ``@key{C-z}'' version of the manual. +@end ifinfo + +@menu +* Distribution:: How to get the latest ILISP distribution. + +* Acknowledgements:: Acknowledgements +* Introduction:: An introduction to ILISP and its features. +* Installation:: How to install ILISP. +* Starting up:: How to run a Lisp process using ILISP. + +* Buffers of ILISP:: Buffers used by ILISP, and their commands. +* ILISP Commands:: +* Customization:: Description of ILISP variables and hooks. +* Dialects:: How ILISP knows how to communicate with Lisp, + and how to define new dialects. + +Indices: +* Concept index:: General concepts. +* Key index:: ILISP key sequences. +* Command index:: Commands by name. +* Variable index:: Variables and hooks that influence ILISP's + behavior. + +* Function index:: Internal Emacs Lisp functions. +@end menu + +@node Distribution, Acknowledgements, Top, Top +@unnumbered How to get the latest ILISP distribution. + +ILISP is "free"; this means that everyone is free to use it and free +to redistribute it on a free basis. ILISP is not in the public domain; +it is copyrighted and there are restrictions on its distribution, but +these restrictions are designed to permit everything that a good +cooperating citizen would want to do. What is not allowed is to try to +prevent others from further sharing any version of ILISP that they might +get from you. The precise conditions appears following this section. + +The easiest way to get a copy of ILISP is from someone else who has it. +You need not ask for permission to do so, or tell any one else; just +copy it. + +If you do start using the package, please send mail to +@samp{ilisp-request@@lehman.com} so that I can keep a mailing list of +users. + +Please send bugs, questions or suggestions for discussion to @samp{ilisp@@lehman.com} + +@menu +* FTP directions:: FTP directions +@end menu + +@node FTP directions, , , Distribution +@unnumberedsec FTP directions +@cindex FTP site +@cindex Anonymous FTP +@cindex How to get +@cindex Getting ILISP +@noindent +You can anonymously ftp the source files from FTP.CS.CMU.EDU: + +@itemize @bullet +@item +Ftp to ftp.cs.cmu.edu (128.2.206.173) +@item +login as anonymous, with user@@host as password +@item +@code{cd /user/ai/lang/lisp/util/emacs/ilisp/57} +@item +@code{binary} +@item +@code{get ilisp.tgz} +@end itemize + +@noindent +Or get whatever single files you need. + +@noindent +Unpack and install: + +@code{uncompress ilisp.tar.Z; tar xf ilisp.tar} + +@xref{Installation}. + +If you want to use Thinking Machines' completion code, then Ftp it from +THINK.COM + +It no longer comes as part of the distribution. + +@node Acknowledgements, Introduction, Distribution, Top +@unnumbered Acknowledgements + +ILISP replaces the standard inferior LISP mode. ILISP is based on +comint mode and derived from a number of different interfaces including +Symbolics, cmulisp, and Thinking Machines. + +There are many people that have taken the time to report bugs, make +suggestions and even better send code to fix bugs or implement new +features. + +Thanks to Neil Smithline, David Braunegg, Fred White, Jim Healy, Larry +Stead, Hans Chalupsky, Michael Ernst, Frank Ritter, Tom Emerson, David +Duff, Dan Pierson, Michael Kashket, Jamie Zawinski, Bjorn Victor, Brian +Dennis, Guido Bosch, Chuck Irvine, Thomas M. Breuel, Ben Hyde, Paul +Fuqua (for the CMU-CL GC display code) and Marco Antoniotti for bug +reports, suggestions and code. My apologies to those whom I may have +forgotten. + +Special thanks to Todd Kaufmann for the texinfo file, work on bridge, +epoch-pop and for really exercising everything. + +Please send bug reports, fixes and extensions to +@samp{ilisp@@lehman.com} so I can merge them into the master +source. +@noindent +@example +--Chris McConnell 18-Mar-91 +--Ivan Vazquez 27-Jun-93 +@end example + + +@node Introduction, Installation, Acknowledgements, Top +@unnumbered Introduction +@cindex features + +ILISP is an interface from GNU Emacs to an inferior LISP. It has the +following features: + +@itemize @bullet +@item +Runs under emacs-18, fsf emacs-19, and Lucid emacs-19. + +@item +Support for multiple LISP dialects including Lucid, Allegro and CMU +on multiple machines even at the same time. + +@item +Dynamically sized pop-up windows that can be buried and scrolled from +any window. + +@item +Packages are properly handled including the distinction between +exported and internal symbols. + +@item +Synchronous, asynchronous or batch eval and compile of files, regions, +definitions and sexps with optional switching and automatic calling. + +@item +Arglist, documentation, describe, inspect and macroexpand. + +@item +Completion of filename components and LISP symbols including partial matches. + +@item +Find source both with and without help from the inferior LISP, +including CLOS methods, multiple definitions and multiple files. + + +@item +Edit the callers of a function with and without help from the +inferior LISP. + +@item +Trace/untrace a function. + +@item +@kbd{M-q} (``Fill-paragraph'') works properly on paragraphs in comments, +strings and code. + +@item +Find unbalanced parentheses. + +@item +Super brackets. + +@item +Handles editing, entering and indenting full LISP expressions. + +@item +Next, previous, and similar history mechanism compatible with comint. + +@item +Handles LISP errors. + +@item +Result histories are maintained in the inferior LISP. + +@item +Does not create spurious symbols and handles case issues. + +@item +Online manuals for ILISP and Common LISP. + +@end itemize + +@node Installation, Starting up, Introduction, Top +@chapter How to install ILISP +@cindex Installation +Installation of ILISP and some initialization of your computing +environment are described in this chapter. Please read the following +sections carefully before getting started with ILISP. + +If ILISP has already been installed at your location, you can probably +skip ahead to ``Autoloading.'' + +Note that jwz's byte-compiler is required when compiling ILISP. If you +don't have it, get it from +@code{archive.cis.ohio-state.edu:/pub/gnu/emacs/elisp-archive/bytecomp2.tar.Z} + +You don't need it if you are running emacs version 19 as both the Fsf +and Lucid releases include this in their distributions. + +@menu +* Makefile configuration:: +* Files of ILISP:: +* Autoloading:: How to define autoload entries. +@end menu + +@node Makefile configuration, Files of ILISP, , Installation +@comment node-name, next, previous, up +@section Makefile configuration + +Some configuration needs to be done before compiling the emacs-lisp +files that comprise ILISP. This should be done in the +@code{Makefile-ilisp} file in the section of the file marked +CONFIGURATION SECTION. + +First, set the @code{YOUR_EMACS} variable to be the pathname of the +emacs you will be using ILISP with. This is the emacs that will be used +to compile ILISP with. + +If you don't have jwz's byte compiler in your standard load path then +you will have to uncomment the @code{BYTECOMP} line and set it to point +to the correct location of the bytecomp files. + +If you do not have comint already in your emacs ( both Fsf 19 and Lucid +19 do ) then uncomment the @code{USE_BUNDLED_COMINT} line. This will +cause the copy of @code{comint.el} to be moved from the @code{Extras} +directory into the main ILISP directory. + +The advice section is left uncommented out in the distributed +@code{Makefile-ilisp} because most people will not have +@code{advice.elc} in their load path. Only Lucid emacs 19.8 will have +this in the standard distribution. If you do have it in your load path, +then to avoid having two copies in your load-path and avoiding future +confusion then comment out both the @code{ADVICE} and +@code{USE_BUNDLED_ADVICE} lines. + +@cindex Compiling ILISP files +@cindex Byte-compiling ILISP files +@findex ilisp-compile-inits +@vindex ilisp-load-inits +@vindex ilisp-site-hook +@vindex ilisp-program +@vindex ilisp-init-binary-command +@vindex ilisp-init-binary-extension + +You can then compile everything with the shell command + + @code{make -f Makefile-ilisp <your target here>'} + +Where the possible targets are @code{emacs_18}, @code{emacs_18_epoch}, +@code{emacs_18_menu}, and @code{emacs_19}. + +Ignore any compilation warnings unless they result in ILISP not +compiling completely. + +You should then copy relevant sections of @code{ilisp.emacs} to your +@code{.emacs} or to the system-wide @code{default.el} file, depending on +who will be using ILISP. + +You should add the directory where all of the ILISP emacs-lisp files +reside to your @code{load-path}. There is an example of this in +@code{ilisp.emacs} + +The first time a dialect is started, the interface files will complain +about not being compiled, just hit @kbd{i} to ignore the message. Once +a lisp dialect is started up, you should execute the command +@code{ilisp-compile-inits} which will compile the @samp{*.lisp} files +and write them to the same directory as the ilisp files.@refill + +The binary files should have a unique +extension for each different combination of architecture and +LISP dialect. You will need to change +@code{ilisp-init-binary-extension} and +@code{ilisp-init-binary-command} to get additional +extensions. The binary for each different architecture +should be different. If you want to build the interface +files into a LISP world, you will also need to set +@code{ilisp-load-inits} to @code{nil} in the same place that +you change @code{ilisp-program} to load the LISP +world.@refill + + +There is an @code{ilisp-site-hook} for initializing site specific stuff +like program locations when ILISP is first loaded. You may want to +define appropriate autoloads in your system Emacs start up file. + +Example site init: +@example +;;; CMU site +(setq ilisp-site-hook + '(lambda () + (setq ilisp-motd "CMU ILISP V%s") + (setq expand-symlinks-rfs-exists t) + (setq allegro-program "/usr/misc/.allegro/bin/cl") + (setq lucid-program "/usr/misc/.lucid/bin/lisp"))) +@end example + + + +@node Files of ILISP, Autoloading, Makefile configuration, Installation +@section Files of ILISP +@cindex Files of ILISP +The files you need to use ilisp are: + +@table @file + +@item ilisp.emacs +File with sample @file{.emacs} code for ILISP. +@cindex @file{ilisp.emacs} + +@item symlink-fix.el +Expand pathnames resolving links. +@cindex @file{symlink-fix.el} + +@item completer.el +Partial completion code. +@cindex @file{completer.el} + +@item bridge.el +Process to process communication. +@cindex @file{bridge.el} + +@item comint.el +The basic comint abstraction. You only need this if running emacs-18. +@cindex @file{comint.el} + +@item comint-ipc.el +Extensions for sending commands and getting results. +@cindex @file{comint-ipc.el} + +@item ilisp-ext.el +Standalone lisp-mode extensions. +@cindex @file{ilisp-ext.el} + +@item ilisp-bug.el +ILISP bug submittal code. +@cindex @file{ilisp-bug.el} + +@item compat.el +Compatibility code between fsf-18, fsf-19 and lemacs-19. +@cindex @file{compat.el} + +@item ilisp-inp.el +Buffer input module. +@cindex @file{ilisp-inp.el} + +@item ilisp-def.el +Variable definitions. +@cindex @file{ilisp-def.el} + +@item ilisp-ind.el +Indentation code. +@cindex @file{ilisp-ind.el} + +@item ilisp-mov.el +Buffer-point movement code. +@cindex @file{ilisp-mov.el} + +@item ilisp-key.el +Keymap setups, including @code{ilisp-lispm-bindings}. +@cindex @file{ilisp-key.el} + +@item ilisp-doc.el +ILISP mode documenation. +@cindex @file{ilisp-doc.el} + +@item ilisp-mod.el +ILISP mode definition. +@cindex @file{ilisp-mod.el} + +@item ilisp-prn.el +Parenthesis handling. +@cindex @file{ilisp-prn.el} + +@item ilisp-el.el +Emacs-lisp additions. +@cindex @file{ilisp-el.el} + +@item ilisp-sym.el +ILISP symbol handling. +@cindex @file{ilisp-sym.el} + +@item ilisp-low.el +Low level interface code. +@cindex @file{ilisp-low.el} + +@item ilisp-hi.el +High level interface code. +@cindex @file{ilisp-hi.el} + +@item ilisp-out.el +Output handling, include typeout window (a popper replacement). +@cindex @file{ilisp-out.el} + +@item ilisp-prc.el +Process handling code. +@cindex @file{ilisp-prc.el} + +@item ilisp-val.el +Buffer value interface. +@cindex @file{ilisp-val.el} + +@item ilisp-rng.el +Match ring code. +@cindex @file{ilisp-rng.el} + +@item ilisp-utl.el +Misc. utilities. +@cindex @file{ilisp-utl.el} + +@item ilisp-hnd.el +Error handling. +@cindex @file{ilisp-hnd.el} + +@item ilisp-kil.el +Interface to reset/kill/abort inferior lisp. +@cindex @file{ilisp-kil.el} + +@item ilisp-snd.el +ilisp-send definitions and associated code. +@cindex @file{ilisp-snd.el} + +@item ilisp-cmt.el +Comint related code/setup. +@cindex @file{ilisp-cmt.el} + +@item ilisp-cmp.el +ILISP completer related code. +@cindex @file{ilisp-cmp.el} + +@item ilisp-xfr.el +Transfer between lisp <-> emacs code. +@cindex @file{ilisp-xfr.el } + +@item ilisp-cl.el +Commo-Lisp dialect definition. +@cindex @file{ilisp-cl.el} + +@item ilisp-src.el +ILISP source code module. +@cindex @file{ilisp-src.el} + +@item ilisp-bat.el +ILISP batch code module. +@cindex @file{ilisp-bat.el} + +@item ilisp.el +File to be loaded, loads in all necessary parts of ILISP. +@cindex @file{ilisp.el} + +@item *.lisp +ILISP support code. Each dialect will have one of these files. + +@item *.lcd +Package descriptors for the Lisp Code Directory. + +@item ilisp.texi +Texinfo file for ILISP. +@cindex @file{ilisp.texi} + +@end table + +@cindex @file{.el} files + +@node Autoloading, , Files of ILISP, Installation +@section How to define autoload entries +@cindex autoload definitions +@cindex defining autoloads +@cindex @file{.emacs} forms +A complete example of things you may want to add to your @code{.emacs} +can be found in the in the file @file{ilisp.emacs} in the +@code{ilisp-directory} what follows is that file. + + +@example +@c start of ilisp.emacs +;;; +;;; This file shows examples of some of the things you might want to +;;; do to install or customize ILISP. You may not want to include all +;;; of them in your .emacs. For example, the default key binding +;;; prefix for ILISP is C-z and this file changes the default prefix to +;;; C-c. For more information on things that can be changed, see the +;;; file ilisp.el. +;;; + +;;; If ilisp lives in some non-standard directory, you must tell emacs +;;; where to get it. This may or may not be necessary. +(setq load-path (cons (expand-file-name "~jones/emacs/ilisp/") load-path)) + +;;; If you always want partial minibuffer completion +(require 'completer) + +;;; If want TMC completion then you will have to Ftp it yourself from think.com +;;; It's become to flaky for me to deal with. -- Ivan +;;;(load "completion") +;;;(initialize-completions) + +;;; If you want to redefine typeout-window keys: +(add-hook 'ilisp-load-hook + '(lambda () + (define-key global-map "\C-c1" 'ilisp-bury-output) + (define-key global-map "\C-cv" 'ilisp-scroll-output) + (define-key global-map "\C-cg" 'ilisp-grow-output))) + + +(autoload 'run-ilisp "ilisp" "Select a new inferior LISP." t) +;;; Autoload based on your LISP. You only really need the one you use. +;;; If called with a prefix, you will be prompted for a buffer and +;;; program. +;;; +;;; [Back to the old way now -- Ivan Mon Jun 28 23:30:51 1993] +;;; +(autoload 'clisp "ilisp" "Inferior generic Common LISP." t) +(autoload 'allegro "ilisp" "Inferior Allegro Common LISP." t) +(autoload 'lucid "ilisp" "Inferior Lucid Common LISP." t) +(autoload 'cmulisp "ilisp" "Inferior CMU Common LISP." t) +(autoload 'kcl "ilisp" "Inferior Kyoto Common LISP." t) +(autoload 'akcl "ilisp" "Inferior Austin Kyoto Common LISP." t) +(autoload 'ibcl "ilisp" "Ibuki Common LISP." t) +(autoload 'scheme "ilisp" "Inferior generic Scheme." t) +(autoload 'oaklisp "ilisp" "Inferior Oaklisp Scheme." t) + +;;; Define where LISP programs are found. (This may already be done +;;; at your site.) +(setq allegro-program "/usr/misc/.allegro/bin/cl") +(setq lucid-program "/usr/misc/.lucid/bin/lisp") +(setq cmulisp-program "/usr/misc/.cmucl/bin/lisp") + +;;; If you run cmu-cl then set this to where your source files are. +(setq cmulisp-local-source-directory + "/usr/local/utils/CMU-CL/") + + +;;; This makes reading a lisp file load in ilisp. +(set-default 'auto-mode-alist + (append '(("\\.lisp$" . lisp-mode)) auto-mode-alist)) +(setq lisp-mode-hook '(lambda () (require 'ilisp))) + +;;; Sample load hook +(add-hook 'ilisp-load-hook + '(lambda () + ;; Change default key prefix to C-c + (setq ilisp-prefix "\C-c") + + ;; Define LispMachine-like key bindings, too. + (ilisp-lispm-bindings) + + ;; Sample initialization hook. Set the inferior LISP directory to + ;; the directory of the buffer that spawned it on the first prompt. + (setq ilisp-init-hook + '(lambda () + (default-directory-lisp ilisp-last-buffer))))) +@c end of ilisp.emacs +@end example + +@c ================================================================== +@node Starting up, Buffers of ILISP, Installation, Top +@chapter How to run a Lisp process using ILISP +@cindex Running lisp +@cindex Starting up lisp +@cindex Supported dialects +@cindex Dialects supported +@pindex run-ilisp +@pindex clisp +@pindex allegro +@pindex lucid +@pindex cmulisp +@pindex kcl +@pindex akcl +@pindex ibcl +@pindex scheme +@pindex oaklisp + +To start a Lisp use @kbd{M-x run-ilisp}, or a specific dialect like +@kbd{M-x allegro}. If called with a prefix you will be prompted for a +buffer name and a program to run. The default buffer name is the name +of the dialect. The default program for a dialect will be the value of +DIALECT-program or the value of ilisp-program inherited from a less +specific dialect. If there are multiple LISP's, use the dialect name or +@kbd{M-x select-ilisp} (@kbd{@key{C-z} S}) to select the current ILISP +buffer. + +Entry into ILISP mode runs the hooks on @code{comint-mode-hook} and +@code{ilisp-mode-hook} and then DIALECT-hooks specific to LISP +dialects in the nesting order above. Many dialects call +@code{ilisp-load-init} in their dialect setup. + +These are the currently supported dialects. The dialects +are listed so that the indentation correponds to the hierarchical +relationship between dialects. +@example + clisp + allegro + lucid + kcl + akcl + ibcl + cmulisp + scheme + oaklisp +@end example + +If anyone figures out support for other dialects I would be happy +to include it in future releases. @xref{Dialects}. + +To define a new dialect, @xref{Defining new dialects} and @xref{Customization}. + + +@node Buffers of ILISP, ILISP Commands, Starting up, Top +@chapter Buffers used by ILISP, and their commands +@cindex buffers of ILISP +@cindex ILISP buffers +@table @code + +@item *@var{dialect}* +The Lisp listener buffer. Forms can be entered in this buffer in, and +they will be sent to lisp when you hit return if the form is complete. +This buffer is in ilisp-mode, which is built on top of comint-mode, and +all comint commands such as history mechanism and job control are +available. +@c xref.. + +@item @var{lisp-mode-buffers} +A buffer is assumed to contain Lisp source code if its major mode is in +the list @code{lisp-source-modes}. If it's loaded into a buffer that is +in one of these major modes, it's considered a lisp source file by +@code{find-file-lisp}, @code{load-file-lisp} and +@code{compile-file-lisp}. +Used by these commands to determine defaults.@refill + +@item @code{*Completions*} +@cindex @code{*Completions*} buffer +Used for listing completions of symbols or files by the completion commands. +@xref{Completion}. + +@item *Aborted Commands* +@cindex @code{*Aborted Commands*} buffer +@xref{Interrupts}. + +@item *Errors* +@itemx *Output* +@itemx *Error Output* +@cindex @code{*Error Output*} buffer +@cindex @code{*Errors*} buffer +@cindex @code{*Output*} buffer +used to pop-up results and errors from the inferior LISP. + +@item *ilisp-send* +@cindex @code{*ilisp-send*} buffer +Buffer containing the last form sent to the inferior LISP. + +@item *Edit-Definitions* +@itemx *All-Callers* +@cindex @code{*Edit-Definitions*} buffer +@cindex @code{*All-Callers*} buffer +@xref{Source code commands}. + +@item *Last-Changes* +@itemx *Changed-Definitions* +@cindex @code{*Last-Changes*} buffer +@cindex @code{*Changed-Definitions*} buffer +@xref{Batch commands}. +@end table + +@menu +* Typeout windows:: temporary windows used for display. +* Switching buffers:: Switching buffers +@end menu + +@node Typeout windows, Switching buffers, , Buffers of ILISP +@section Typeout windows +@cindex Typeout windows + +All ILISP output is funneled through the function which is bound to +the hook @code{ilisp-display-output-function}. The function gets +a single argument, a string, and should make that output visible to +the user somehow. + +One possible choice for output display is +@code{ilisp-display-output-in-typeout-window}, +which pops up a window at the top of the current screen which is +just large enough to display the output. This window can be +"remote controlled" by the commands @code{ilisp-scroll-output}, +@code{ilisp-bury-output}, and @code{ilisp-grow-output}. + +Unlike the old popper facility, the ilisp typeout window facility +does not trounce on any existing Emacs functions or on any common +key bindings, like @kbd{C-x o}. + +Other built-in functions which might be useful as values for +@code{ilisp-display-output-function} include +@code{ilisp-display-output-default}, +@code{ilisp-display-output-adaptively}, +@code{ilisp-display-output-in-lisp-listener}, +@code{ilisp-display-output-in-temp-buffer}, and +@code{ilisp-display-output-in-typeout-window}. + +The default display function is @code{ilisp-display-output-default}, +which obeys the @code{lisp-no-popper} variable. + +Users are encouraged to write their own output display functions +to get the exact desired behavior, displaying on a private emacs +screen, in a pop-up dialog box, or whetever. + + +@table @kbd + +@item @key{C-z} 1 (ilisp-bury-output) +deletes and buries the typeout output window. +@kindex C-z 1 +@pindex ilisp-bury-output +@cindex bury output window + + +@item @key{C-z} v (ilisp-scroll-output) +scrolls the output window if it is showing, otherwise does nothing. +If it is called with a negative prefix, it will scroll backwards. +@cindex scrolling output +@pindex ilisp-scroll-output +@kindex C-z v + +@item @key{C-z} G (ilisp-grow-output) +will grow the output window if showing by the prefix number of lines. +@cindex grow output window +@pindex ilisp-grow-output +@kindex C-z G + +@end table + +An alternative to typeout windows is to always have the inferior LISP +buffer visible and have all output go there. Setting +@code{lisp-no-popper} to @code{t} will cause all output to go to the +inferior LISP buffer. Setting @code{lisp-no-popper} to @code{'message} +will make output of one line go to the message window. Setting +@code{comint-always-scroll} to @code{t} will cause process output to +always be visible. If a command gets an error, you will be left in the +break loop.@refill + +@cindex Turning off typeout windows +@vindex comint-always-scroll +@vindex lisp-no-popper + + + +@node Switching buffers, ,Typeout windows, Buffers of ILISP +@section Switching buffers + +Commands to make switching between buffers easier. +@cindex Switching buffers + +@table @kbd +@item @key{C-z} b (switch-to-lisp) +@kindex @key{C-z} b +@pindex switch-to-lisp +will pop to the current ILISP buffer or if already in an ILISP buffer, +it will return to the buffer that last switched to an ILISP buffer. +With a prefix, it will also go to the end of the buffer. If you do not +want it to pop, set @code{pop-up-windows} to nil. +@vindex pop-up-windows + + +@item M-C-l (previous-buffer-lisp) +will switch to the last visited buffer in the current window or the Nth +previous buffer with a prefix. +@cindex Previous lisp buffer +@pindex previous-buffer-lisp +@kindex M-C-l + +@end table + + +@node ILISP Commands, Customization, Buffers of ILISP, Top +@chapter ILISP Commands + + +Most of these key bindings work in both Lisp Mode and ILISP mode. +There are a few additional and-go bindings found in Lisp Mode. + + +@menu +* Eval and compile functions:: +* Documentation functions:: +* Macroexpansion:: +* Tracing functions:: +* Package Commands:: +* Source code commands:: Working on several files +* Batch commands:: Grouping changes for eval/compile +* Files and directories:: +* Keyboard modes:: Interactive and raw keyboard modes +* Interrupts:: Interrupts, aborts, and errors +* Command history:: +* Completion:: +* Miscellany:: Indentation, parenthesis balancing, + and comment commands. +@end menu + +@node Eval and compile functions, Documentation functions, , ILISP Commands +@section Eval and compile functions +@cindex Eval/compile commands +@cindex Compile/eval commands + +In LISP, the major unit of interest is a form, which is anything between +two matching parentheses. Some of the commands here also refer to +``defun,'' which is a list that starts at the left margin in a LISP +buffer, or after a prompt in the ILISP buffer. These commands refer to +the ``defun'' that contains the point. +@cindex Defun + +``A call'' refers to a reference to a function call for a function or +macro, or a reference to a variable. Commands which ``insert a call'' +in the ILISP buffer will bring up the last command which matches it or +else will insert a template for a call. +@cindex Call + +When an eval is done of a single form matching @code{ilisp-defvar-regexp} +the corresponding symbol will be unbound and the value assigned again. +@vindex ilisp-defvar-regexp + +When you send a form to LISP, the status light will reflect the +progress of the command. In a lisp mode buffer the light will reflect +the status of the currently selected inferior LISP unless +@code{lisp-show-status} is nil. If you want to find out what command is +currently running, use the command @kbd{@key{C-z} s} (status-lisp). +If you call it with a prefix, the pending commands will be displayed as +well.@refill +@cindex Currently running command +@cindex Displaying commands +@pindex status-lisp +@kindex @key{C-z} s +@vindex lisp-show-status +@cindex Status light +@cindex Modeline status + +Note that in this table as elsewhere, the key @key{C-z} (ilisp-prefix) +is used as a prefix character for ILISP commands, though this may be +changed. +@kindex @key{C-z} prefix +@vindex ilisp-prefix +@c xref .. custom? or autoload? +For a full list of key-bindings, use @kbd{M-x describe-mode} or +@kbd{M-x describe-bindings} while in an ILISP-mode buffer.@refill +@cindex Listing bindings +@cindex Describing bindings + + +The eval/compile commands verify that their expressions are balanced and +then send the form to the inferior LISP. If called with a positive +prefix, the result of the operation will be inserted into the buffer +after the form that was just sent. +@cindex Inserting results + +For commands which operate on a region, the result of the compile or eval +is the last form in the region. +@cindex Region commands + +The @samp{and-go} versions will perform the operation and then +immediately switch to the ILISP buffer where you will see the results of +executing your form. If @code{eval-defun-and-go-lisp} or +@code{compile-defun-and-go-lisp} is called with a prefix, a call for the +form will be inserted as well.@refill +@cindex Inserting calls +@pindex compile-defun-and-go-lisp +@pindex eval-defun-and-go-lisp +@cindex @samp{and-go} functions + +@table @kbd + +@item @key{C-z} +The prefix-key for most ILISP commands. This can be changed by setting +the variable @code{ilisp-prefix}. +@c xref custom? + +@item RET (return-ilisp) +In ILISP-mode buffer, sends the current form to lisp if complete, +otherwise creates a new line and indents. If you edit old input, the +input will be copied to the end of the buffer first and then sent. +@cindex Sending input to lisp +@pindex return-ilisp +@kindex RET + +@item C-] (close-and-send-lisp) +Closes the current sexp, indents it, and then sends it to the current +inferior LISP. +@pindex close-and-send-lisp +@kindex C-] + +@item LFD (newline-and-indent-lisp) +Insert a new line and then indent to the appropriate level. If called +at the end of the inferior LISP buffer and an sexp, the sexp will be +sent to the inferior LISP without a trailing newline. +@pindex newline-and-indent-lisp +@kindex LFD + +@item @key{C-z} e (eval-defun-lisp) +@itemx M-C-x (eval-defun-lisp) +@itemx @key{C-z} C-e (eval-defun-and-go-lisp) +@kindex M-C-x +@kindex @key{C-z} e +@kindex @key{C-z} C-e +Send the defun to lisp. +@pindex eval-defun-and-go-lisp +@pindex eval-defun-lisp + +@item @key{C-z} r (eval-region-lisp) +@itemx @key{C-z} C-r (eval-region-and-go-lisp) +@kindex @key{C-z} r +@pindex eval-region-lisp +@kindex @key{C-z} C-r +@pindex eval-region-and-go-lisp +@cindex Eval region + +@item @key{C-z} n (eval-next-sexp-lisp) +@itemx @key{C-z} C-n (eval-next-sexp-and-go-lisp) +@kindex @key{C-z} n +@pindex eval-next-sexp-lisp +@kindex @key{C-z} C-n +@pindex eval-next-sexp-and-go-lisp + +@item @key{C-z} c (compile-defun-lisp) +@kindex @key{C-z} c +@pindex compile-defun-lisp +@item @key{C-z} C-c (compile-defun-lisp-and-go) +@kindex @key{C-z} C-c +When @code{compile-defun-lisp} is called in an inferior LISP buffer with +no current form, the last form typed to the top-level will be compiled. +@cindex Compile last form +@pindex compile-defun-lisp-and-go + +@item @key{C-z} w (compile-region-lisp) +@itemx @key{C-z} C-w (compile-region-and-go-lisp) +@kindex @key{C-z} w +@pindex compile-region-lisp +@kindex @key{C-z} C-w +@pindex compile-region-and-go-lisp +@cindex Compile region + +@end table + + +If any of the forms contain an interactive command, then the command +will never return. To get out of this state, you need to use +@code{abort-commands-lisp} (@kbd{@key{C-z} g}). If @code{lisp-wait-p} +is t, then EMACS will display the result of the command in the +minibuffer or a pop-up window. If @code{lisp-wait-p} is @code{nil}, +(the default) the send is done asynchronously and the results will be +brought up only if there is more than one line or there is an error. In +this case, you will be given the option of ignoring the error, keeping +it in another buffer or keeping it and aborting all pending sends. If +there is not a command already running in the inferior LISP, you can +preserve the break loop. If called with a negative prefix, the sense of +@code{lisp-wait-p} will be inverted for the next command. +@c @cindex Aborting commands +@vindex lisp-wait-p +@kindex @key{C-z} g +@pindex abort-commands-lisp + + + +@node Documentation functions, Macroexpansion, Eval and compile functions, ILISP Commands +@section Documentation functions + +@code{describe-lisp}, @code{inspect-lisp}, @code{arglist-lisp}, and +@code{documentation-lisp} switch whether they prompt for a response or +use a default when called with a negative prefix. If they are +prompting, there is completion through the inferior LISP by using +@kbd{TAB} or @kbd{M-TAB}. When entering an expression in the +minibuffer, all of the normal ilisp commands like @code{arglist-lisp} +also work.@refill +@cindex Arglist lisp +@cindex Describing lisp objects +@kindex @key{M-TAB} +@kindex @key{TAB} +@cindex Negative prefix +@cindex Minibuffer completion +@pindex documentation-lisp +@pindex arglist-lisp +@pindex describe-lisp +@pindex inspect-lisp +@cindex Documentation Functions + +Commands that work on a function will use the nearest previous function +symbol. This is either a symbol after a @samp{#'} or the symbol at the +start of the current list. + +@table @code + +@item @key{C-z} a (arglist-lisp) +@kindex @key{C-z} a +Return the arglist of the current function. With a numeric prefix, the +leading paren will be removed and the arglist will be inserted into the +buffer. + +@item @key{C-z} d (documentation-lisp) +@kindex @key{C-z} d +Infers whether function or variable documentation is desired. With a +negative prefix, you can specify the type of documentation as well. +With a positive prefix the documentation of the current function call is +inserted into the buffer. + +@item @key{C-z} i (describe-lisp) +@kindex @key{C-z} i +Describe the previous sexp (it is evaluated). If there is no previous +sexp and if called from inside an ILISP buffer, the previous result will +be described. + +@item @key{C-z} i (describe-lisp) +@kindex @key{C-z} i +Describe the previous sexp (it is evaluated). If there is no previous +sexp and if called from inside an ILISP buffer, the previous result will +be described. + +@item @key{C-z} I (inspect-lisp) +@kindex @key{C-z} I +Switch to the current inferor LISP and inspect the previous sexp (it is +evaluated). If there is no previous sexp and if called from inside an +ILISP buffer, the previous result will be inspected. + +@item @key{C-z} D (fi:clman) +@itemx @key{C-z} A (fi:clman-apropos) +@kindex @key{C-z} D +@pindex fi:clman +@kindex @key{C-z} A +@pindex fi:clman-apropos +If the Franz online Common LISP manual is available, get information on +a specific symbol. @code{fi:clman-apropos} will get information apropos +a specific string. Some of the documentation is specific to the allegro +dialect, but most of it is for standard Common LISP. +@cindex Apropos help +@cindex Common Lisp manual +@cindex Franz manual + +@end table + + +@node Macroexpansion, Tracing functions, Documentation functions, ILISP Commands +@section Macroexpansion + +@table @kbd +@item @key{C-z} M (macroexpand-lisp) +@itemx @key{C-z} m (macroexpand-1-lisp) +@kindex @key{C-z} M +@pindex macroexpand-lisp +@kindex @key{C-z} m +@pindex macroexpand-1-lisp +These commands apply to the next sexp. If called with a positive +numeric prefix, the result of the macroexpansion will be inserted into +the buffer. With a negative prefix, prompts for expression to expand. +@cindex Expanding macro forms +@cindex Macroexpansion + + +@end table + +@node Tracing functions, Package Commands, Macroexpansion, ILISP Commands +@section Tracing functions + +@table @kbd +@item @key{C-z} t (trace-defun-lisp) +@kindex @key{C-z} t +@pindex trace-defun-lisp +@cindex Tracing defuns +@cindex Untracing defuns +traces the current defun. When called with a numeric prefix the +function will be untraced. When called with negative prefix, prompts +for function to be traced. +@end table + +@node Package Commands, Source code commands, Tracing functions, ILISP Commands +@section Package Commands +@cindex Package commands + +The first time an inferior LISP mode command is executed in a Lisp Mode +buffer, the package will be determined by using the regular expression +@code{ilisp-package-regexp} to find a package sexp and then passing that +sexp to the inferior LISP through @code{ilisp-package-command}. +For the @samp{clisp} dialect, this will find the first @code{(in-package +PACKAGE)} form in the file. +A buffer's package will be displayed in the mode line. +If a buffer has no +specification, forms will be evaluated in the current inferior LISP +package.@refill + +Buffer package caching can be turned off by setting the variable +@code{lisp-dont-cache-package} to @code{T}. This will force ILISP to +search for the closest previous @code{ilisp-package-regexp} in the +buffer each time an inferior LISP mode command is executed. +@cindex Buffer package +@cindex Buffer package caching +@vindex lisp-dont-cache-package +@vindex ilisp-package-regexp +@findex ilisp-package-command +@cindex In-package form + +@table @code + +@item @key{C-z} p (package-lisp) +@kindex @key{C-z} p +@pindex package-lisp +@cindex Show current package +Show the current package of the inferior LISP. + +@item @key{C-z} P (set-package-lisp) +@kindex @key{C-z} P +@pindex set-package-lisp +Set the inferior LISP package to the current buffer's package or with a +prefix to a manually entered package. + +@item M-x set-buffer-package-lisp +@kindex M-x set-buffer-package-lisp +@cindex Set buffer package +@pindex set-buffer-package-lisp +Set the buffer's package from the buffer. If it is called with a +prefix, the package can be set manually. + +@end table + +@node Source code commands, Batch commands, Package Commands, ILISP Commands +@section Source Code Commands +@cindex Source Code Commands +@cindex Finding source + +The following commands all deal with finding things in source code. +The first time that one of these commands is used, there may be some +delay while the source module is loaded. When searching files, the +first applicable rule is used: +@itemize @bullet +@item +try the inferior LISP, +@item +try a tags file if defined, +@item +try all buffers in one of @code{lisp-source-modes} or all files +defined using @code{lisp-directory}.@refill +@pindex lisp-directory +@vindex lisp-source-modes +@end itemize + +@code{M-x lisp-directory} defines a set of files to be +searched by the source code commands. It prompts for a directory and +sets the source files to be those in the directory that match entries +in @code{auto-mode-alist} for modes in @code{lisp-source-modes}. +With a positive +prefix, the files are appended. With a negative prefix, all current +buffers that are in one of @code{lisp-source-modes} will be searched. This +is also what happens by default. Using this command stops using a +tags file.@refill +@cindex Source modes +@vindex auto-mode-alist +@kindex M-x lisp-directory + +@code{edit-definitions-lisp}, @code{who-calls-lisp}, and +@code{edit-callers-lisp} will switch whether they prompt for a response +or use a default when called with a negative prefix. If they are +prompting, there is completion through the inferior LISP by using +@kbd{TAB} or @kbd{M-TAB}. When entering an expression in the +minibuffer, all of the normal ILISP commands like @kbd{arglist-lisp} +also work.@refill +@pindex edit-callers-lisp +@pindex who-calls-lisp +@pindex edit-definitions-lisp + +@code{edit-definitions-lisp} (@kbd{M-.}) will find a +particular type of definition for a symbol. It tries to use the rules +described above. The files to be searched are listed in the buffer +@code{*Edit-Definitions*}. If @code{lisp-edit-files} is nil, no search will be +done if not found through the inferior LISP. The variable +@code{ilisp-locator} contains a function that when given the name and type +should be able to find the appropriate definition in the file. There +is often a flag to cause your LISP to record source files that you +will need to set in the initialization file for your LISP. The +variable is @code{*record-source-files*} in both allegro and lucid. Once a +definition has been found, @code{next-definition-lisp} +(@kbd{M-,}) will find the next definition +(or the previous definition with a prefix).@refill +@pindex next-definition-lisp +@vindex *record-source-files* +@vindex ilisp-locator +@vindex lisp-edit-files +@cindex @code{*Edit-Definitions*} buffer +@kindex M-. + +@code{edit-callers-lisp} (@kbd{@key{C-z} ^}) will generate a list of all +of the callers of a function in the current inferior LISP and edit the +first caller using @code{edit-definitions-lisp}. Each successive call to +@code{next-caller-lisp} (@kbd{M-`}) will edit the next caller +(or the previous caller with a prefix). The list is stored in the +buffer @code{*All-Callers*}. You can also look at the callers by doing +@kbd{M-x who-calls-lisp}.@refill +@cindex List callers +@cindex Find callers +@cindex @code{*All-Callers*} buffer +@kindex M-x who-calls-lisp +@kindex M-` +@pindex next-caller-lisp +@kindex @key{C-z} ^ +@pindex edit-callers-lisp + +@code{search-lisp} (@kbd{M-?}) will search the current tags files, +@code{lisp-directory} files or buffers in one of @code{lisp-source-modes} for a +string or a regular expression when called with a prefix. +@code{next-definition-lisp} (@kbd{M-,}) will find the next definition +(or the previous definition with a prefix).@refill +@cindex Next definition +@cindex Previous definition +@kindex M-, +@pindex next-definition-lisp +@kindex M-? +@pindex search-lisp + +@code{replace-lisp} (@kbd{M-"}) will replace a string (or a regexp with +a prefix) in the current tags files, @code{lisp-directory} files or +buffers in one of @code{lisp-source-modes}.@refill +@cindex Replace lisp +@kindex M-" +@pindex replace-lisp + + +Here is a summary of the above commands (behavior when given prefix +argument is given in parentheses): + +@table @code +@item M-x lisp-directory +Define a set of files to be used by the source code commands. + +@item M-. (edit-definitions-lisp) +Find definition of a symbol. + +@item M-, (next-definition-lisp) +Find next (previous) definition. + +@item @key{C-z} ^ (edit-callers-lisp) +Find all callers of a function, and edit the first. + +@item M-` (next-caller-lisp) +Edit next (previous) caller of function set by @code{edit-callers-lisp}. + +@item M-x who-calls-lisp +List all the callers of a function. + + +@item M-? (search-lisp) +Search for string (regular expression) in current tags, +@code{lisp-directory} files or buffers. Use @code{next-definition-lisp} +to find next occurence. + +@item M-" (replace-lisp) +Replace a string (regular expression) in files. + +@end table + + +@node Batch commands, Files and directories, Source code commands, ILISP Commands +@section Batch commands + + +The following commands all deal with making a number of changes all at +once. The first time one of these commands is used, there may be some +delay as the module is loaded. The eval/compile versions of these +commands are always executed asynchronously. +@cindex Group changes +@cindex File changes +@cindex Change commands + +@code{mark-change-lisp} (@kbd{@key{C-z} SPC}) marks the current defun as +being changed. A prefix causes it to be unmarked. @code{clear-changes-lisp} +(@kbd{@key{C-z} * 0}) will clear all of the changes. +@code{list-changes-lisp} (@kbd{@key{C-z} * l}) will show the forms +currently marked.@refill +@cindex Marking changes +@cindex Clearing changes +@cindex Listing changes +@kindex @key{C-z} * l +@kindex @key{C-z} * 0 +@kindex @key{C-z} SPC +@pindex list-changes-lisp +@pindex clear-changes-lisp +@pindex mark-change-lisp + +@code{eval-changes-lisp} (@kbd{@key{C-z} * e}), or +@code{compile-changes-lisp} (@kbd{@key{C-z} * c}) will +evaluate or compile these changes as appropriate. +If called with a positive prefix, the changes will be kept. +If there is an error, the process will stop and show the error +and all remaining changes will remain in the list. All of the results +will be kept in the buffer @code{*Last-Changes*}.@refill +@cindex Eval'ing changes +@cindex Compiling changes +@cindex @code{*Last-Changes*} buffer +@kindex @key{C-z} * e +@kindex @key{C-z} * c +@pindex compile-changes-lisp +@pindex eval-changes-lisp + +@noindent +Summary: + +@table @code +@item @key{C-z} SPC (mark-change-lisp) +Mark (unmark) current defun as changed. +@item @key{C-z} * e (eval-changes-lisp) +@itemx @key{C-z} * c (compile-changes-lisp) +Call with a positive prefix to keep changes. +@item @key{C-z} * 0 (clear-changes-lisp) +@item @key{C-z} * l (list-changes-lisp) +@end table + + +@node Files and directories, Keyboard modes, Batch commands, ILISP Commands +@section Files and directories + +@cindex Files and directories +@cindex Directories and files +@cindex Current directory +File commands in lisp-source-mode buffers keep track of the last used +directory and file. If the point is on a string, that will be the +default if the file exists. If the buffer is one of +@code{lisp-source-modes}, the buffer file will be the default. Otherwise, +the last file used in a lisp-source-mode will be used. + + +@table @kbd +@item C-x C-f (find-file-lisp) +@kindex C-x C-f +@cindex Find file +@cindex Lisp find file +@cindex Symbolic link expansion +@pindex find-file-lisp +will find a file. If it is in a string, that will be used as the +default if it matches an existing file. Symbolic links are expanded so +that different references to the same file will end up with the same +buffer. + +@item @key{C-z} l (load-file-lisp) +@kindex @key{C-z} l +will load a file into the inferior LISP. You will be given the +opportunity to save the buffer if it has changed and to compile the file +if the compiled version is older than the current version. +@pindex load-file-lisp +@cindex Loading files + +@item @key{C-z} k (compile-file-lisp) +@kindex @key{C-z} k +will compile a file in the current inferior LISP. +@pindex compile-file-lisp +@cindex Compiling files + +@item @key{C-z} ! (default-directory-lisp) +@kindex @key{C-z} ! +sets the default inferior LISP directory to the directory of the current +buffer. If called in an inferior LISP buffer, it sets the Emacs +@code{default-directory} to the LISP default directory. +@vindex default-directory +@cindex Default directory +@cindex Set default directory +@pindex default-directory-lisp + +@end table + +@node Keyboard modes, Interrupts, Files and directories, ILISP Commands +@section Switching between interactive and raw keyboard modes + +@cindex Raw keyboard mode +@cindex Interactive keyboard mode +@vindex ilisp-raw-echo + +There are two keyboard modes for interacting with the inferior LISP, +\"interactive\" and \"raw\". Normally you are in interactive mode +where keys are interpreted as commands to EMACS and nothing is sent to +the inferior LISP unless a specific command does so. In raw mode, all +characters are passed directly to the inferior LISP without any +interpretation as EMACS commands. Keys will not be echoed unless +ilisp-raw-echo is T. + +@pindex raw-keys-ilisp +@kindex @key{C-z} # +@pindex io-bridge-ilisp +@kindex M-x io-bridge-ilisp + +Raw mode can be turned on interactively by the command +@code{raw-keys-ilisp} (@kbd{@key{C-z} #}) and will continue until you +type @key{C-g}. Raw mode can also be turned on/off by inferior LISP +functions if the command @code{io-bridge-ilisp} (M-x io-bridge-ilisp) +has been executed in the inferior LISP either interactively or on a +hook. To turn on raw mode, a function should print ^[1^] and to turn +it off should print ^[0^]. An example in Common LISP would be: + +@code{(progn (format t "1") (print (read-char)) (format t "0"))} + +@node Interrupts, Command history, Keyboard modes, ILISP Commands +@section Interrupts, aborts, and errors + + +If you want to abort the last command you can use @kbd{C-g}. +@kindex C-g +@cindex Errors +@cindex Aborting commands +@cindex Interrupting commands + +If you want to abort all commands, you should use the command +@code{abort-commands-lisp} (@kbd{@key{C-z} g}). Commands that are +aborted will be put in the buffer @code{*Aborted Commands*} so that +you can see what was aborted. If you want to abort the currently +running top-level command, use @code{interrupt-subjob-ilisp} (@kbd{C-c +C-c}). As a last resort, @kbd{M-x panic-lisp} will reset the ILISP +state without affecting the inferior LISP so that you can see what is +happening. + +@pindex interrupt-subjob-ilisp +@cindex @code{*Aborted Commands*} buffer +@kindex @key{C-z} g +@pindex abort-commands-lisp +@pindex panic-lisp + +@code{delete-char-or-pop-ilisp} (@kbd{C-d}) will delete +prefix characters unless you are at the end of an ILISP buffer in +which case it will pop one level in the break loop. +@cindex Pop in break loop +@cindex Break loop +@kindex C-d +@pindex delete-char-or-pop-ilisp + +@code{reset-ilisp}, (@kbd{@key{C-z} z}) will reset the current inferior +LISP's top-level so that it will no longer be in a break loop. +@cindex Resetting lisp +@cindex Top-level, return to +@kindex @key{C-z} z +@pindex reset-ilisp + + +Summary: + +@table @kbd +@item C-c C-c (interrupt-subjob-ilisp) +Send a keyboard interrupt signal to lisp. +@item @key{C-z} g (abort-commands-lisp) +Abort all running or unsent commands. +@item M-x panic-lisp (panic-lisp) +Reset the ILISP process state. +@item @key{C-z} z (reset-ilisp) +Reset lisp to top-level. +@item C-d (delete-char-or-pop-ilisp) +If at end of buffer, pop a level in break loop. + +@end table + +@c duplicated from eval section. +If @code{lisp-wait-p} is @code{nil} (the default), +all sends are done asynchronously and the results will be +brought up only if there is more than one line or there is an error. +In case, you will be given the option of ignoring the error, keeping +it in another buffer or keeping it and aborting all pending sends. +If there is not a command already running in the inferior LISP, you can +preserve the break loop. If called with a negative prefix, the sense of +@code{lisp-wait-p} will be inverted for the next command. +@vindex lisp-wait-p + + + +@node Command history, Completion, Interrupts, ILISP Commands +@section Command history +@cindex Command history +@cindex Last command +@cindex Previous commands + +ILISP mode is built on top of @code{comint-mode}, the general +command-interpreter-in-a-buffer mode. As such, it inherits many +commands and features from this, including a command history mechanism. +@cindex @code{comint-mode} + +Each ILISP buffer has a command history associated with it. Commands +that do not match @code{ilisp-filter-regexp} and that are longer than +@code{ilisp-filter-length} and that do not match the immediately prior +command will be added to this history. +@vindex ilisp-filter-length +@vindex ilisp-filter-regexp + +@table @kbd + +@item M-n (comint-next-input) +@itemx M-p (comint-previous-input) +@kindex M-n +@pindex comint-next-input +@cindex Next input +@kindex M-p +@pindex comint-previous-input +Cycle through the input history. + +@item M-s (comint-previous-similar-input) +@kindex M-s +@pindex comint-previous-similar-input +@cindex Similar input +Cycle through input that has the string typed so far as a prefix. + +@item M-N (comint-psearch-input) +@kindex M-N +@pindex comint-psearch-input +@cindex Search input +@cindex Input search +Search forwards for prompt. +@item M-P (comint-msearch-input) +@kindex M-P +@pindex comint-msearch-input +Search backwards for prompt. + +@item C-c R (comint-msearch-input-matching) +@kindex C-c R +@pindex comint-msearch-input-matching +Search backwards for occurrence of prompt followed by string which is prompted +for (@emph{not} a regular expression). +@end table + +See @code{comint-mode} documentation for more information on +@samp{comint} commands. + + +@node Completion, Miscellany, Command history, ILISP Commands +@section Completion + +Commands to reduce number of keystrokes. +@cindex Completion +@cindex Partial completion +@cindex Filename completion + +@table @kbd +@item M-TAB (complete-lisp) +@kindex M-TAB +@pindex complete-lisp +@vindex ilisp-prefix-match +will try to complete the previous symbol in the current inferior LISP. +Partial completion is supported unless @code{ilisp-prefix-match} is set to @code{t}. +(If you set it to @code{t}, inferior LISP completions will be faster.) +With partial completion, @samp{p--n} would complete to +@samp{position-if-not} in Common LISP. +If the symbol follows a left paren or a @samp{#'}, only symbols with +function cells will be considered. +If the symbol starts with a @samp{*} or you call with a +positive prefix all possible completions will be considered. +Only external symbols are considered if there is a package qualification +with only one colon. +The first time you try to complete a string the longest common substring +will be inserted and the cursor will be left +on the point of ambiguity. +If you try to complete again, you can see the possible completions. +If you are in a string, then filename completion will be done instead. +And if you try to complete a filename twice, you will see a list of +possible completions. +Filename components are completed individually, so @samp{/u/mi/} could +expand to @samp{/usr/misc/}. +If you complete with a negative +prefix, the most recent completion (symbol or filename) will be undone.@refill + + +@item M-RET (complete) +@kindex M-RET +@pindex complete +@cindex TMC completion +will complete the current symbol to the most recently seen symbol in +Emacs that matches what you have typed so far. Executing it repeatedly +will cycle through potential matches. This is from the TMC completion +package and there may be some delay as it is initially loaded. + +@end table + +@node Miscellany, , Completion, ILISP Commands +@section Miscellany + +Indentation, parenthesis balancing, and comment commands. + +@table @kbd + +@item @kbd{TAB} (indent-line-ilisp) +@kindex @kbd{TAB} +indents for LISP. With prefix, shifts rest of expression rigidly with +the current line. +@pindex indent-line-ilisp +@cindex Indentation +@cindex Rigid indentation + + +@item M-C-q (indent-sexp-ilisp) +@kindex M-C-q +will indent each line in the next sexp. +@pindex indent-sexp-ilisp + +@item M-q (reindent-lisp) +@kindex M-q +will reindent the current paragraph if in a comment or string. +Otherwise it will close the containing defun and reindent it. +@pindex reindent-lisp +@cindex Reindent lisp + +@item @key{C-z} ; (comment-region-lisp) +@kindex @key{C-z} ; +will put prefix copies of @code{comment-start} before and +@code{comment-end}'s after the lines in region. To uncomment a region, +use a minus prefix.@refill +@pindex comment-region-lisp +@cindex Comment region +@cindex Uncomment region + +@item @key{C-z} ) (find-unbalanced-lisp) +@kindex @key{C-z} ) +will find unbalanced parens in the current buffer. When called with a +prefix it will look in the current region. +@pindex find-unbalanced-lisp +@cindex Find unbalanced parens +@cindex Parenthesis balancing + +@item ] (close-all-lisp) +@kindex ] +will close all outstanding parens back to the containing form, or a +previous left bracket which will be converted to a left parens. If +there are too many parens, they will be deleted unless there is text +between the last paren and the end of the defun. If called with a +prefix, all open left brackets will be closed. +@pindex close-all-lisp +@cindex Close all parens +@cindex Close brackets + +@end table + + +@node Customization, Dialects, ILISP Commands, Top +@chapter ILISP Customization + +@c = = = = = = = = = = = = = = = = = = = = = = = = +@c this refers to hierarchiy, which isn't shown here. +@cindex Customization +@cindex Hooks +@cindex Dialect startup + + +Starting a dialect runs the hooks on @code{comint-mode-hook} +and @code{ilisp-mode-hook} and then @var{DIALECT}@code{-hooks} specific +to dialects in the nesting order below. +@vindex ilisp-mode-hook +@vindex comint-mode-hook +@example + clisp + allegro + lucid + kcl + akcl + ibcl + cmulisp + scheme + oaklisp +@end example + +On the very first prompt in the inferior LISP, +the hooks on @code{ilisp-init-hook} are run. For more information on +creating a new dialect or variables to set in hooks, see @file{ilisp.el}. +@cindex First prompt +@vindex ilisp-init-hook + + + +@c -> -> -> -> -> -> -> -> -> -> -> plenty of indexing here +@c put these in a table for later expandment +@c + +ILISP Mode Hooks: +@cindex ILISP Mode Hooks +@table @code +@item ilisp-site-hook +@vindex ilisp-site-hook +Executed when file is loaded +@item ilisp-load-hook +@vindex ilisp-load-hook +Executed when file is loaded +@item ilisp-mode-hook +@vindex ilisp-mode-hook +Executed when an ilisp buffer is created +@item ilisp-init-hook +@vindex ilisp-init-hook +Executed after inferior LISP is initialized and the first prompt is +seen. +@item @var{DIALECT}-hook +@vindex @var{DIALECT}-hook +Executed when dialect is set +@end table + +Variables you might want to set in a hook or dialect: +@table @code +@item ilisp-prefix +@vindex ilisp-prefix +Keys to prefix ilisp key bindings +@item ilisp-program +@vindex ilisp-program +Program to start for inferior LISP +@item ilisp-motd +@vindex ilisp-motd +String printed on startup with version +@item lisp-wait-p +@vindex lisp-wait-p +Set to T for synchronous sends +@item ilisp-handle-errors +@vindex ilisp-handle-errors +Set to T for ilisp to handle errors from the underlying lisp. +@item ilisp-display-output-function +@vindex ilisp-display-output-function +The name of a function which displays ILISP output. +@item lisp-no-popper +@vindex lisp-no-popper +Set to T to have all output in inferior LISP +@item lisp-show-status +@vindex lisp-show-status +Set to nil to stop showing process status +@item ilisp-prefix-match +@vindex ilisp-prefix-match +Set to T if you do not want partial completion +@item ilisp-filter-regexp +@vindex ilisp-filter-regexp +Input history filter +@item ilisp-filter-length +@vindex ilisp-filter-length +Input history minimum length +@item ilisp-other-prompt +@vindex ilisp-other-prompt +Prompt for non- top-level read-eval print loops +@end table + +@node Dialects, Concept index, Customization, Top +@chapter Dialects +@cindex Dialects + +A @dfn{dialect} of lisp is a specific implementation. For the parts of +Common Lisp which are well specified, they are usually the same. For +the parts that are not (debugger, top-level loop, etc.), there is +usually the same functionality but different commands. + +ILISP provides the means to specify these differences so that the ILISP +commands will use the specific command peculiar to an implementation, +but still offer the same behavior with the same interface. + + +@menu +* Defining new dialects:: +* Writing new commands:: +@end menu + +@node Defining new dialects, Writing new commands, , Dialects +@section Defining new dialects + + +To define a new dialect use the macro @code{defdialect}. For examples, +look at the dialect definitions in @file{ilisp-acl.el}, +@file{ilisp-cmu.el}, @file{ilisp-kcl.el}, @file{ilisp-luc}. There are +hooks and variables for almost anything that you are likely to need to +change. The relationship between dialects is hierarchical with the root +values being defined in @code{setup-ilisp}. For a new dialect, you only +need to change the variables that are different than in the parent +dialect. +@cindex Defining new dialects +@pindex setup-ilisp +@pindex defdialect + + +@node Writing new commands, , Defining new dialects, Dialects +@section Writing new commands +@cindex Internal ILISP functions + +Basic tools for creating new commands: +@table @code +@item deflocal +@findex deflocal +Define a new buffer local variable. +@item ilisp-dialect +@findex ilisp-dialect +List of dialect types. For specific dialect clauses. +@item lisp-symbol +@findex lisp-symbol +Create a symbol. +@item lisp-symbol-name +@findex lisp-symbol-name +Return a symbol's name +@item lisp-symbol-delimiter +@findex lisp-symbol-delimiter +Return a symbol's qualification +@item lisp-symbol-package +@findex lisp-symbol-package +Return a symbol's package +@item lisp-string-to-symbol +@findex lisp-string-to-symbol +Convert string to symbol +@item lisp-symbol-to-string +@findex lisp-symbol-to-string +Convert symbol to string +@item lisp-buffer-symbol +@findex lisp-buffer-symbol +Convert symbol to string qualified for buffer +@item lisp-previous-symbol +@findex lisp-previous-symbol +Return previous symbol +@item lisp-previous-sexp +@findex lisp-previous-sexp +Return previous sexp +@item lisp-def-name +@findex lisp-def-name +Return name of current definition +@item lisp-function-name +@findex lisp-function-name +Return previous function symbol +@item ilisp-read +@findex ilisp-read +Read an sexp with completion, arglist, etc +@item ilisp-read-symbol +@findex ilisp-read-symbol +Read a symbol or list with completion +@item ilisp-completing-read +@findex ilisp-completing-read +Read from choices or list with completion +@end table + +@noindent +Notes: +@itemize @bullet +@item +Special commands like arglist should use @code{ilisp-send} to send a +message to the inferior LISP. +@findex ilisp-send + +@item +Eval/compile commands should use @code{eval-region-lisp} or +@code{compile-region-lisp}. +@findex compile-region-lisp +@findex eval-region-lisp + +@end itemize + +@node Concept index, Key index, Dialects, Top +@unnumbered Concept Index +@printindex cp + +@node Key index, Command index, Concept index, Top +@unnumbered Key Index +@printindex ky + +@node Command index, Variable index, Key index, Top +@unnumbered Command Index + +@noindent +Commands available via @kbd{M-x} prefix. + +@printindex pg + +@node Variable index, Function index, Command index, Top +@unnumbered Variable Index + +@noindent +Variables and hooks of ILISP. + +@printindex vr + +@node Function index, , Variable index, Top +@unnumbered Function Index + +@noindent +Internal functions of ILISP which can be used to write new commands. + +@printindex fn + +@contents + +@bye + + +Should this stuff go anywhere?? + +misc ILISP + bol-ilisp (C-a) will go after the prompt as defined by + comint-prompt-regexp or ilisp-other-prompt or to the left margin with + a prefix. + +misc + backward-delete-char-untabify (DEL) + converts tabs to spaces as it moves back. + + +about cmds + The very first inferior LISP command executed may send some forms to + initialize the inferior LISP. + + Each time an inferior LISP command is executed, the last form sent can be + seen in the *ilisp-send* buffer. + + +@comment Local variables: +@comment version-control: t +@comment End: