server

Homepage: https://www.gnu.org/software/emacs

Author: William Sommerfeld

Summary

Lisp code for GNU Emacs running as server process

Commentary

This Lisp code is run in Emacs when it is to operate as
a server for other processes.

Load this library and do M-x server-edit to enable Emacs as a server.
Emacs opens up a socket for communication with clients.  If there are no
client buffers to edit, server-edit acts like (switch-to-buffer
(other-buffer))

When some other program runs "the editor" to edit a file,
"the editor" can be the Emacs client program ../lib-src/emacsclient.
This program transmits the file names to Emacs through
the server subprocess, and Emacs visits them and lets you edit them.

Note that any number of clients may dispatch files to Emacs to be edited.

When you finish editing a Server buffer, again call server-edit
to mark that buffer as done for the client and switch to the next
Server buffer.  When all the buffers for a client have been edited
and exited with server-edit, the client "editor" will return
to the program that invoked it.

Your editing commands and Emacs's display output go to and from
the terminal in the usual way.  Thus, server operation is possible
only when Emacs can talk to the terminal at the time you invoke
the client.  This is possible in four cases:

1. On a window system, where Emacs runs in one window and the
program that wants to use "the editor" runs in another.

2. On a multi-terminal system, where Emacs runs on one terminal and the
program that wants to use "the editor" runs on another.

3. When the program that wants to use "the editor" is running
as a subprocess of Emacs.

4. On a system with job control, when Emacs is suspended, the program
that wants to use "the editor" will stop and display
"Waiting for Emacs...".  It can then be suspended, and Emacs can be
brought into the foreground for editing.  When done editing, Emacs is
suspended again, and the client program is brought into the foreground.

The buffer local variable "server-buffer-clients" lists
the clients who are waiting for this buffer to be edited.
The global variable "server-clients" lists all the waiting clients,
and which files are yet to be edited for each.

Todo:

- handle command-line-args-left.
- move most of the args processing and decision making from emacsclient.c
  to here.
- fix up handling of the client's environment (place it in the terminal?).

Dependencies

Reverse dependencies