38 Using Emacs as a Server

Various programs can invoke your choice of editor to edit a
particular piece of text. For instance, version control programs
invoke an editor to enter version control logs (see Version Control), and the Unix mail utility invokes an editor to
enter a message to send. By convention, your choice of editor is
specified by the environment variable EDITOR. If you set
EDITOR to ‘emacs’, Emacs would be invoked, but in an
inconvenient way—by starting a new Emacs process. This is
inconvenient because the new Emacs process doesn't share buffers, a
command history, or other kinds of information with any existing Emacs
process.

You can solve this problem by setting up Emacs as an edit
server, so that it “listens” for external edit requests and acts
accordingly. There are two ways to start an Emacs server:

Run the command server-start in an existing Emacs process:
either type M-x server-start, or put the expression
(server-start) in your init file (see Init File). The
existing Emacs process is the server; when you exit Emacs, the server
dies with the Emacs process.

Run Emacs as a daemon, using the ‘--daemon’ command-line
option. See Initial Options. When Emacs is started this way, it
calls server-start after initialization, and returns control to
the calling terminal instead of opening an initial frame; it then
waits in the background, listening for edit requests.

Either way, once an Emacs server is started, you can use a shell
command called emacsclient to connect to the Emacs process
and tell it to visit a file. You can then set the EDITOR
environment variable to ‘emacsclient’, so that external programs
will use the existing Emacs process for editing.1

You can run multiple Emacs servers on the same machine by giving
each one a unique “server name”, using the variable
server-name. For example, M-x set-variable <RET>
server-name <RET> foo <RET> sets the server name to
‘foo’. The emacsclient program can specify a server by
name, using the ‘-s’ option (see emacsclient Options).

If you have defined a server by a unique server name, it is possible
to connect to the server from another Emacs instance and evaluate Lisp
expressions on the server, using the server-eval-at function.
For instance, (server-eval-at "foo" '(+ 1 2)) evaluates the
expression (+ 1 2) on the ‘foo’ server, and returns
3. (If there is no server with that name, an error is
signaled.) Currently, this feature is mainly useful for developers.