#!/usr/bin/guile -s !# (load "open-program.scm") (define (open-ssh-repl hostname) (open-program "ssh" "ssh" hostname "emacs_repl")) (define (forward from to) (write (read from) to) (newline to)) ;; make sure atoms are spaced (define (service emacs-repl client) (forward client (program-write-port emacs-repl)) ;; request (forward (program-read-port emacs-repl) client) ;; reply (newline client) (close client)) ;; finish up (define (start-server emacs-repl node) (let ((s (socket AF_UNIX SOCK_STREAM 0))) (bind s AF_UNIX node) (listen s 5) (while #t (service emacs-repl (car (accept s)))))) (define (main host node) (start-server (open-ssh-repl host) node)) (apply main (cdr (program-arguments))) ; TEST ; (define (unix-domain-socket path) ; (let ((s (socket AF_UNIX SOCK_STREAM 0))) ; (connect s AF_UNIX path) s)) ; (define (server-eval obj) ; (let ((s (unix-domain-socket "/tmp/repl"))) ; (write obj s) ; (newline s) ; (read s))) ; (define (mainloop) ; (display "Enter expression:\n") ; (write (server-eval (read))) ; (newline) ; (mainloop)) ; (mainloop)