geiser-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Geiser-users] [PATCH] Connecting to a Unix-domain socket


From: Ludovic Courtès
Subject: [Geiser-users] [PATCH] Connecting to a Unix-domain socket
Date: Tue, 18 Feb 2014 17:29:32 +0100
User-agent: Gnus/5.130007 (Ma Gnus v0.7) Emacs/24.3 (gnu/linux)

Hello!

The patches below allow Geiser to connect to a Unix-domain socket via
M-x geiser-connect-local.

It works for me, but I’m not too familiar with elisp, so proper review
is in order.  :-)

Thanks,
Ludo’.

From 47c6179998cb1c8f23b29016c4924f83df8e7315 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <address@hidden>
Date: Tue, 18 Feb 2014 17:24:47 +0100
Subject: [PATCH 1/2] Fix 'geiser-repl--last-prompt-end' non-comint case.

---
 elisp/geiser-repl.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el
index 995bb3b..316e6ea 100644
--- a/elisp/geiser-repl.el
+++ b/elisp/geiser-repl.el
@@ -290,7 +290,7 @@ module command as a string")
          (marker-position (cdr comint-last-prompt)))
         ((and (boundp 'comint-last-prompt-overlay) comint-last-prompt-overlay)
          (overlay-end comint-last-prompt-overlay))
-        (t (save-excursion (geiser-repl--bol) (point)))))
+        (t (save-excursion (end-of-line) (point)))))
 
 (defun geiser-repl--last-prompt-start ()
   (cond ((and (boundp 'comint-last-prompt) (markerp (car comint-last-prompt)))
-- 
1.8.4

From 9a01cff30697443cb6050e6509d04f264c703cb3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <address@hidden>
Date: Tue, 18 Feb 2014 17:25:44 +0100
Subject: [PATCH 2/2] Add 'geiser-connect-local' to connect over Unix-domain
 socket.

---
 elisp/geiser-repl.el | 38 ++++++++++++++++++++++++++++++--------
 1 file changed, 30 insertions(+), 8 deletions(-)

diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el
index 316e6ea..e0fb06b 100644
--- a/elisp/geiser-repl.el
+++ b/elisp/geiser-repl.el
@@ -327,10 +327,14 @@ module command as a string")
 
 (defun geiser-repl--save-remote-data (address)
   (setq geiser-repl--address address)
-  (setq header-line-format (and address
-                                (format "Host: %s   Port: %s"
-                                        (geiser-repl--host)
-                                        (geiser-repl--port)))))
+  (setq header-line-format
+       (cond ((consp address)
+              (format "Host: %s   Port: %s"
+                      (geiser-repl--host)
+                      (geiser-repl--port)))
+             ((stringp address)
+              (format "Socket: %s" address))
+             (t nil))))
 
 (defun geiser-repl--output-filter (txt)
   (geiser-con--connection-update-debugging geiser-repl--connection txt)
@@ -384,10 +388,18 @@ module command as a string")
   (setq comint-prompt-regexp prompt)
   (let* ((name (geiser-repl--repl-name impl))
          (buff (current-buffer))
-         (args (if address (list address)
-                 `(,(geiser-repl--binary impl)
-                   nil
-                   ,@(geiser-repl--arglist impl)))))
+         (args (cond ((consp address) (list address))
+                    ((stringp address) '(()))
+                    (t `(,(geiser-repl--binary impl)
+                         nil
+                         ,@(geiser-repl--arglist impl))))))
+    (when (and address (stringp address))
+      ;; Connect over a Unix-domain socket.
+      (make-network-process :name (buffer-name buff)
+                           :buffer buff
+                           :family 'local
+                           :remote address))
+
     (condition-case err
         (apply 'make-comint-in-buffer `(,name ,buff ,@args))
       (error (insert "Unable to start REPL:\n"
@@ -715,6 +727,16 @@ buffer."
                              (geiser-repl--read-address host port))
     (geiser-repl--maybe-remember-scm-buffer buffer)))
 
+(defun geiser-connect-local (impl &optional socket)
+  "Start a new Geiser REPL connected to a remote Scheme process
+over a Unix-domain socket."
+  (interactive
+   (list (geiser-repl--get-impl "Connect to Scheme implementation: ")))
+  (let ((buffer (current-buffer)))
+    (geiser-repl--start-repl impl
+                             (read-file-name "Socket file name: "))
+    (geiser-repl--maybe-remember-scm-buffer buffer)))
+
 (make-variable-buffer-local
  (defvar geiser-repl--last-scm-buffer nil))
 
-- 
1.8.4

Attachment: pgpdeu_RVe0EB.pgp
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]