diff options
Diffstat (limited to 'emacs/gds-server.el')
-rw-r--r-- | emacs/gds-server.el | 109 |
1 files changed, 0 insertions, 109 deletions
diff --git a/emacs/gds-server.el b/emacs/gds-server.el deleted file mode 100644 index 9cfcd3aab..000000000 --- a/emacs/gds-server.el +++ /dev/null @@ -1,109 +0,0 @@ -;;; gds-server.el -- infrastructure for running GDS server processes - -;;;; Copyright (C) 2003, 2004 Free Software Foundation, Inc. -;;;; -;;;; This library is free software; you can redistribute it and/or -;;;; modify it under the terms of the GNU Lesser General Public -;;;; License as published by the Free Software Foundation; either -;;;; version 3 of the License, or (at your option) any later version. -;;;; -;;;; This library is distributed in the hope that it will be useful, -;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;;;; Lesser General Public License for more details. -;;;; -;;;; You should have received a copy of the GNU Lesser General Public -;;;; License along with this library; if not, write to the Free -;;;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -;;;; 02111-1307 USA - - -;;;; Customization group setup. - -(defgroup gds nil - "Customization options for Guile Emacs frontend." - :group 'scheme) - - -;;;; Communication with the (ice-9 gds-server) subprocess. - -;; Subprocess output goes into the `*GDS Process*' buffer, and -;; is then read from there one form at a time. `gds-read-cursor' is -;; the buffer position of the start of the next unread form. -(defvar gds-read-cursor nil) - -;; The guile executable used by the GDS server process. -(defcustom gds-guile-program "guile" - "*The guile executable used by the GDS server process." - :type 'string - :group 'gds) - -(defcustom gds-scheme-directory nil - "Where GDS's Scheme code is, if not in one of the standard places." - :group 'gds - :type '(choice (const :tag "nil" nil) directory)) - -(defun gds-start-server (procname unix-socket-name tcp-port protocol-handler) - "Start a GDS server process called PROCNAME, listening on Unix -domain socket UNIX-SOCKET-NAME and TCP port number TCP-PORT. -PROTOCOL-HANDLER should be a function that accepts and processes -one protocol form." - (with-current-buffer (get-buffer-create procname) - (erase-buffer) - (let* ((code (format "(begin - %s - (use-modules (ice-9 gds-server)) - (run-server %S %S))" - (if gds-scheme-directory - (concat "(set! %load-path (cons " - (format "%S" gds-scheme-directory) - " %load-path))") - "") - unix-socket-name - tcp-port)) - (process-connection-type nil) ; use a pipe - (proc (start-process procname - (current-buffer) - gds-guile-program - "-q" - "--debug" - "-c" - code))) - (set (make-local-variable 'gds-read-cursor) (point-min)) - (set (make-local-variable 'gds-protocol-handler) protocol-handler) - (set-process-filter proc (function gds-filter)) - (set-process-sentinel proc (function gds-sentinel)) - (set-process-coding-system proc 'latin-1-unix) - (process-kill-without-query proc) - proc))) - -;; Subprocess output filter: inserts normally into the process buffer, -;; then tries to reread the output one form at a time and delegates -;; processing of each form to `gds-protocol-handler'. -(defun gds-filter (proc string) - (with-current-buffer (process-buffer proc) - (save-excursion - (goto-char (process-mark proc)) - (insert-before-markers string)) - (goto-char gds-read-cursor) - (while (let ((form (condition-case nil - (read (current-buffer)) - (error nil)))) - (if form - (save-excursion - (funcall gds-protocol-handler (car form) (cdr form)))) - form) - (setq gds-read-cursor (point))))) - -;; Subprocess sentinel: do nothing. (Currently just here to avoid -;; inserting un-`read'able process status messages into the process -;; buffer.) -(defun gds-sentinel (proc event) - ) - - -;;;; The end! - -(provide 'gds-server) - -;;; gds-server.el ends here. |