🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.emacs.vm.bug
Article #9670

Re: problems after deleting *VM-mail* buffer

#9670
From: Andy Norman
Date: Wed, 13 Mar 1991 15:54
207 lines
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!ange
References: <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