emacs: Emacs Server

 
 41 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 (SeeVersion 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 (SeeInit 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.
      SeeInitial 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 (Seeemacsclient Options).
 
    If you want to run multiple Emacs daemons (SeeInitial Options),
 you can give each daemon its own server name like this:
 
        emacs --eval "(setq server-name \"foo\")" --daemon
 
    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.
 

Menu