emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[nongnu] elpa/geiser c681e2b2e9: Interactive REPL start in C-c C-k and C


From: ELPA Syncer
Subject: [nongnu] elpa/geiser c681e2b2e9: Interactive REPL start in C-c C-k and C-c C-l
Date: Tue, 23 Aug 2022 12:59:25 -0400 (EDT)

branch: elpa/geiser
commit c681e2b2e92da2e856835449d7097bbe67394a52
Author: jao <jao@gnu.org>
Commit: jao <jao@gnu.org>

    Interactive REPL start in C-c C-k and C-c C-l
    
    Should address, sort of, issue #46
---
 elisp/geiser-compile.el | 18 ++++++++++++------
 elisp/geiser-mode.el    |  4 +---
 elisp/geiser-repl.el    | 23 ++++++++++++++++++++++-
 3 files changed, 35 insertions(+), 10 deletions(-)

diff --git a/elisp/geiser-compile.el b/elisp/geiser-compile.el
index e05459c322..b1a07ff2b6 100644
--- a/elisp/geiser-compile.el
+++ b/elisp/geiser-compile.el
@@ -16,8 +16,7 @@
 (require 'geiser-autodoc)
 (require 'geiser-eval)
 (require 'geiser-base)
-
-(declare-function geiser-restart-repl "geiser-mode" ())
+(require 'geiser-repl)
 
 
 ;;; Auxiliary functions:
@@ -46,6 +45,12 @@
     (geiser-autodoc--clean-cache)
     (geiser-eval--send code cont)))
 
+(defun geiser-compile--ensure-repl (force)
+  (when (or force
+            (and (not (geiser-repl--repl-buffer-p))
+                 (yes-or-no-p "No REPL is running: start it?")))
+    (geiser-repl-restart-repl)))
+
 
 ;;; User commands:
 
@@ -54,25 +59,26 @@
   (interactive "FScheme file: ")
   (geiser-compile--file-op path t "Compiling"))
 
-(defun geiser-compile-current-buffer (&optional restart-p)
+(defun geiser-compile-current-buffer (&optional restart)
   "Compile and load current Scheme file.
 
 With prefix, restart REPL before compiling the file."
   (interactive "P")
-  (when restart-p (geiser-restart-repl))
+  (geiser-compile--ensure-repl restart)
   (geiser-compile-file (buffer-file-name (current-buffer))))
 
 (defun geiser-load-file (path)
   "Load Scheme file."
   (interactive "FScheme file: ")
+  (geiser-compile--ensure-repl nil)
   (geiser-compile--file-op (file-local-name (expand-file-name path)) nil 
"Loading"))
 
-(defun geiser-load-current-buffer (&optional restart-p)
+(defun geiser-load-current-buffer (&optional restart)
   "Load current Scheme file.
 
 With prefix, restart REPL before loading the file."
   (interactive "P")
-  (when restart-p (geiser-restart-repl))
+  (geiser-compile--ensure-repl restart)
   (geiser-load-file (buffer-file-name (current-buffer))))
 
 ;;;###autoload
diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el
index 615bbdd8c0..bc074f091c 100644
--- a/elisp/geiser-mode.el
+++ b/elisp/geiser-mode.el
@@ -267,9 +267,7 @@ With prefix, recursively macro-expand the resulting 
expression."
 
 With prefix, try to enter the current buffer's module."
   (interactive "P")
-  (if arg
-      (switch-to-geiser-module (geiser-eval--get-module) (current-buffer))
-    (switch-to-geiser nil nil (current-buffer))))
+  (geiser-repl--switch-to-repl arg))
 
 (defun geiser-mode-switch-to-repl-and-enter ()
   "Switches to Geiser REPL and enters current buffer's module."
diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el
index 0a1f544163..22fbf289b2 100644
--- a/elisp/geiser-repl.el
+++ b/elisp/geiser-repl.el
@@ -18,7 +18,6 @@
 (require 'geiser-syntax)
 (require 'geiser-impl)
 (require 'geiser-eval)
-(require 'geiser-compile)
 (require 'geiser-connection)
 (require 'geiser-menu)
 (require 'geiser-image)
@@ -1058,6 +1057,28 @@ If no REPL is running, execute `run-geiser' to start a 
fresh one."
       (switch-to-geiser nil nil (or buffer (current-buffer))))
     (geiser-repl--send cmd)))
 
+(defun geiser-repl--switch-to-repl (arg)
+  (if arg
+      (switch-to-geiser-module (geiser-eval--get-module) (current-buffer))
+    (switch-to-geiser nil nil (current-buffer))))
+
+(defun geiser-repl--repl-buffer-p ()
+  (and (buffer-live-p geiser-repl--repl) geiser-repl--repl))
+
+(defun geiser-repl-restart-repl ()
+  "Restarts the REPL associated with the current buffer."
+  (interactive)
+  (let ((b (current-buffer))
+        (impl geiser-impl--implementation))
+    (when (geiser-repl--repl-buffer-p)
+      (geiser-repl--switch-to-repl nil)
+      (comint-kill-subjob)
+      (sit-for 0.1)) ;; ugly hack; but i don't care enough to fix it
+    (run-geiser impl)
+    (sit-for 0.2)
+    (goto-char (point-max))
+    (pop-to-buffer b)))
+
 (defun geiser-repl-import-module (&optional module)
   "Import a given module in the current namespace of the REPL."
   (interactive)



reply via email to

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