This change to `geiser-repl--superparen-function' improves
compatibility with electric-pair-mode, as the procedure will no longer
add too many parentheses. (It will move forward to the end of the line
instead.)

>From 9372443a6b70b4ebcda132d52c7ee367c5047426 Mon Sep 17 00:00:00 2001
From: Antero Mejr <m...@antr.me>
Date: Sat, 7 Sep 2024 20:43:28 +0000
Subject: [PATCH 1/2] Improve geiser-repl-superparen-mode compatibility

This change to `geiser-repl--superparen-function' improves
compatibility with electric-pair-mode, as the procedure will no longer
add too many parentheses.
---
 elisp/geiser-repl.el | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el
index 6f6cea7..8fa84b8 100644
--- a/elisp/geiser-repl.el
+++ b/elisp/geiser-repl.el
@@ -849,7 +849,12 @@ This mode may cause issues with structural editing modes such as paredit."
 (defun geiser-repl--superparen-function ()
   (when (char-equal (char-before) geiser-repl-superparen-character)
     (delete-char -1)
-    (insert-char ?\) (geiser-repl--nesting-level))))
+    (let ((level (geiser-repl--nesting-level)))
+      (if (memq nil (mapcar (lambda (idx)
+                              (= (char-after idx) ?\)))
+                            (number-sequence (point) (- (+ (point) level) 1))))
+          (insert-char ?\) level)
+        (forward-char level)))))
 
 (defvar-local geiser-repl-superparen-mode-string " S"
   "Modeline indicator for geiser-repl-superparen-mode")
-- 
2.45.1

Reply via email to