(defmacro stfu (&body body) (let ((no (gensym))) `(let (,no) (unwind-protect (progn (setf ,no (make-broadcast-stream)) (let ((*standard-output* ,no) (*error-output* ,no) ;; (*debug-io* ,no) (*trace-output* ,no) (*load-print* nil) (*load-verbose* nil) ;;(asdf::*verbose-out* nil) ) ,@body)) (when ,no (close ,no)))))) (defun load-lisp-command-from (command-name package &key silent) "Try to load a command in the Lisp path. Return the command on success or NIL on failure. The Lisp path is most likely the ASDF path." (let (succeeded) (handler-case (let ((asdf:*compile-file-warnings-behaviour* :ignore) (asdf:*compile-file-failure-behaviour* :ignore)) ;; :error :warn :ignore (if silent (stfu (asdf:oos 'asdf:load-op package :verbose nil)) (asdf:oos 'asdf:load-op package :verbose nil)) ;; Presumable we succeeded if we didn't get an error. (setf succeeded t)) (asdf:system-definition-error (c) (declare (ignore c))) (asdf:operation-error (c) (declare (ignore c)))) (if succeeded (progn (get-command command-name)) nil)))