diff options
-rw-r--r-- | elisp/geiser-inf.el | 2 | ||||
-rw-r--r-- | elisp/geiser-repl.el | 37 |
2 files changed, 24 insertions, 15 deletions
diff --git a/elisp/geiser-inf.el b/elisp/geiser-inf.el index 4b7020e..efe7e34 100644 --- a/elisp/geiser-inf.el +++ b/elisp/geiser-inf.el @@ -72,7 +72,7 @@ list of the form (server PORT).") (error (error "Unable to start REPL: %s" (error-message-string err)))) (geiser-inf--wait-for-prompt 10000) (cons (current-buffer) - (comint-redirect-results-list (geiser-inf--server-init-cmd impl) + (comint-redirect-results-list (geiser-inf--init-server-cmd impl) "(server-port \\([0-9]\\)+)" 1))))) diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el index fcf7278..dceec78 100644 --- a/elisp/geiser-repl.el +++ b/elisp/geiser-repl.el @@ -193,6 +193,11 @@ module command as a string") (and (null (cdr geiser-active-implementations)) (car geiser-active-implementations))) +(defun geiser-repl--get-impl (prompt) + (or (geiser-repl--only-impl-p) + (and (eq major-mode 'geiser-repl-mode) geiser-impl--implementation) + (geiser-repl--read-impl prompt))) + ;;; REPL connections @@ -203,7 +208,10 @@ module command as a string") (defvar geiser-repl--connection nil)) (make-variable-buffer-local - (defvar geiser-remote-p nil)) + (defvar geiser-repl--remote-p nil)) + +(make-variable-buffer-local + (defvar geiser-repl--inferior-buffer nil)) (defsubst geiser-repl--host () (car geiser-repl--address)) (defsubst geiser-repl--port () (cdr geiser-repl--address)) @@ -218,7 +226,7 @@ module command as a string") (defun geiser-repl--save-remote-data (address remote) (setq geiser-repl--address address) - (setq geiser-remote-p remote) + (setq geiser-repl--remote-p remote) (setq header-line-format (and remote (format "Host: %s Port: %s" (geiser-repl--host) @@ -277,12 +285,19 @@ module command as a string") (defsubst geiser-repl--history-file () (format "%s.%s" geiser-repl-history-filename geiser-impl--implementation)) +(defun geiser-repl--quit-inf () + (when (buffer-live-p geiser-repl--inferior-buffer) + (with-current-buffer geiser-repl--inferior-buffer + (let ((geiser-repl-query-on-exit-p nil)) (geiser-repl-exit)) + (kill-buffer)))) + (defun geiser-repl--on-quit () (comint-write-input-ring) (let ((cb (current-buffer)) (impl geiser-impl--implementation) (comint-prompt-read-only nil)) (ignore-errors (geiser-con--connection-close geiser-repl--connection)) + (geiser-repl--quit-inf) (setq geiser-repl--repls (remove cb geiser-repl--repls)) (dolist (buffer (buffer-list)) (when (buffer-live-p buffer) @@ -483,24 +498,18 @@ buffer." (defun run-geiser (impl) "Start a new Geiser REPL." (interactive - (list (or (geiser-repl--only-impl-p) - (and (eq major-mode 'geiser-repl-mode) - geiser-impl--implementation) - (geiser-repl--read-impl - "Start Geiser for scheme implementation: ")))) - (geiser-repl--start-repl impl nil nil nil)) + (list (geiser-repl--get-impl "Start Geiser for scheme implementation: "))) + (let ((b/p (geiser-inf--run-scheme impl))) + (setq geiser-repl--inferior-buffer (car b/p)) + (geiser-repl--start-repl impl "localhost" (cdr b/p) nil))) (defalias 'geiser 'run-geiser) (defun geiser-connect (impl &optional host port) "Start a new Geiser REPL connected to a remote Scheme process." (interactive - (list (or (geiser-repl--only-impl-p) - (and (eq major-mode 'geiser-repl-mode) - geiser-impl--implementation) - (geiser-repl--read-impl - "Scheme implementation: ")))) - (geiser-repl--start-repl impl t host port t)) + (list (geiser-repl--get-impl "Connect to Scheme implementation: "))) + (geiser-repl--start-repl impl host port t)) (make-variable-buffer-local (defvar geiser-repl--last-scm-buffer nil)) |