Slime REPL has a feature that if you put the point over the old repl input then hit enter, the old repl input will be yanked into the repl again to the end of the comint buffer. I find it is very convenient way of going through the repl input history besides cycling through the history using keybindings M-n and M-p.
How about adding this feature to geiser-repl? --8<---------------cut here---------------start------------->8--- >From 31407eac6011bd6224699b95d4c9e723b83e67f2 Mon Sep 17 00:00:00 2001 From: Darren Hoo <[email protected]> Date: Tue, 21 May 2013 15:01:11 +0800 Subject: [PATCH] yank input if point is over history input --- elisp/geiser-repl.el | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el index 1d1b317..87c1588 100644 --- a/elisp/geiser-repl.el +++ b/elisp/geiser-repl.el @@ -525,15 +525,28 @@ module command as a string") (narrow-to-region (geiser-repl--last-prompt-end) (point-max)) (geiser-syntax--nesting-level))) +(defun geiser-repl--mark-input-bounds (beg end) + (add-text-properties beg end '(field t))) + +(defun geiser-repl--is-history-input () + (get-text-property (if (eolp) (save-excursion (comint-bol)) (point)) 'field)) + +(defun geiser-repl--grab-input () + (let ((pos (comint-bol))) + (goto-char (point-max)) + (insert (field-string-no-properties pos)))) + (defun geiser-repl--send-input () (let* ((proc (get-buffer-process (current-buffer))) (pmark (and proc (process-mark proc))) - (intxt (and pmark (buffer-substring pmark (point))))) + (intxt (and pmark (buffer-substring pmark (point)))) + (eob (point-max))) (when intxt (and geiser-repl-forget-old-errors-p (not (geiser-repl--is-debugging)) (compilation-forget-errors)) (geiser-repl--prepare-send) + (geiser-repl--mark-input-bounds pmark eob) (comint-send-input) (when (string-match "^\\s-*$" intxt) (comint-send-string proc (geiser-eval--scheme-str '(:ge no-values))) @@ -543,7 +556,9 @@ module command as a string") (interactive) (let ((p (point))) (cond ((< p (geiser-repl--last-prompt-start)) - (ignore-errors (compile-goto-error))) + (if (geiser-repl--is-history-input) + (geiser-repl--grab-input) + (ignore-errors (compile-goto-error)))) ((progn (end-of-line) (<= (geiser-repl--nesting-level) 0)) (geiser-repl--send-input)) (t (goto-char p) -- 1.7.11.1 --8<---------------cut here---------------end--------------->8---
