diff options
| -rw-r--r-- | elisp/geiser-completion.el | 3 | ||||
| -rw-r--r-- | elisp/geiser-mode.el | 3 | ||||
| -rw-r--r-- | elisp/geiser-repl.el | 69 | 
3 files changed, 41 insertions, 34 deletions
| diff --git a/elisp/geiser-completion.el b/elisp/geiser-completion.el index c1d1a0f..5744e9b 100644 --- a/elisp/geiser-completion.el +++ b/elisp/geiser-completion.el @@ -187,7 +187,8 @@ terminates a current completion."  (defvar geiser-completion--module-history nil)  (defun geiser-completion--read-module (&optional prompt default history) -  (let ((minibuffer-local-completion-map geiser-completion--module-minibuffer-map)) +  (let ((minibuffer-local-completion-map +         geiser-completion--module-minibuffer-map))      (completing-read (or prompt "Module name: ")                       geiser-completion--module-list-func                       nil nil nil diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el index 34e7e2b..72d3536 100644 --- a/elisp/geiser-mode.el +++ b/elisp/geiser-mode.el @@ -155,7 +155,8 @@ With prefix, recursively macro-expand the resulting expression."    "Switches to Geiser REPL.  With prefix, try to enter the current's buffer module."    (interactive "P") -  (if arg (switch-to-geiser-module) (switch-to-geiser))) +  (if arg (switch-to-geiser-module (geiser-eval--get-module)) +    (switch-to-geiser)))  (defun geiser-mode-switch-to-repl-and-enter ()    "Switches to Geiser REPL and enters current's buffer module." diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el index a836f18..5e1ab3d 100644 --- a/elisp/geiser-repl.el +++ b/elisp/geiser-repl.el @@ -228,26 +228,28 @@ If no REPL is running, execute `run-geiser' to start a fresh one."  (defalias 'geiser 'switch-to-geiser) +(defun geiser-repl--send (cmd) +  (when (and cmd (eq major-mode 'geiser-repl-mode)) +    (goto-char (point-max)) +    (comint-kill-input) +    (insert cmd) +    (let ((comint-input-filter (lambda (x) nil))) +      (comint-send-input nil t)))) +  (geiser-impl--define-caller geiser-repl--enter-cmd enter-command (module)    "Function taking a module designator and returning a REPL enter  module command as a string") -(defun switch-to-geiser-module () -  "Switch to running Geiser REPL and try to enter current module." +(defun switch-to-geiser-module (&optional module) +  "Switch to running Geiser REPL and try to enter a given module."    (interactive) -  (let ((m (geiser-repl--enter-cmd geiser-impl--implementation -                                   (geiser-eval--get-module)))) +  (let* ((module (or module +                     (geiser-completion--read-module "Switch to module: "))) +         (cmd (and module +                   (geiser-repl--enter-cmd geiser-impl--implementation +                                           module))))      (switch-to-geiser) -    (when (and m (eq major-mode 'geiser-repl-mode)) -      (goto-char (point-max)) -      (let ((b (or (and comint-last-prompt-overlay -                        (overlay-start comint-last-prompt-overlay)) -                   (point)))) -        (insert m) -        (let ((e (point)) -              (comint-input-filter (lambda (x) nil))) -          (comint-send-input nil t) -          (comint-kill-region b (1+ e))))))) +    (geiser-repl--send cmd)))  (defun geiser-repl-nuke ()    "Try this command if the REPL becomes unresponsive." @@ -272,21 +274,24 @@ module command as a string")          (comint-prompt-read-only nil))      (setq geiser-repl--repls (remove cb geiser-repl--repls))      (dolist (buffer (buffer-list)) -      (with-current-buffer buffer -        (when (and (eq geiser-impl--implementation impl) -                   (equal cb (geiser-repl--this-buffer-repl))) -          (geiser-repl--get-repl geiser-impl--implementation)))))) +      (when (buffer-live-p buffer) +        (with-current-buffer buffer +          (when (and (eq geiser-impl--implementation impl) +                     (equal cb (geiser-repl--this-buffer-repl))) +            (geiser-repl--get-repl geiser-impl--implementation)))))))  (defun geiser-repl--sentinel (proc event) -  (with-current-buffer (process-buffer proc) -    (let ((comint-prompt-read-only nil) -          (comint-input-ring-file-name (geiser-repl--history-file))) -      (geiser-repl--on-quit) -      (push (current-buffer) geiser-repl--closed-repls) -      (when (buffer-name (current-buffer)) -        (comint-kill-region comint-last-input-start (point)) -        (insert "\nIt's been nice interacting with you!\n") -        (insert "Press C-cz to bring me back.\n" ))))) +  (let ((pb (process-buffer proc))) +    (when (buffer-live-p pb) +      (with-current-buffer pb +        (let ((comint-prompt-read-only nil) +              (comint-input-ring-file-name (geiser-repl--history-file))) +          (geiser-repl--on-quit) +          (push pb geiser-repl--closed-repls) +          (when (buffer-name (current-buffer)) +            (comint-kill-region comint-last-input-start (point)) +            (insert "\nIt's been nice interacting with you!\n") +            (insert "Press C-cz to bring me back.\n" )))))))  (defun geiser-repl--on-kill ()    (geiser-repl--on-quit) @@ -389,6 +394,9 @@ module command as a string")    ("Edit symbol" "\M-." geiser-edit--symbol-at-point     :enable (symbol-at-point))    -- +  ("Switch to module..." ("\C-c\C-m" "\C-cm") switch-to-geiser-module) +  ("Load module" ("\C-c\C-l" "\C-cl") geiser-load-file) +  --    ("Previous matching input" "\M-p" comint-previous-matching-input-from-input     "Previous input matching current")    ("Next matching input" "\M-n" comint-next-matching-input-from-input @@ -396,12 +404,9 @@ module command as a string")    ("Previous input" "\C-c\M-p" comint-previous-input)    ("Next input" "\C-c\M-n" comint-next-input)    -- -  (mode "Autodoc mode" "\C-ca" geiser-autodoc-mode) -  ("Symbol documentation" "\C-cd" geiser-doc-symbol-at-point -   "Documentation for symbol at point" :enable (symbol-at-point)) -  ("Module documentation" "\C-cm" geiser-repl--doc-module +  (mode "Autodoc mode" ("\C-c\C-a" "\C-ca") geiser-autodoc-mode) +  ("Module documentation" ("\C-c\C-d" "\C-cd") geiser-repl--doc-module     "Documentation for module at point" :enable (symbol-at-point)) -  ("Load module" "\C-cl" geiser-load-file)    --    ("Restart" ("\C-cz" "\C-c\C-z") switch-to-geiser     :enable (not (geiser-repl--this-buffer-repl))) | 
