From df85a7034789007da33e2b3a5efc12a32e53a651 Mon Sep 17 00:00:00 2001
From: Jose Antonio Ortega Ruiz <jao@gnu.org>
Date: Sun, 31 Oct 2010 19:47:40 +0100
Subject: REPL: RET on an error jumps to it

---
 elisp/geiser-repl.el | 34 +++++++++++++++++++++-------------
 1 file changed, 21 insertions(+), 13 deletions(-)

(limited to 'elisp')

diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el
index 900ba16..c5d6543 100644
--- a/elisp/geiser-repl.el
+++ b/elisp/geiser-repl.el
@@ -463,13 +463,20 @@ With a prefix argument, force exit by killing the scheme process."
     (insert "\n")
     (lisp-indent-line)))
 
+(defun geiser-repl--last-prompt-end ()
+  (if comint-last-prompt-overlay
+      (overlay-end comint-last-prompt-overlay)
+    (save-excursion (geiser-repl--bol) (point))))
+
+(defun geiser-repl--last-prompt-start ()
+  (if comint-last-prompt-overlay
+      (overlay-start comint-last-prompt-overlay)
+    (save-excursion (geiser-repl--bol) (point))))
+
 (defun geiser-repl--nesting-level ()
-  (let ((begin (if comint-last-prompt-overlay
-                   (overlay-end comint-last-prompt-overlay)
-                 (save-excursion (geiser-repl--bol) (point)))))
-    (save-restriction
-      (narrow-to-region begin (point-max))
-      (geiser-syntax--nesting-level))))
+  (save-restriction
+    (narrow-to-region (geiser-repl--last-prompt-end) (point-max))
+    (geiser-syntax--nesting-level)))
 
 (defun geiser-repl--send-input ()
   (let* ((proc (get-buffer-process (current-buffer)))
@@ -487,13 +494,14 @@ With a prefix argument, force exit by killing the scheme process."
 (defun geiser-repl--maybe-send ()
   (interactive)
   (let ((p (point)))
-    (end-of-line)
-    (if (<= (geiser-repl--nesting-level) 0)
-        (geiser-repl--send-input)
-      (goto-char p)
-      (if geiser-repl-auto-indent-p
-          (geiser-repl--newline-and-indent)
-        (insert "\n")))))
+    (cond ((< p (geiser-repl--last-prompt-start))
+           (ignore-errors (compile-goto-error)))
+          ((progn (end-of-line) (<= (geiser-repl--nesting-level) 0))
+           (geiser-repl--send-input))
+          (t (goto-char p)
+             (if geiser-repl-auto-indent-p
+                 (geiser-repl--newline-and-indent)
+               (insert "\n"))))))
 
 (define-derived-mode geiser-repl-mode comint-mode "REPL"
   "Major mode for interacting with an inferior scheme repl process.
-- 
cgit v1.2.3


From 2603c39ff801aa860420d65b589dfe831240d05d Mon Sep 17 00:00:00 2001
From: Jose Antonio Ortega Ruiz <jao@gnu.org>
Date: Sun, 31 Oct 2010 20:03:16 +0100
Subject: REPL: TAB when away from last prompt goes to next error

---
 elisp/geiser-repl.el | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

(limited to 'elisp')

diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el
index c5d6543..57111f4 100644
--- a/elisp/geiser-repl.el
+++ b/elisp/geiser-repl.el
@@ -12,6 +12,7 @@
 (require 'geiser-company)
 (require 'geiser-autodoc)
 (require 'geiser-edit)
+(require 'geiser-completion)
 (require 'geiser-impl)
 (require 'geiser-eval)
 (require 'geiser-connection)
@@ -503,6 +504,12 @@ With a prefix argument, force exit by killing the scheme process."
                  (geiser-repl--newline-and-indent)
                (insert "\n"))))))
 
+(defun geiser-repl--tab (n)
+  (interactive "p")
+  (if (> (point) (geiser-repl--last-prompt-end))
+      (geiser-completion--maybe-complete)
+    (compilation-next-error n)))
+
 (define-derived-mode geiser-repl-mode comint-mode "REPL"
   "Major mode for interacting with an inferior scheme repl process.
 \\{geiser-repl-mode-map}"
@@ -520,8 +527,6 @@ With a prefix argument, force exit by killing the scheme process."
     (geiser--save-msg (geiser-autodoc-mode 1)))
   (setq geiser-autodoc--inhibit-function 'geiser-con--is-debugging)
   (geiser-company--setup geiser-repl-company-p)
-  (setq geiser-smart-tab-mode-string "")
-  (geiser-smart-tab-mode t)
   ;; enabling compilation-shell-minor-mode without the annoying highlighter
   (compilation-setup t))
 
@@ -529,6 +534,7 @@ With a prefix argument, force exit by killing the scheme process."
 (define-key geiser-repl-mode-map "\C-m" 'geiser-repl--maybe-send)
 (define-key geiser-repl-mode-map [return] 'geiser-repl--maybe-send)
 (define-key geiser-repl-mode-map "\C-j" 'geiser-repl--newline-and-indent)
+(define-key geiser-repl-mode-map (kbd "TAB") 'geiser-repl--tab)
 
 (define-key geiser-repl-mode-map "\C-a" 'geiser-repl--bol)
 (define-key geiser-repl-mode-map (kbd "<home>") 'geiser-repl--bol)
-- 
cgit v1.2.3