--- /dev/null
+(define-module (lang elisp base)
+
+ ;; Be pure. Nothing in this module requires symbols that map to the
+ ;; standard Guile builtins, and it creates a problem if this module
+ ;; has access to them, as @bind can dynamically change their values.
+ ;; Transformer output always uses the values of builtin procedures
+ ;; and macros directly.
+ #:pure
+
+ ;; {Elisp Primitives}
+ ;;
+ ;; In other words, Scheme definitions of elisp primitives. This
+ ;; should (ultimately) include everything that Emacs defines in C.
+ #:use-module (lang elisp primitives buffers)
+ #:use-module (lang elisp primitives char-table)
+ #:use-module (lang elisp primitives features)
+ #:use-module (lang elisp primitives format)
+ #:use-module (lang elisp primitives fns)
+ #:use-module (lang elisp primitives guile)
+ #:use-module (lang elisp primitives keymaps)
+ #:use-module (lang elisp primitives lists)
+ #:use-module (lang elisp primitives load)
+ #:use-module (lang elisp primitives match)
+ #:use-module (lang elisp primitives numbers)
+ #:use-module (lang elisp primitives pure)
+ #:use-module (lang elisp primitives read)
+ #:use-module (lang elisp primitives signal)
+ #:use-module (lang elisp primitives strings)
+ #:use-module (lang elisp primitives symprop)
+ #:use-module (lang elisp primitives syntax)
+ #:use-module (lang elisp primitives system)
+ #:use-module (lang elisp primitives time)
+
+ ;; Now switch into Emacs Lisp syntax.
+ #:use-syntax (lang elisp transform))
+
+;;; Everything below here is written in Elisp.
+
+(defun load-emacs (&optional new-load-path debug)
+ (if debug (message "load-path: %s" load-path))
+ (cond (new-load-path
+ (message "Setting load-path to: %s" new-load-path)
+ (setq load-path new-load-path)))
+ (if debug (message "load-path: %s" load-path))
+ (scheme (read-set! keywords 'prefix))
+ (message "Calling loadup.el to clothe the bare Emacs...")
+ (load "loadup.el")
+ (message "Guile Emacs now fully clothed"))