[Gardeners] Easier ASDF?

Timofei Shatrov grue at mail.ru
Fri Aug 4 05:03:30 CDT 2006


Currently ASDF is not very user-friendly. I can think about at least two improvements: a separate function instead of (asdf:oos 'asdf:load-op :foo), and asking for path when some library is not found. I tried to write a function that solves both of these problems:

(defun load-lib (library)
  "Loads a library using ASDF"
  (handler-bind ((asdf:missing-component
                  (lambda (c)
                    (print-object c *standard-output*)
                    (format t "~%~%Enter the path of its possible location:")
                    (let ((path (read-line)))
                      (if (zerop (length path)) 
                          (invoke-restart 'abort-request) ;or (abort)
                                                          ;in SLIME-less
                                                          ;environment
                          (progn
                            (push path asdf:*central-registry*) 
                            (invoke-restart 'asdf:retry)))))))
    (asdf:oos 'asdf:load-op library))) 

Unfortunately it doesn't work, because there is no RETRY restart available at the time of searching through *central-registry*. At the time the missing-component error occurs there is no way to fix it, without patching up asdf.lisp. There must be another way, for example through *system-definition-search-functions*. Or maybe it's better to encourage ASDF developers to provide retry restart for the missing-component error? 





More information about the Gardeners mailing list