123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- (define-module (lang elisp internals load)
- #:use-module (ice-9 optargs)
- #:use-module (lang elisp internals signal)
- #:use-module (lang elisp internals format)
- #:use-module (lang elisp internals evaluation)
- #:replace (load)
- #:export (load-path))
- (define load-path '("/usr/share/emacs/20.7/lisp/"
- "/usr/share/emacs/20.7/lisp/emacs-lisp/"))
- (define* (load file #:optional noerror nomessage nosuffix must-suffix)
- (define (load1 filename)
- (let ((pathname (let loop ((dirs (if (char=? (string-ref filename 0) #\/)
- '("")
- load-path)))
- (cond ((null? dirs) #f)
- ((file-exists? (in-vicinity (car dirs) filename))
- (in-vicinity (car dirs) filename))
- (else (loop (cdr dirs)))))))
- (if pathname
- (begin
- (or nomessage
- (message "Loading %s..." pathname))
- (with-input-from-file pathname
- (lambda ()
- (let loop ((form (read)))
- (or (eof-object? form)
- (begin
- ;; Note that `eval' already incorporates use
- ;; of the specified module's transformer.
- (eval form the-elisp-module)
- (loop (read)))))))
- (or nomessage
- (message "Loading %s...done" pathname))
- #t)
- #f)))
- (or (and (not nosuffix)
- (load1 (string-append file ".el")))
- (and (not must-suffix)
- (load1 file))
- noerror
- (signal 'file-error
- (list "Cannot open load file" file))))
|