diff options
Diffstat (limited to 'scheme')
| -rw-r--r-- | scheme/racket/geiser/modules.rkt | 36 | ||||
| -rw-r--r-- | scheme/racket/geiser/user.rkt | 23 | 
2 files changed, 38 insertions, 21 deletions
| diff --git a/scheme/racket/geiser/modules.rkt b/scheme/racket/geiser/modules.rkt index 9e6e14c..2c57db9 100644 --- a/scheme/racket/geiser/modules.rkt +++ b/scheme/racket/geiser/modules.rkt @@ -1,6 +1,6 @@  ;;; modules.rkt -- module metadata -;; Copyright (C) 2009, 2010 Jose Antonio Ortega Ruiz +;; Copyright (C) 2009, 2010, 2011 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 @@ -51,11 +51,16 @@      (when (namespace? ns)        (current-namespace ns)))) -(define (namespace->module-path-name ns) -  (let ([rmp (variable-reference->resolved-module-path -              (eval '(#%variable-reference) (or ns (current-namespace))))]) -    (and (resolved-module-path? rmp) -         (resolved-module-path-name rmp)))) +(define (namespace->rmp ns) +  (with-handlers ([exn? (const #f)]) +    (variable-reference->resolved-module-path +     (eval '(#%variable-reference) (or ns (current-namespace)))))) + +(define (namespace->module-path-name ns (p #f)) +  (let ([rmp (namespace->rmp ns)]) +    (or (and (resolved-module-path? rmp) +             (resolved-module-path-name rmp)) +        p)))  (define (module-spec->path-name spec)    (and (symbol? spec) @@ -64,10 +69,13 @@                            (namespace->module-path-name                             (module-spec->namespace spec #f #f)))))) +(define unknown-module-name "*unresolved module*") +  (define (module-path-name->name path) -  (cond [(path? path) -         (let* ([path (path->string path)] -                [cpaths (map (compose path->string path->directory-path) +  (cond [(path? path) (module-path-name->name (path->string path))] +        ;; [(eq? path '#%kernel) "(kernel)"] +        [(string? path) +         (let* ([cpaths (map (compose path->string path->directory-path)                               (current-library-collection-paths))]                  [prefix-len (lambda (p)                                (let ((pl (string-length p))) @@ -80,19 +88,17 @@                 (let-values ([(_ base __) (split-path path)])                   (path->string base))                 (regexp-replace "\\.[^./]*$" real-path "")))] -        ;; [(eq? path '#%kernel) "(kernel)"] -        [(string? path) path]          [(symbol? path) (symbol->string path)] -        [else ""])) +        [else unknown-module-name]))  (define (module-path-index->name mpi)    (let ([rmp (module-path-index-resolve mpi)])      (if (resolved-module-path? rmp)          (module-path-name->name (resolved-module-path-name rmp)) -        "<unknown module>"))) +        unknown-module-name))) -(define namespace->module-name -  (compose module-path-name->name namespace->module-path-name)) +(define (namespace->module-name ns (p #f)) +  (module-path-name->name (namespace->module-path-name ns p)))  (define (module-identifiers mod)    (define (extract-ids ls) diff --git a/scheme/racket/geiser/user.rkt b/scheme/racket/geiser/user.rkt index 72aa48a..69a5df7 100644 --- a/scheme/racket/geiser/user.rkt +++ b/scheme/racket/geiser/user.rkt @@ -22,13 +22,23 @@           geiser/modules)  (define top-namespace (current-namespace)) +(define last-entered (make-parameter "")) + +(define (do-enter mod name) +  (enter-module mod) +  (current-namespace (module->namespace mod)) +  (last-entered name))  (define (enter! mod stx) -  (cond [(not mod) (current-namespace top-namespace)] -        [(module-path? mod) -         (enter-module mod) -         (current-namespace (module->namespace mod))] -        [(path-string? mod) (enter! `(file ,mod) stx)] +  (cond [(not mod) +         (current-namespace top-namespace) +         (last-entered "")] +        [(symbol? mod) (do-enter mod (symbol->string mod))] +        [(and (list? mod) +              (= 2 (length mod)) +              (eq? 'file (car mod)) +              (path-string? (cadr mod))) (do-enter mod (cadr mod))] +        [(path-string? mod) (do-enter `(file ,mod) mod)]          [else (raise-syntax-error                 #f                 "not a valid module path, and not #f" @@ -68,7 +78,8 @@  (define geiser-prompt    (lambda () -    (printf "racket@~a> " (namespace->module-name (current-namespace))))) +    (printf "racket@~a> " +            (namespace->module-name (current-namespace) (last-entered)))))  (define (geiser-prompt-read prompt)    (make-repl-reader (geiser-read prompt))) | 
