39: How do I use an already running Emacs from another window?
Emacsclient, which comes with Emacs, is for editing a file using an
already running Emacs rather than starting up a new Emacs. It does this
by sending a request to the already running Emacs, which must be
expecting the request.
* Setup
Emacs must have executed the "server-start" function for emacsclient to
work. This can be done either by a command line option:
emacs -f server-start
or by invoking server-start from the .emacs file:
(if (some conditions are met) (server-start))
When this is done, Emacs starts a subprocess running a program called
"server". "server" creates a Unix domain socket in the user's home
directory named .emacs_server.
To get your news reader, mail reader, etc., to invoke emacsclient, try
setting the environment variable EDITOR (or sometimes VISUAL) to the
value "emacsclient". You may have to specify the full pathname of the
emacsclient program instead. Examples:
# csh commands:
setenv EDITOR emacsclient
setenv EDITOR /usr/local/emacs/etc/emacsclient # using full pathname
# sh command:
EDITOR=emacsclient ; export EDITOR
* Normal use
When emacsclient is run, it connects to the ".emacs_server" socket and
passes its command line options to "server". When "server" receives
these requests, it sends this information on the the Emacs process,
which at the next opportunity will visit the files specified. (Line
numbers can be specified just like with Emacs.) The user will have to
switch to the Emacs window by hand. When the user is done editing a
file, the user can type "C-x #" (or M-x server-edit) to indicate this.
If there is another buffer requested by emacsclient, Emacs will switch
to it; otherwise emacsclient will exit, signaling the calling program
to continue.
NOTE: "emacsclient" and "server" must be running on machines which
share the same filesystem for this to work. The pathnames that
emacsclient specifies should be correct for the filesystem that the
Emacs process sees. The Emacs process should not be suspended at the
time emacsclient is invoked. emacsclient should either be invoked from
another X window or from a shell window inside Emacs itself.
There is an enhanced version of emacsclient/server called "gnuserv" by
Andy Norman <ange@hplb.hpl.hp.com> which is available in the Emacs Lisp
Archive (see question 87). Gnuserv uses Internet domain sockets, so it
can work across most network connections. It also supports the
execution of arbitrary Emacs Lisp forms and does not require the client
program to wait for completion.