Article View: gnu.emacs.vm.bug
Article #9670Re: problems after deleting *VM-mail* buffer
From: Andy Norman
Date: Wed, 13 Mar 1991 15:54
Date: Wed, 13 Mar 1991 15:54
207 lines
10452 bytes
10452 bytes
>>>>> "Kyle" == kyle@wendy-fate.uu.net (Kyle Jones) writes:
Kyle> Woops, my mistake. The above quote says GNU not GNUS, so apparently
Kyle> this has nothing to do with GNUS. I'd like to know where this
Kyle> gnuserv.el came from as well.
Oops! I guess that I'm the guilty party here. It comes from me! :-(
gnuserv.el comes as part of the 'gnuserv' package which is upwardly-compatible
with the server/emacsclient stuff that comes with standard GNU Emacs. I've
dumped a man page at the very end of this posting for more information about
it.
The function 'kill-buffer' is redefined since GNU Emacs v18 doesn't run any
sort of 'kill-buffer' hook and I needed to do processing at 'kill-buffer'
time.
A possible fix for the 'kill-buffer' problem mentioned in an earlier article
is to replace the function 'server-kill-buffer' with the one at the end of
this message.
-- ange --
ange@hplb.hpl.hp.com
(defun server-kill-buffer (buffer)
"One arg, a string or a buffer. Get rid of the specified buffer.
NOTE: This function has been enhanced to allow for remote editing
in the following way:
If the buffer is waited upon by one or more clients, and a client is
not waiting for other buffers to be killed, then the client is told
that the buffer has been killed."
(interactive "bKill buffer ")
(setq buffer (server-get-buffer buffer))
(if (buffer-name buffer)
(save-excursion
(set-buffer buffer)
(let ((old-clients server-clients))
(server-real-kill-buffer buffer) ;try to kill it
(if (buffer-name buffer) ;succeeded in killing?
nil ;nope
(while old-clients
(let ((client (car old-clients)))
(delq buffer client)
(if (cdr client) ;pending buffers?
nil ;yep
(server-write-to-client (car client) nil) ;nope, tell client
(setq server-clients (delq client server-clients))))
(setq old-clients (cdr old-clients)))))))
--------------------------------------------------------------------------------
NAME
gnuserv, gnuclient, gnudoit - Server and Clients for GNU
Emacs
SYNOPSIS
gnuclient [-q] [[-h hostname] [-p port] [-r pathname]]
[[+line] path] ...
gnudoit [-q] [[-h hostname] [-p port]] [sexpr] ...
gnuserv
DESCRIPTION
gnuclient allows the user to request a running GNU Emacs
process to edit the named files or directories.
gnudoit allows the user to request a running GNU Emacs
process to evaluate the given arguments inside a progn LISP
form.
gnuserv is the server program that is set running by GNU
Emacs to handle all incoming and outgoing requests. It is
not usually invoked directly, but is started from GNU Emacs
by the LISP form (server-start).
OPTIONS
-q This option informs both gnuclient and gnudoit to
exit once connection has been made with the GNU
Emacs process. Normally gnuclient waits until all of
the files on the command line have been finished
with (their buffers killed) by the GNU Emacs
process, and gnudoit normally waits around for
evaluation of its arguments by the GNU Emacs
process, and prints the results or error conditions.
-h hostname
Used only with Internet-domain sockets, this option
specifies the host machine which should be running
gnuserv. If this option is not specified then the
value of the environment variable GNU_HOST is used
if set, otherwise the hostname of the machine
running the program is used.
Note that an internet address may be specified
instead of a hostname which can speed up connections
to the server by quite a bit, especially if the
client machine is running YP.
Note also that a hostname of unix can be used to
specify that the connection to the server should use
a Unix-domain socket (if supported) rather than an
Internet-domain socket.
-p port Used only with Internet-domain sockets, this option
specifies the service port used to communicate
between server and clients. If this option is not
specified, then the value of the environment
variable GNU_PORT is used, if set, otherwise a
service called ``gnuserv'' is looked up in the
services database. Finally, if no other value can be
found for the port, then a default port is used
which is usually 21490 + uid.
Note that since gnuserv doesn't allow command-line
options, the port for it will have to be specified
via one of the alternative methods.
-r pathname
Used only with Internet-domain sockets, the pathname
argument may be needed to inform GNU Emacs how to
reach the root directory of a remote machine.
gnuclient prepends this string to each path argument
given. For example, if you were trying to edit a
file on a client machine called otter, whose root
directory was accessible from the server machine via
the path /net/otter, then this argument should be
set to '/net/otter'. If this option is omitted, then
the value is taken from the environment variable
GNU_NODE, if set, or the empty string otherwise.
Note that on hp9000/s300 and hp9000/s800, the
pathname, if not specified by the user, is guessed.
path This is the path of the file to be edited. If the
file is a directory, then the directory browsers
dired or monkey are usually invoked instead.
sexpr This is part of a GNU Emacs LISP expression to
evaluate. All the sexprs are concatenated together
and wrapped in a progn form before sending to GNU
Emacs.
SETUP
In order to use the programs, the file gnuserv.el can be
copied into a directory on your GNU Emacs load-path, and
loaded into GNU Emacs by the GNU Emacs LISP form (load
"gnuserv"). The server can then be started by the GNU Emacs
LISP form (server-start).
EXAMPLE
gnudoit -q '(mh-smail)'
gnuclient -h otter -r /net/otter /tmp/*
SYSV IPC
SysV IPC is used to communicate between gnuclient, gnudoit
and gnuserv if the symbol SYSV_IPC is defined at the top of
gnuserv.h. This is incompatible with both Unix-domain and
Internet-domain socket communication as described below. A
file called /tmp/gsrv??? is created as a key for the message
queue, and if removed will cause the communication between
server and client to fail until the server is restarted.
UNIX-DOMAIN SOCKETS
A Unix-domain socket is used to communicate between
gnuclient, gnudoit and gnuserv if the symbol
UNIX_DOMAIN_SOCKETS is defined at the top of gnuserv.h. A
file called /tmp/gsrv??? is created for communication and if
deleted will cause communication between server and client
to fail.
INTERNET-DOMAIN SOCKETS
Internet-domain sockets are used to communicate between
gnuclient, gnudoit and gnuserv if the symbol
INTERNET_DOMAIN_SOCKETS is defined at the top of gnuserv.h.
Both Internet-domain and Unix-domain sockets can be used at
the same time.
SECURITY
Using Internet-domain sockets, a more robust form of
security is needed that wasn't necessary with either Unix-
domain sockets or SysV IPC.
gnuserv performs a limited form of security at the machine
level. By default only connections from the host where the
server is running will be allowed. All other server
connections will be rejected with a cryptic message (which
is displayed only by gnudoit). Alternatively, if the
variable GNU_SECURE can be found in gnuserv's environment,
and it names a readable filename, then this file is opened
and assumed to be a list of hosts, one per line, from which
the server will allow requests. Note that a host may be
either a internet address, or a hostname. If this file
contains a lot of hostnames then the server may take quite a
time to start up.
KNOWN BUGS
If GNU Emacs attempts to send a string containing a newline
character to gnuserv, then gnuserv will die.
FILES
/tmp/gsrv???
~/.emacs
GNU Emacs customization file, see emacs(1).
AUTHOR.
Andy Norman (ange@hplb.hpl.hp.com), based heavily upon
etc/emacsclient.c, etc/server.c and lisp/server.el from the
GNU Emacs 18.52 distribution.
Technical Details
Message-ID:
<ANGE.91Mar13155425@anorman.hpl.hp.com>Path:
arc1-ca.pugleaf.net!gmdzi!unido!fauern!ira.uka.de!sol.ctr.columbia.edu!zaphod.mps.ohio-state.edu!sdd.hp.com!hplabs!otter.hpl.hp.com!hpltoad!anorman!angeReferences:
<9103130008.AA06459@wendy-fate.UU.NET>Show Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: f6829,d0da938d008352ac X-Google-Attributes: gidf6829,public X-Google-ArrivalTime: 1991-03-14 00:13:39 PST Path: arc1-ca.pugleaf.net!gmdzi!unido!fauern!ira.uka.de!sol.ctr.columbia.edu!zaphod.mps.ohio-state.edu!sdd.hp.com!hplabs!otter.hpl.hp.com!hpltoad!anorman!ange From: ange@hplb.hpl.hp.com (Andy Norman) Newsgroups: gnu.emacs.vm.bug Subject: Re: problems after deleting *VM-mail* buffer Message-ID: <ANGE.91Mar13155425@anorman.hpl.hp.com> Date: 13 Mar 91 15:54:25 GMT References: <9103130008.AA06459@wendy-fate.UU.NET> Sender: news@hplb.hpl.hp.com (Usenet News Administrator) Organization: Hewlett-Packard Laboratories, Bristol, UK. Lines: 207 In-Reply-To: kyle@wendy-fate.uu.net's message of 13 Mar 91 00:08:36 GMT Nntp-Posting-Host: anorman.hpl.hp.com