From 9ff03facb2ea1e0a6b320f603dfd7e0e787d9593 Mon Sep 17 00:00:00 2001
From: Jose Antonio Ortega Ruiz <jao@gnu.org>
Date: Sat, 31 May 2014 20:54:22 +0200
Subject: Finer control of debugging window popups

It's now possible to control whether we jump to the debug window on
evaluation errors (geiser-debug-jump-to-debug-p) and whether we show it
all (geiser-debug-show-debug-p).
---
 elisp/geiser-debug.el  | 33 ++++++++++++++++++++++++++++-----
 elisp/geiser-racket.el |  7 ++++---
 2 files changed, 32 insertions(+), 8 deletions(-)

(limited to 'elisp')

diff --git a/elisp/geiser-debug.el b/elisp/geiser-debug.el
index 611e50e..a63e8eb 100644
--- a/elisp/geiser-debug.el
+++ b/elisp/geiser-debug.el
@@ -1,6 +1,6 @@
 ;;; geiser-debug.el -- displaying debug information and evaluation results
 
-;; Copyright (C) 2009, 2010, 2011, 2012, 2013 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jose Antonio Ortega Ruiz
 
 ;; This program is free software; you can redistribute it and/or
 ;; modify it under the terms of the Modified BSD License. You should
@@ -42,6 +42,22 @@ has no effect."
   :group 'geiser-debug
   :type 'int)
 
+(geiser-custom--defcustom geiser-debug-jump-to-debug-p t
+  "When set to t (the default), jump to the debug pop-up buffer
+  in case of evaluation errors.
+
+See also `geiser-debug-show-debug-p`. "
+  :group 'geiser-debug
+  :type 'boolean)
+
+(geiser-custom--defcustom geiser-debug-show-debug-p t
+  "When set to t (the default), show the debug pop-up buffer in
+  case of evaluation errors.
+
+This option takes effect even if `geiser-debug-jump-to-debug-p`
+is set."
+  :group 'geiser-debug
+  :type 'boolean)
 
 (geiser-custom--defcustom geiser-debug-auto-display-images-p t
   "Whether to automatically invoke the external viewer to display
@@ -116,9 +132,8 @@ buffer.")
     (insert res)
     (let ((end (point)))
       (goto-char begin)
-      (let ((no
-             (geiser-image--replace-images t
-                                           geiser-debug-auto-display-images-p)))
+      (let ((no (geiser-image--replace-images
+                 t geiser-debug-auto-display-images-p)))
         (goto-char end)
         (newline 2)
         (and no (> no 0))))))
@@ -151,7 +166,15 @@ buffer.")
         (insert "\nExpression evaluated was:\n\n")
         (geiser-debug--display-error impl module nil what))
       (goto-char (point-min)))
-    (when (or img dbg) (geiser-debug--pop-to-buffer))))
+    (when (or img dbg)
+      (geiser-debug--pop-to-buffer)
+      (when (and dbg (not geiser-debug-jump-to-debug-p))
+        (next-error)
+        (when (not geiser-debug-show-debug-p)
+          (pop-to-buffer (geiser-debug--buffer)
+                         'display-buffer-reuse-window t)
+          (View-quit))
+        (message "Evaluation error: %s" dbg)))))
 
 (defsubst geiser-debug--wrap-region (str)
   (format "(begin %s)" str))
diff --git a/elisp/geiser-racket.el b/elisp/geiser-racket.el
index 4c1b127..f2cec3a 100644
--- a/elisp/geiser-racket.el
+++ b/elisp/geiser-racket.el
@@ -251,10 +251,10 @@ using start-geiser, a procedure in the geiser/server module."
         (mapc 'geiser-edit--buttonize-files geiser-racket--file-rxs)
         (goto-char end)
         (newline))))
-  (or key (not (zerop (length msg)))))
+  (if (and msg (string-match "\\(.+\\)$" msg)) (match-string 1 msg) key))
 
 
-;;; Trying to ascertain whether a buffer is mzscheme scheme:
+;;; Trying to ascertain whether a buffer is racket code:
 
 (defun geiser-racket--guess ()
   (or (save-excursion
@@ -275,7 +275,8 @@ using start-geiser, a procedure in the geiser/server module."
 (defun geiser-racket--keywords ()
   (append geiser-racket-font-lock-forms
           (when geiser-racket-extra-keywords
-            `((,(format "[[(]%s\\>" (regexp-opt geiser-racket-extra-keywords 1))
+            `((,(format "[[(]%s\\>"
+                        (regexp-opt geiser-racket-extra-keywords 1))
                . 1)))))
 
 (geiser-syntax--scheme-indent
-- 
cgit v1.2.3