;;client and server ;; server functions - receive incoming requests. eval code (defvar prm-process nil) (defvar prmclient-process nil) (defvar the_buffer nil) (defvar host nil) (defvar port nil) (defun prmserv-start (&optional port) (interactive (list (read-string "Serve requests on port: " "8080"))) (if (null port) (setq port 8080) (if (stringp port) (setq port (string-to-number port)))) (if prm-process (delete-process prm-process)) (setq the_buffer (generate-new-buffer "prm")) (setq prm-process (make-network-process :name "prm" :buffer the_buffer :host 'local :service port :server t :noquery t :filter 'prm-serve))) (defun prm-stop () (interactive) (when prm-process (message "networked.el server on port %d has stopped" (cadr (process-contact prm-process))) (delete-process prm-process) (setq prm-process nil))) (defun prm-serve (proc string) (let ((prm-process proc)) (setq temp_buffer (get-buffer-create "temp_buffer__")) (princ string temp_buffer) (switch-to-buffer the_buffer) (eval-buffer temp_buffer) (set-buffer temp_buffer) (erase-buffer))) ;; client functions - initiate connection, send buffer, send region, send last sexp ;; how collab editing could work ?? (defun prmclient-start (&optional port host) (interactive (list (read-string "Send requests on port: " "8080"))) (if (null port) (setq port 8080) (if (stringp port) (setq port (string-to-number port))) (if prmclient-process (delete-process prmclient-process)) (setq prmclient-process (make-network-process :name "prm_client" :host host :service port)))) (defun prm-sendbufferascode() (interactive) ;; (switch-to-buffer the_buffer) (process-send-string "prm_client" (buffer-string))) (defun prm-sendregionascode() (interactive) (save-excursion (save-restriction (narrow-to-region (region-beginning) (region-end)) (process-send-string "prm_client" (buffer-string))))) (prmclient-start 8080 "127.0.0.1") (prmserv-start 8080) ;;(prm-stop) (prm-sendregionastext) (defun prm-sendregionastext() ;; works as long as we don't have any inverted commas - copy to temp-buffer, parse all "s and convert to \" (interactive) (save-excursion (save-restriction (narrow-to-region (region-beginning) (region-end)) (process-send-string "prm_client" (format "(princ \"%s\" (current-buffer))" (buffer-string)))))) (defun prm-bufferastext() (interactive) (process-send-string "prm_client" (format "(princ \"%s\")" (buffer-string)))) (princ "ggg" (current-buffer))