;ELC   
;;; compiled by rms@mole.gnu.ai.mit.edu on Tue Jul 12 02:57:20 1994
;;; from file /home/fsf/rms/e19/lisp/server.el
;;; emacs version 19.25.16.
;;; bytecomp version FSF 2.10
;;; optimization is on.
;;; this file uses opcodes which do not exist in Emacs 18.

(if (and (boundp 'emacs-version)
	 (or (and (boundp 'epoch::version) epoch::version)
	     (string-lessp emacs-version "19")))
    (error "`/home/fsf/rms/e19/lisp/server.el' was compiled for Emacs 19"))

(defvar server-program (expand-file-name "emacsserver" exec-directory) "\
*The program to use as the edit server.")
(defvar server-visit-hook nil "\
*List of hooks to call when visiting a file for the Emacs server.")
(defvar server-switch-hook nil "\
*List of hooks to call when switching to a buffer for the Emacs server.")
(defvar server-done-hook nil "\
*List of hooks to call when done editing a buffer for the Emacs server.")
(defvar server-process nil "\
the current server process")
(byte-code "! " [boundp server-previous-string ""] 2)
(defvar server-clients nil "\
List of current server clients.
Each element is (CLIENTID BUFFERS...) where CLIENTID is a string
that can be given to the server process to identify a client.
When a buffer is marked as \"done\", it is removed from this list.")
(defvar server-buffer-clients nil "\
List of clientids for clients requesting editing of current buffer.")
(byte-code "!#" [make-variable-buffer-local server-buffer-clients put permanent-local t] 4)
(defvar server-window nil "\
*The window to use for selecting Emacs server buffers.
If nil, use the selected window.
If it is a frame, use the frame's selected window.")
(defvar server-temp-file-regexp "^/tmp/Re\\|/draft$" "\
*Regexp which should match filenames of temporary files
which are deleted and reused after each edit
by the programs that invoke the emacs server.")
(byte-code "	\n 	B\"\"" [server-buffer-clients minor-mode-alist (server-buffer-clients " Server") defalias server-log #[(string) "! qdb\nco  )" [get-buffer "*server*" string newline] 2] server-sentinel #[(proc msg) "	!= !!	!= !!" [process-status proc exit server-log message "Server subprocess exited" signal "Server subprocess killed"] 3]] 3)
(defalias 'server-start #[(&optional leave-dead) " \"ďƏȏ	- 	@A@\n\n!) \f?Q = !!#\"\"!" [server-process set-process-sentinel nil (delete-process server-process) ((error)) (delete-file "~/.emacs_server") ((error)) (byte-code "  #!" [delete-file format "/tmp/esrv%d-%s" user-uid system-name] 5) ((error)) server-clients buffer server-buffer-done leave-dead server-log message "Restarting server" start-process "server" server-program server-sentinel set-process-filter server-process-filter process-kill-without-query] 4 "\
Allow this Emacs process to be a server for client processes.
This starts a server communications subprocess through which
client \"editors\" can send your editing commands to this Emacs job.
To use the server, set up the program `emacsclient' in the
Emacs distribution as your standard \"editor\".

Prefix arg means just kill any existing server communications subprocess." "P"])
(defalias (quote server-process-filter) #[(proc string) "	!\n	PGSH= 	\"= 		ƕO		\"OC\f	ƕO	\"x 	ƔƕSO	ƕO\"g O!t D\fB\f)= \f\"BA@!!!!+" [server-log string server-previous-string 10 string-match "Client: " 0 nil "" " " 1 lineno files client "[^ ]+ " arg "\\`\\+[0-9]+\\'" read server-visit-files server-clients server-switch-buffer run-hooks server-switch-hook message substitute-command-keys "When done with a buffer, type \\[server-edit]."] 6])
(defalias 'server-visit-files #[(files client) "pŎv @@!N \nqN !< \n!4 \n!X \"X Q!X !X !q!*@A@!@Bp\fBA )\f+" [nil t obuf last-nonmenu-event client-record ((set-buffer obuf)) files filen get-file-buffer file-exists-p verify-visited-file-modtime buffer-modified-p revert-buffer y-or-n-p "File no longer exists: " ", write buffer to file? " write-file find-file-noselect run-hooks server-visit-hook goto-line client server-buffer-clients] 5 "\
Finds FILES and returns the list CLIENT with the buffers nconc'd.
FILES is an alist whose elements are (FILENAME LINENUMBER)."])
(defalias 'server-buffer-done #[(buffer) "	!=\fU @\" 	>A@	\"AM G 	@\"\"@\"!\f\")A 	!} 	q!)	!x 	!} 	!+" [process-status server-process run nil server-clients old-clients next-buffer running client buffer delq send-string format "Close: %s Done\n" server-log buffer-name server-buffer-clients run-hooks server-done-hook server-temp-file-p kill-buffer bury-buffer] 6 "\
Mark BUFFER as \"done\" for its client(s).
Buries the buffer, and returns another server buffer
as a suggestion for what to select next."])
(defalias 'server-temp-file-p #[(buffer) "	!\f 	!\"" [buffer-file-name buffer string-match server-temp-file-regexp] 4 "\
Return non-nil if BUFFER contains a file considered temporary.
These are files whose names suggest they are repeatedly
reused to pass information to another program.

The variable `server-temp-file-regexp' controls which filenames
are considered temporary."])
(defalias 'server-done #[nil "p	- ! É **  * \nQ!* !!)" [buffer server-buffer-clients server-temp-file-p nil buffer-backed-up version-control save-buffer buffer-modified-p y-or-n-p "Save file " buffer-file-name "? " server-buffer-done] 4 "\
Offer to save current buffer, mark it as \"done\" for clients.
Then bury it, and return a suggested buffer to select next."])
(byte-code "\"\"\"\"" [defalias server-kill-buffer-query-function #[nil "? p!\"!" [server-buffer-clients yes-or-no-p format "Buffer `%s' still has clients; kill it? " buffer-name] 5] add-hook kill-buffer-query-functions server-kill-emacs-query-function #[nil "	\n \n@A\"\"> \nA ?' !*" [nil server-clients tail live-client t mapcar stringp buffer-name yes-or-no-p "Server buffers still have clients; exit anyway? "] 7] kill-emacs-query-functions] 3)
(defalias 'server-edit #[(&optional arg) " 	 	!> ! !" [arg server-process process-status (signal exit) server-start nil server-switch-buffer server-done] 2 "\
Switch to next server editing buffer; say \"Done\" for current buffer.
If a server buffer is current, it is marked \"done\" and optionally saved.
When all of a client's buffers are marked as \"done\", the client is notified.

Temporary files such as MH <draft> files are always saved and backed up,
no questions asked.  (The variable `make-backup-files', if nil, still
inhibits a backup; you can set it locally in a particular buffer to
prevent a backup for it.)  The variable `server-temp-file-regexp' controls
which filenames are considered temporary.

If invoked with a prefix argument, or if there is no server process running, 
starts server process and that is all.  Invoked by \\[server-edit]." "P"])
(defalias 'server-switch-buffer #[(next-buffer) "	! 	! 	! 	!! !( #!G !@ !@ !!!T @A@! !" [windowp server-window select-window framep frame-selected-window window-minibuffer-p selected-window next-window nil nomini t next-buffer bufferp buffer-name switch-to-buffer server-switch-buffer server-buffer-done server-clients other-buffer] 5 "\
Switch to another buffer, preferably one that has a client.
Arg NEXT-BUFFER is a suggestion; if it is a live buffer, use it."])
(byte-code "\"!" [global-set-key "#" server-edit provide server] 3)
