Hemlock runs in the editor process and interacts with other Lisp processes called eval servers. A user's Lisp program normally runs in an eval server process. The separation between editor and eval server has several advantages: [annotate]
Instead of providing an interface to a single Lisp environment, Hemlock coordinates multiple Lisp environments. [annotate]
Although Hemlock can be connected to several eval servers simultaneously, one eval server is designated as the current eval server. This is the eval server used to handle evaluation and compilation requests. Eval servers are referred to by name so that there is a convenient way to discriminate between servers when the editor is connected to more than one. The current eval server is normally globally specified, but it may also be shadowed locally in specific buffers. [annotate]
Set Eval Server prompts for the name of an eval server and makes it the the current eval server. Set Buffer Eval Server is the same except that is sets the eval server for the current buffer only. Current Eval Server displays the name of the current eval server in the echo area, taking any buffer eval server into consideration. See also Set Compile Server. [annotate] |
For now, all eval servers are slaves. A slave is a Lisp process that uses a typescript (see page 9.2) to run its top-level read-eval-print loop in a Hemlock buffer. We refer to the buffer that a slave uses for I/O as its interactive or slave buffer. The name of the interactive buffer is the same as the eval server's name. [annotate]
Hemlock creates a background buffer for each eval server. The background buffer's name is Background name, where name is the name of the eval server. Slaves direct compiler warning output to the background buffer to avoid cluttering up the interactive buffer. [annotate]
Hemlock locally sets Current Eval Server in interactive and background buffers to their associated slave. When in a slave or background buffer, eval server requests will go to the associated slave, regardless of the global value of Current Eval Server. [annotate]
This command changes the current buffer to the current eval server's interactive buffer. If the current eval server is not a slave, then it beeps. If there is no current eval server, then this creates a slave (see section 9.1.3). If a prefix argument is supplied, then this creates a new slave regardless of whether there is a current eval server. This command is the standard way to create a slave. [annotate] The slave buffer is a typescript (see page 9.2) the slave uses for its top-level read-eval-print loop. [annotate] |
This command changes the current buffer to the current eval server's background buffer. If there is no current eval server, then it beeps. [annotate] |
When Hemlock first starts up, there is no current eval server. If there is no a current eval server, commands that need to use the current eval server will create a slave as the current eval server. [annotate]
If an eval server's Lisp process terminates, then we say the eval server is dead. Hemlock displays a message in the echo area, interactive, and background buffers whenever an eval server dies. If the user deletes an interactive or background buffer, the associated eval server effectively becomes impotent, but Hemlock does not try to kill the process. If a command attempts to use a dead eval server, then the command will beep and display a message. [annotate]
If this variable is true, then Hemlock always prompts the user for confirmation before creating a slave. [annotate] |
If this variable is true, and some slave already exists, Hemlock prompts the user for the name of an existing server when there is no current server, instead of creating a new one. [annotate] |
This command echos the editor server's name, the machine and port of the editor, which is suitable for use with the Lisp processes -slave switch. See section 9.10. [annotate] |
This command cause Hemlock to accept slave connections, and it displays the editor server's name, which is suitable for use with the Lisp processes -slave switch. See section 9.10. Supplying an argument causes this command to inhibit slave connections. [annotate] |
| Slave Utility | (initial value "/usr/misc/.lisp/bin/lisp") | [Variable] |
| Slave Utility Switches | (initial value ) | [Variable] |
A slave is started by running the program Slave Utility Name with arguments specified by the list of strings Slave Utility Switches. This is useful primarily when running customized Lisp systems. For example, setting Slave Utility Switches to ("-core" "my.core") will cause "/usr/hqb/my.core" to be used instead of the default core image. [annotate] The -slave switch and the editor name are always supplied as arguments, and should remain unspecified in Slave Utility Switches. [annotate] |
Kill Slave prompts for a slave name, aborts any operations in the slave, tells the slave to quit, and shuts down the connection to the specified eval server. This makes no attempt to assure the eval server actually dies. [annotate] Kill Slave and Buffers is the same as Kill Slave, but it also deletes the interactive and background buffers. [annotate] |
Hemlock handles requests for compilation or evaluation by queuing an operation on the current eval server. Any number of operations may be queued, but each eval server can only service one operation at a time. Information about the progress of operations is displayed in the echo area. [annotate]
This command aborts all operations on the current eval server, either queued or in progress. Any operations already in the Aborted state will be flushed. [annotate] |
This command lists all operations which have not yet completed. Along with a description of the operation, the state and eval server is displayed. The following states are used: [annotate]
|