An editor with a process reading and processing input, and that collects any output into itself. We are considering deprecating this class - please contact Lisp Support if you use it.
capi
:top-level-function | |
The input processing function. |
interactive-pane-stream
interactive-pane-top-level-function
An instance of the class interactive-pane
is an editor with a process reading and processing input, and that collects any output into itself.
interactive-pane
contains its own GUI stream. The top-level-function is called once, when the interactive pane is created: it needs to repeatedly take input from the GUI stream and write output to it. The top-level-function is called on a separate process from the process that displays the pane and does editor interaction. If the top-level-function wants to invoke CAPI functionality, it needs to use apply-in-pane-process to ensure it is done on the right process. If the top-level-function returns, the process just exits, but the pane itself stays and continues to function as an editor-pane.
Note that because the pane is a fully functional editor-pane, the user can perform complex operations, and the top-level-function should try to cope with it. For example, the user may yank a very large amount of text, or may delete half of the buffer.
The first argument to top-level-function is the interface containing the interactive pane. The second argument is the interactive pane itself. The third argument is the GUI stream. The default for top-level-function is a function which runs a Lisp listener top-loop.
The class listener-pane is built upon interactive-pane
. listener-pane adds functionality for handling Lisp forms and handles complexities involved with the interaction with the Editor, so it is much easier to use. If you use interactive-pane
directly please contact Lisp Support.
This class was named interactive-stream
in LispWorks 3.2 but has been renamed to avoid confusion (as this class is not a stream but a pane that contains a stream). interactive-stream
and its accessors interactive-stream-top-level-function
and interactive-stream-stream
have now been removed.
This example assumes there is just one line of output from each command sent to the pipe:
(capi:contain (make-instance 'capi:interactive-pane :top-level-function #'(lambda (interface pane stream) (declare (ignore interface pane)) (with-open-stream (s (sys:open-pipe '("/usr/local/bin/bash") :direction :io)) (loop (progn (format stream "primitive xterm$ ") (let ((input (read-line stream nil nil))) (if input (progn (write-line input s) (force-output s)) (return)))) (let ((output (read-line s nil nil))) (if output (progn (write-line output stream) (force-output stream)) (return))))))) :best-height 300 :best-width 300)
CAPI User Guide and Reference Manual (Macintosh version) - 01 Dec 2021 19:31:27