commander-s/scheme/scheme-commands.scm

47 lines
1.5 KiB
Scheme

(define command-prefix #\,)
(define (split-scheme-command-line command-line)
(let ((tokens (string-tokenize command-line)))
(values (string-drop (car tokens) 1)
(cdr tokens))))
(define (scheme-command-line? command-line)
(let ((trimmed (string-trim command-line)))
(and (> (string-length trimmed) 0)
(char=? (string-ref trimmed 0)
command-prefix))))
(define (eval-scheme-command command args)
(case (string->symbol command)
((in)
(set-evaluation-package! (string->symbol (car args)))
(string-append "moved to package " (car args)))
((open)
(package-open!
(evaluation-environment)
(lambda ()
(environment-ref
(config-package) (string->symbol (car args)))))
(string-append "opened package " (car args)))
((user)
(set-evaluation-package! 'nuit-eval)
"moved to package nuit-eval")
((inspect)
(if (null? args)
",inspect requires an argument"
(make-inspection-object
(eval-string (string-join args)))))
((reload-package)
(if (null? args)
",reload-package requires an argument"
(let ((s (get-structure (string->symbol (car args)))))
(if (not (package-unstable? (structure-package s)))
"read-only structure"
(begin
(set-package-loaded?! (structure-package s) #f)
(ensure-loaded s)
"reloaded package")))))
((exit)
(exit 0))
(else (error "unknwon scheme command" command))))