;;; gnuserv.el --- Lisp interface code between Emacs and gnuserv
;; Copyright (C) 1989-1997 Free Software Foundation, Inc.
-;; Version: 3.11
+;; Version: 3.12
;; Author: Andy Norman (ange@hplb.hpl.hp.com), originally based on server.el
-;; Hrvoje Niksic <hniksic@srce.hr>
+;; Hrvoje Niksic <hniksic@xemacs.org>
;; Maintainer: Jan Vroonhof <vroonhof@math.ethz.ch>,
-;; Hrvoje Niksic <hniksic@srce.hr>
+;; Hrvoje Niksic <hniksic@xemacs.org>
;; Keywords: environment, processes, terminals
;; This file is part of XEmacs.
;; Jan Vroonhof
;; Customized.
;;
-;; Hrvoje Niksic <hniksic@srce.hr> May/1997
+;; Hrvoje Niksic <hniksic@xemacs.org> May/1997
;; Completely rewritten. Now uses `defstruct' and other CL stuff
;; to define clients cleanly. Many thanks to Dave Gillespie!
;;
"Process gnuserv client requests to execute Emacs commands."
(setq gnuserv-string (concat gnuserv-string string))
;; C-d means end of request.
- (when (string-match "\C-d\\'" gnuserv-string)
- (cond ((string-match "^[0-9]+" gnuserv-string) ; client request id
+ (when (string-match "\C-d\n?\\'" gnuserv-string)
+ (cond ((string-match "\\`[0-9]+" gnuserv-string) ; client request id
(let ((header (read-from-string gnuserv-string)))
;; Set the client we are talking to.
(setq gnuserv-current-client (car header))
;; In case of an error, write the description to the
;; client, and then signal it.
(error (setq gnuserv-string "")
- (gnuserv-write-to-client gnuserv-current-client oops)
+ (when gnuserv-current-client
+ (gnuserv-write-to-client gnuserv-current-client oops))
(setq gnuserv-current-client nil)
(signal (car oops) (cdr oops)))
(quit (setq gnuserv-string "")
- (gnuserv-write-to-client gnuserv-current-client oops)
+ (when gnuserv-current-client
+ (gnuserv-write-to-client gnuserv-current-client oops))
(setq gnuserv-current-client nil)
(signal 'quit nil)))
(setq gnuserv-string "")))
(t
- (error "%s: invalid response from gnuserv" gnuserv-string)
- (setq gnuserv-string "")))))
+ (let ((response (car (split-string gnuserv-string "\C-d"))))
+ (setq gnuserv-string "")
+ (error "%s: invalid response from gnuserv" response))))))
;; This function is somewhat of a misnomer. Actually, we write to the
;; server (using `process-send-string' to gnuserv-process), which
(client (make-gnuclient :id gnuserv-current-client
:device device
:frame new-frame)))
+ (select-frame frame)
(setq gnuserv-current-client nil)
;; If the device was created by this client, push it to the list.
(and (/= old-device-num (length (device-list)))