branch: elpa/geiser-racket
commit b23d52d07765f6d6a73c0527634c2110feaee566
Author: Jose Antonio Ortega Ruiz <j...@gnu.org>
Commit: Jose Antonio Ortega Ruiz <j...@gnu.org>

    Racket: better help commands
    
    For some reason that i don't fully understand, evaluating a function
    in the racket/base namespace first thing after loading errortrace
    breaks the help macro (!).  This patches provides a workaround by
    actually invoking help first thing when Geiser starts, with alibi that
    it serves to preload the help index (in a separate thread).
    
    While i was at it, i improved the message printed in the minibuffer
    when no help is found.
---
 geiser/autodoc.rkt |  5 ++---
 geiser/startup.rkt |  4 +---
 geiser/user.rkt    | 13 +++++++++++--
 3 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/geiser/autodoc.rkt b/geiser/autodoc.rkt
index ee5c488..021a5fd 100644
--- a/geiser/autodoc.rkt
+++ b/geiser/autodoc.rkt
@@ -1,6 +1,6 @@
 ;;; autodoc.rkt -- suport for autodoc echo
 
-;; Copyright (C) 2009, 2010, 2011, 2012 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2009, 2010, 2011, 2012, 2013 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
@@ -25,8 +25,7 @@
 (define (get-help symbol mod)
   (if (eq? symbol mod)
       (get-mod-help mod)
-      (with-handlers ([exn? (lambda (_)
-                              (eval `(help ,symbol)))])
+      (with-handlers ([exn? (lambda (_) (eval `(help ,symbol)))])
         (eval `(help ,symbol #:from ,(ensure-module-spec mod))))))
 
 (define (get-mod-help mod)
diff --git a/geiser/startup.rkt b/geiser/startup.rkt
index 6af06da..bf9293b 100644
--- a/geiser/startup.rkt
+++ b/geiser/startup.rkt
@@ -1,6 +1,6 @@
 ;;; startup.rkt -- entry point
 
-;; Copyright (C) 2009, 2010 Jose Antonio Ortega Ruiz
+;; Copyright (C) 2009, 2010, 2013 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
@@ -9,8 +9,6 @@
 
 ;; Start date: Sat Apr 25, 2009 22:36
 
-;;; Code:
-
 (require version/utils)
 (unless (version<=? "5.0" (version))
   (error 'geiser
diff --git a/geiser/user.rkt b/geiser/user.rkt
index b7519b2..6aabe5e 100644
--- a/geiser/user.rkt
+++ b/geiser/user.rkt
@@ -9,14 +9,16 @@
 
 ;; Start date: Wed Mar 31, 2010 22:24
 
-#lang racket/base
+#lang racket
 
 (provide init-geiser-repl run-geiser-server start-geiser)
 
 (require (for-syntax racket/base)
          mzlib/thread
          racket/tcp
+         racket/help
          geiser
+         geiser/autodoc
          geiser/images
          geiser/enter
          geiser/eval
@@ -79,6 +81,7 @@
          [(geiser-no-values) (datum->syntax #f (void))]
          [(add-to-load-path) (add-to-load-path (read))]
          [(set-image-cache) (image-cache (read))]
+         [(help) (get-help (read) (read))]
          [(image-cache) (image-cache)]
          [(gcd) (current-directory)]
          [(cd) (current-directory (read))]
@@ -93,9 +96,14 @@
 (define (geiser-prompt-read prompt)
   (make-repl-reader (geiser-read prompt)))
 
+(define (preload-help)
+  (thread (lambda ()
+            (with-output-to-string (lambda () (help meh-i-dont-exist))))))
+
 (define (init-geiser-repl)
   (compile-enforce-module-constants #f)
   (current-load/use-compiled geiser-loader)
+  (preload-help)
   (current-prompt-read (geiser-prompt-read geiser-prompt))
   (current-print maybe-print-image))
 
@@ -124,5 +132,6 @@
                     lsner)))))
 
 (define (start-geiser (port 0) (hostname #f) (enforce-module-constants #f))
-  (thread (lambda () (run-geiser-server port enforce-module-constants 
hostname)))
+  (thread (lambda ()
+            (run-geiser-server port enforce-module-constants hostname)))
   (channel-get server-channel))

Reply via email to