summaryrefslogtreecommitdiff
path: root/scheme/plt/geiser/user.rkt
blob: 48b7dd5e229252efe5c8687d1799f032501d9a5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
;;; user.ss -- global bindings visible to geiser users

;; Copyright (C) 2010 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
;; have received a copy of the license along with this program. If
;; not, see <http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5>.

;; Start date: Wed Mar 31, 2010 22:24

#lang scheme/base

(provide enter!)

(require geiser/enter geiser/eval (for-syntax scheme/base))

(define-syntax (enter! stx)
  (syntax-case stx ()
    [(enter! mod)
     (if (or (not (syntax-e #'mod))
             (module-path? (syntax->datum #'mod)))
         #'(do-enter! 'mod)
         (raise-syntax-error
          #f
          "not a valid module path, and not #f"
          stx
          #'mod))]
    [_ (raise-syntax-error
        #f
        "bad syntax; should be `(enter! <module-path-or-#f>)'"
        stx)]))

(define orig-namespace (current-namespace))

(define (do-enter! mod)
  (if mod
      (begin
        (enter-module mod)
        (let ([ns (module->namespace mod)])
          (current-namespace ns)
          (namespace-require 'geiser/user)))
      (current-namespace orig-namespace)))


(define orig-loader (current-load/use-compiled))

(define (init)
  (compile-enforce-module-constants #f)
  (current-load/use-compiled (module-loader orig-loader))
  (current-prompt-read (compose (make-repl-reader (current-prompt-read))
                                current-namespace)))

(init)

;;; user.ss ends here