efaq: Using an already running Emacs process
5.18 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 ‘.emacs’:
(if (SOME CONDITIONS ARE MET) (server-start))
When this is done, Emacs creates a Unix domain socket named
‘server’ in ‘/tmp/emacsUSERID’. See ‘server-socket-dir’.
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
# using full pathname
setenv EDITOR /usr/local/emacs/etc/emacsclient
# sh command:
EDITOR=emacsclient ; export EDITOR
• Normal use:
When ‘emacsclient’ is run, it connects to the socket and passes its
command line options to Emacs, 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.
There is an alternative version of ‘emacsclient’ called ‘gnuserv’,
written by Andy Norman (Packages that do not come with
Emacs). ‘gnuserv’ uses Internet domain sockets, so it can work
across most network connections.
The most recent ‘gnuserv’ package is available at
<http://meltin.net/hacks/emacs/>