[comp.emacs] new version of GNU Emacs/Lisp interface available

layer@Franz.COM (Kevin Layer) (01/16/91)

Version 1.5.2 of the Franz Inc. GNU Emacs/Lisp interface is now ready
for digestion.  This is mostly a bug fix release from 1.5.1--UNIX
domain works (again), though INTERNET domain is still the default.
Problems with using an upper-case-insensitive Lisp were fixed.  Also,
the documentation was fixed up a little.

See the ChangeLog for more details.

You can get it in the following ways:

  * ftp (login as user `ftp' and give any password):
	uunet.uu.net:/lisp/emacs-lisp-1.5.2.tar.Z
        ucbvax.berkeley.edu:/pub/franzinc/emacs-lisp-interface/1.5.2.tar.Z
  * uucp:
  	uunet!~/lisp/emacs-lisp-1.5.2.tar.Z
  * news:
	gnu.emacs.sources (posted on 1/15/91)

Send mail to bugs@franz.com to report any problems you encounter.  If
you want to be on the mailing list, send mail to
	lisp-emacs-forum-request@ucbarpa.berkeley.edu
and I'll put you on it.

Here is the standard blurb for people that don't know what this
interface does:

_______________________________________________________________________________

	       The Franz Inc. GNU Emacs/Lisp Interface

* Introduction

This interface works on any GNU Emacs version 18, and works with a
variety of Lisp dialects.  There are a few features, such as the
dynamic completion of Lisp symbols, which work only if a network
communication channel between Lisp and Emacs has been established--the
code for this is distributed with the interface and is written in
Common Lisp, though it currently only works in Allegro Common Lisp
from Franz Inc.

The goal of the interface is to offer an integrated environment for
programming in Lisp.  While Lisp and Emacs are run as separate UNIX
processes, the Emacs-Lisp interface tries hard to hide this
separation.  To this end, the main parts of the interface are:

	* Lisp editing modes for various dialects of Lisp (Common Lisp
	  and Franz Lisp, currently),
	* Local modes for the execution of Lisp images, and
	* Bindings to take advantage of Lisps which have the Emacs
	  equivalent of OPEN-NETWORK-STREAM for "hidden" communication
	  between with Emacs and Lisp.

Additionally, there is a generalized subprocess package, which offers
the following features:

	* input ring (history of previously typed input), and commands
	  to search and yank text from it,
	* filename completion,
	* bindings which implement the all special functions of the
	  UNIX tty drivers--^C (interrupt subjob), ^\ (quit subjob),
	  ^Z (suspend subjob), ^O (flush output from subjob), ^D (send
	  EOF to subjob), and more, and
	* tracking of directory changes in subprocesses.

Both the subprocess modes for interacting with shell and Lisp use the
above package, which makes extensions for `rlogin', `telnet', and
`su' modes trivial in their definition.

There is an extensive on-line document which describes the interface
in detail.

* Interacting with a Lisp process

The interactive functions (in the sense they are available via
``M-x'') for starting Lisp images are many and simple.  For example,

    M-x fi:common-lisp RET

will use the values of the Emacs variables

    fi:common-lisp-image-name
    fi:common-lisp-image-arguments
    fi:common-lisp-prompt-pattern

to create and start a Common Lisp image, while

    M-x fi:explicit-common-lisp RET

will read all the arguments from the minibuffer.  Once done, however,
the following bindings are available for interacting with the Lisp
subprocess:

    Local Bindings:
    key		    binding
    ---		    -------
    DEL             backward-delete-char-untabify
    TAB             fi:lisp-indent-line
    RET             fi:inferior-lisp-newline
    C-c C-a         fi:subprocess-beginning-of-line
    ESC C-q         fi:indent-sexp

    C-c C-\         fi:subprocess-quit
	Equivalent to ^\ in the tty driver (quit).
    C-c C-d         fi:subprocess-send-eof
	Equivalent to ^D in the tty driver (eof).
    C-c C-c         fi:subprocess-interrupt
	Equivalent to ^C in the tty driver (intr).
    C-c C-w         fi:subprocess-backward-kill-word
	Equivalent to ^W in the tty driver (werase).
    C-c C-o         fi:subprocess-send-flush
	Equivalent to ^O in the tty driver (flush).
    C-c C-u         fi:subprocess-kill-input
	Equivalent to ^U in the tty driver (kill).

    C-c C-v         fi:subprocess-show-output
	Puts the output of the last command at the top of the window.
    C-c C-k         fi:subprocess-kill-output
	Move the output of the last command to the kill-ring.
    C-c .           fi:lisp-sync-current-working-directory
	Sync Emacs and the shell/Lisp regarding the current directory.

    C-c C-l         fi:list-input-ring
    C-c C-p         fi:pop-input
    C-c C-n         fi:push-input
    C-c C-s         fi:re-search-forward-input
    C-c C-r         fi:re-search-backward-input
	These manipulate the input (history) ring.

    ESC W           fi:lisp-walk
    ESC M           fi:lisp-macroexpand
    ESC F           fi:lisp-function-documentation
    ESC D           fi:lisp-describe
    ESC C           fi:lisp-who-calls
    ESC A           fi:lisp-arglist
    ESC TAB         fi:lisp-complete-symbol
    ESC ,           fi:lisp-tags-loop-continue
    ESC .           fi:lisp-find-tag
	The above set of commands dynamically query the Lisp
	environment for the specified information.  For example,
	fi:lisp-arglist gets the current arglist from Lisp--this does
	NOT find the source and get the arglist from it, since that
	might be out of date, rather, it asks Lisp, at the time
	fi:lisp-arglist is evaluated, for the arglist of the specified
	function or macro.

Aside from the above bindings, there are a great number of Emacs
variables which control various aspects of the interaction with Lisp:

    fi:common-lisp-image-arguments
    fi:common-lisp-image-name
    fi:common-lisp-package-regexp
    fi:common-lisp-prompt-pattern
    fi:default-explicit-common-lisp-image-arguments
    fi:default-explicit-common-lisp-image-name
    fi:default-input-ring-max
    fi:default-remote-common-lisp-directory
    fi:default-remote-common-lisp-host
    fi:display-buffer-function
    fi:echo-evals-from-buffer-in-listener-p
    fi:emacs-to-lisp-transaction-directory
    fi:filename-frobber-hook
    fi:lisp-evalserver-number-reads
    fi:lisp-evalserver-timeout
    fi:package
    fi:pop-to-sublisp-buffer-after-lisp-eval
    fi:remote-lisp-track-image-name-directory
    fi:shell-cd-regexp
    fi:shell-popd-regexp
    fi:shell-pushd-regexp
    fi:source-info-not-found-hook
    fi:start-lisp-interface-function
    fi:subprocess-continuously-show-output-in-visible-buffer
    fi:subprocess-enable-superkeys
    fi:subprocess-map-nl-to-cr
    fi:subprocess-write-quantum
    fi:unix-domain
    fi:unix-domain-socket

* Modes for editing Lisp programs

There is an enhanced mode for editing programs written in Lisp, which
provides indentations for all Common Lisp forms and means to evaluate
and operate on quantities in a Lisp source buffer.  The following
bindings are available, for example, in "Common Lisp" mode:

    Local Bindings:
    key		    binding
    ---		    -------
    RET             fi:lisp-mode-newline
    TAB             fi:lisp-indent-line
    DEL             backward-delete-char-untabify
    ESC C-q         fi:indent-sexp
    C-c -           fi:log-functional-change
	Annotate the current definition with text, by putting the
	current date and the user performing the modification, just
	inside the top-level definition form.

    C-c C-r         fi:lisp-eval-region
    C-c C-s         fi:lisp-eval-last-sexp
    C-c C-b         fi:lisp-eval-current-buffer
    ESC C-x         fi:lisp-eval-defun
	The above evaluate parts (region, last form, current defun or
	the entire buffer) of a source buffer in the Lisp environment.

    ESC W           fi:lisp-walk
    ESC M           fi:lisp-macroexpand
    ESC F           fi:lisp-function-documentation
    ESC D           fi:lisp-describe
    ESC C           fi:lisp-who-calls
    ESC A           fi:lisp-arglist
    ESC TAB         fi:lisp-complete-symbol
    ESC ,           fi:lisp-tags-loop-continue
    ESC .           fi:lisp-find-tag
	These do exactly what they do in a subprocess buffer (see the
	previous section).

As with the subprocess modes for interacting with Lisp, there are a
host of variables which control the writing of Lisp code:
 
    fi:common-lisp-file-types
    fi:emacs-lisp-mode-syntax-table
    fi:lisp-body-indent
    fi:lisp-case-sensitive
    fi:lisp-comment-indent-specification
    fi:lisp-do-indentation
    fi:lisp-electric-semicolon
    fi:lisp-indent-hook
    fi:lisp-indent-hook-property
    fi:lisp-indent-offset
    fi:lisp-keyword-argument-indentation
    fi:lisp-keyword-indentation
    fi:lisp-keyword-indentation-hook
    fi:lisp-maximum-indent-struct-depth
    fi:lisp-mode-syntax-table
    fi:lisp-package
    fi:lisp-tag-body-indentation
    fi:lisp-tag-indentation
    fi:lisp-tag-indentation-hook
    fi:subprocess-mode

* Future work

Suggestions for improvement are greatly appreciated.  We expect much
future work to take place on this interface, and the direction it
takes comes from the user community.
--
Kevin Layer, Franz Inc.         1995 University Avenue, Suite 275
layer@Franz.COM (internet)      Berkeley, CA  94704
uunet!franz!layer (uucp)        Phone: (415) 548-3600; FAX: (415) 548-8253

layer@franz.com (Kevin Layer) (01/17/91)

Version 1.5.2 of the Franz Inc. GNU Emacs/Lisp interface is now ready
for digestion.  This is mostly a bug fix release from 1.5.1--UNIX
domain works (again), though INTERNET domain is still the default.
Problems with using an upper-case-insensitive Lisp were fixed.  Also,
the documentation was fixed up a little.

See the ChangeLog for more details.

You can get it in the following ways:

  * ftp (login as user `ftp' and give any password):
	uunet.uu.net:/lisp/emacs-lisp-1.5.2.tar.Z
        ucbvax.berkeley.edu:/pub/franzinc/emacs-lisp-interface/1.5.2.tar.Z
  * uucp:
  	uunet!~/lisp/emacs-lisp-1.5.2.tar.Z
  * news:
	gnu.emacs.sources (posted on 1/15/91)

It is the intention of Franz Inc. that this code be redistributable,
and some of the files are copylefted due to their roots being in some
GNU files.

Send mail to bugs@franz.com to report any problems you encounter.  If
you want to be on the mailing list, send mail to
	lisp-emacs-forum-request@ucbarpa.berkeley.edu
and I'll put you on it.

Here is the standard blurb for people that don't know what this
interface does:

_______________________________________________________________________________

	       The Franz Inc. GNU Emacs/Lisp Interface

* Introduction

This interface works on any GNU Emacs version 18, and works with a
variety of Lisp dialects.  There are a few features, such as the
dynamic completion of Lisp symbols, which work only if a network
communication channel between Lisp and Emacs has been established--the
code for this is distributed with the interface and is written in
Common Lisp, though it currently only works in Allegro Common Lisp
from Franz Inc.

The goal of the interface is to offer an integrated environment for
programming in Lisp.  While Lisp and Emacs are run as separate UNIX
processes, the Emacs-Lisp interface tries hard to hide this
separation.  To this end, the main parts of the interface are:

	* Lisp editing modes for various dialects of Lisp (Common Lisp
	  and Franz Lisp, currently),
	* Local modes for the execution of Lisp images, and
	* Bindings to take advantage of Lisps which have the Emacs
	  equivalent of OPEN-NETWORK-STREAM for "hidden" communication
	  between with Emacs and Lisp.

Additionally, there is a generalized subprocess package, which offers
the following features:

	* input ring (history of previously typed input), and commands
	  to search and yank text from it,
	* filename completion,
	* bindings which implement the all special functions of the
	  UNIX tty drivers--^C (interrupt subjob), ^\ (quit subjob),
	  ^Z (suspend subjob), ^O (flush output from subjob), ^D (send
	  EOF to subjob), and more, and
	* tracking of directory changes in subprocesses.

Both the subprocess modes for interacting with shell and Lisp use the
above package, which makes extensions for `rlogin', `telnet', and
`su' modes trivial in their definition.

There is an extensive on-line document which describes the interface
in detail.

* Interacting with a Lisp process

The interactive functions (in the sense they are available via
``M-x'') for starting Lisp images are many and simple.  For example,

    M-x fi:common-lisp RET

will use the values of the Emacs variables

    fi:common-lisp-image-name
    fi:common-lisp-image-arguments
    fi:common-lisp-prompt-pattern

to create and start a Common Lisp image, while

    M-x fi:explicit-common-lisp RET

will read all the arguments from the minibuffer.  Once done, however,
the following bindings are available for interacting with the Lisp
subprocess:

    Local Bindings:
    key		    binding
    ---		    -------
    DEL             backward-delete-char-untabify
    TAB             fi:lisp-indent-line
    RET             fi:inferior-lisp-newline
    C-c C-a         fi:subprocess-beginning-of-line
    ESC C-q         fi:indent-sexp

    C-c C-\         fi:subprocess-quit
	Equivalent to ^\ in the tty driver (quit).
    C-c C-d         fi:subprocess-send-eof
	Equivalent to ^D in the tty driver (eof).
    C-c C-c         fi:subprocess-interrupt
	Equivalent to ^C in the tty driver (intr).
    C-c C-w         fi:subprocess-backward-kill-word
	Equivalent to ^W in the tty driver (werase).
    C-c C-o         fi:subprocess-send-flush
	Equivalent to ^O in the tty driver (flush).
    C-c C-u         fi:subprocess-kill-input
	Equivalent to ^U in the tty driver (kill).

    C-c C-v         fi:subprocess-show-output
	Puts the output of the last command at the top of the window.
    C-c C-k         fi:subprocess-kill-output
	Move the output of the last command to the kill-ring.
    C-c .           fi:lisp-sync-current-working-directory
	Sync Emacs and the shell/Lisp regarding the current directory.

    C-c C-l         fi:list-input-ring
    C-c C-p         fi:pop-input
    C-c C-n         fi:push-input
    C-c C-s         fi:re-search-forward-input
    C-c C-r         fi:re-search-backward-input
	These manipulate the input (history) ring.

    ESC W           fi:lisp-walk
    ESC M           fi:lisp-macroexpand
    ESC F           fi:lisp-function-documentation
    ESC D           fi:lisp-describe
    ESC C           fi:lisp-who-calls
    ESC A           fi:lisp-arglist
    ESC TAB         fi:lisp-complete-symbol
    ESC ,           fi:lisp-tags-loop-continue
    ESC .           fi:lisp-find-tag
	The above set of commands dynamically query the Lisp
	environment for the specified information.  For example,
	fi:lisp-arglist gets the current arglist from Lisp--this does
	NOT find the source and get the arglist from it, since that
	might be out of date, rather, it asks Lisp, at the time
	fi:lisp-arglist is evaluated, for the arglist of the specified
	function or macro.

Aside from the above bindings, there are a great number of Emacs
variables which control various aspects of the interaction with Lisp:

    fi:common-lisp-image-arguments
    fi:common-lisp-image-name
    fi:common-lisp-package-regexp
    fi:common-lisp-prompt-pattern
    fi:default-explicit-common-lisp-image-arguments
    fi:default-explicit-common-lisp-image-name
    fi:default-input-ring-max
    fi:default-remote-common-lisp-directory
    fi:default-remote-common-lisp-host
    fi:display-buffer-function
    fi:echo-evals-from-buffer-in-listener-p
    fi:emacs-to-lisp-transaction-directory
    fi:filename-frobber-hook
    fi:lisp-evalserver-number-reads
    fi:lisp-evalserver-timeout
    fi:package
    fi:pop-to-sublisp-buffer-after-lisp-eval
    fi:remote-lisp-track-image-name-directory
    fi:shell-cd-regexp
    fi:shell-popd-regexp
    fi:shell-pushd-regexp
    fi:source-info-not-found-hook
    fi:start-lisp-interface-function
    fi:subprocess-continuously-show-output-in-visible-buffer
    fi:subprocess-enable-superkeys
    fi:subprocess-map-nl-to-cr
    fi:subprocess-write-quantum
    fi:unix-domain
    fi:unix-domain-socket

* Modes for editing Lisp programs

There is an enhanced mode for editing programs written in Lisp, which
provides indentations for all Common Lisp forms and means to evaluate
and operate on quantities in a Lisp source buffer.  The following
bindings are available, for example, in "Common Lisp" mode:

    Local Bindings:
    key		    binding
    ---		    -------
    RET             fi:lisp-mode-newline
    TAB             fi:lisp-indent-line
    DEL             backward-delete-char-untabify
    ESC C-q         fi:indent-sexp
    C-c -           fi:log-functional-change
	Annotate the current definition with text, by putting the
	current date and the user performing the modification, just
	inside the top-level definition form.

    C-c C-r         fi:lisp-eval-region
    C-c C-s         fi:lisp-eval-last-sexp
    C-c C-b         fi:lisp-eval-current-buffer
    ESC C-x         fi:lisp-eval-defun
	The above evaluate parts (region, last form, current defun or
	the entire buffer) of a source buffer in the Lisp environment.

    ESC W           fi:lisp-walk
    ESC M           fi:lisp-macroexpand
    ESC F           fi:lisp-function-documentation
    ESC D           fi:lisp-describe
    ESC C           fi:lisp-who-calls
    ESC A           fi:lisp-arglist
    ESC TAB         fi:lisp-complete-symbol
    ESC ,           fi:lisp-tags-loop-continue
    ESC .           fi:lisp-find-tag
	These do exactly what they do in a subprocess buffer (see the
	previous section).

As with the subprocess modes for interacting with Lisp, there are a
host of variables which control the writing of Lisp code:
 
    fi:common-lisp-file-types
    fi:emacs-lisp-mode-syntax-table
    fi:lisp-body-indent
    fi:lisp-case-sensitive
    fi:lisp-comment-indent-specification
    fi:lisp-do-indentation
    fi:lisp-electric-semicolon
    fi:lisp-indent-hook
    fi:lisp-indent-hook-property
    fi:lisp-indent-offset
    fi:lisp-keyword-argument-indentation
    fi:lisp-keyword-indentation
    fi:lisp-keyword-indentation-hook
    fi:lisp-maximum-indent-struct-depth
    fi:lisp-mode-syntax-table
    fi:lisp-package
    fi:lisp-tag-body-indentation
    fi:lisp-tag-indentation
    fi:lisp-tag-indentation-hook
    fi:subprocess-mode

* Future work

Suggestions for improvement are greatly appreciated.  We expect much
future work to take place on this interface, and the direction it
takes comes from the user community.

preece@urbana.mcd.mot.com (Scott E. Preece) (01/22/91)

|   From: layer@Franz.COM (Kevin Layer)
|   Subject: new version of GNU Emacs/Lisp interface available
|   Date: 16 Jan 91 01:39:45 GMT
|
|   Version 1.5.2 of the Franz Inc. GNU Emacs/Lisp interface is now ready
|   for digestion.  This is mostly a bug fix release from 1.5.1--UNIX
|   domain works (again), though INTERNET domain is still the default.
|   Problems with using an upper-case-insensitive Lisp were fixed.  Also,
|   the documentation was fixed up a little.
--
Um, there's a pretty heavy looking copyright statement in the
distribution; it talks about written licenses.  What are the conditions
under which this stuff is posted?
--
scott preece
motorola/mcd urbana design center	1101 e. university, urbana, il   61801
uucp:	uunet!uiucuxc!udc!preece,	 arpa:	preece@urbana.mcd.mot.com

layer@Franz.COM (Kevin Layer) (01/25/91)

Below is the notice, and see no reference to "written licenses".  Also,
some of the files are copyright(left) by FSF.

;; copyright (C) 1987, 1988 Franz Inc, Berkeley, Ca.
;;
;; The software, data and information contained herein are the property 
;; of Franz, Inc.  
;;
;; This file (or any derivation of it) may be distributed without 
;; further permission from Franz Inc. as long as:
;;
;;	* it is not part of a product for sale,
;;	* no charge is made for the distribution, other than a tape
;;	  fee, and
;;	* all copyright notices and this notice are preserved.

The intention of the above is that our emacs-lisp interface will
continue to be freely (ie, no cost) available, even when modified and
distributed by others.
--
Kevin Layer, Franz Inc.         1995 University Avenue, Suite 275
layer@Franz.COM (internet)      Berkeley, CA  94704
uunet!franz!layer (uucp)        Phone: (415) 548-3600; FAX: (415) 548-8253