Here’s the scoop: Quicklisp hides too much information when building software, and it can’t easily be controlled.

That is partly intentional. Remember the post about clbuild a few days ago? The information hiding is a reaction to the (often joyous) sense, when using clbuild, that you were on the cutting, unstable edge of library development, likely at any given time to hack on a supporting library in addition to (or instead of) your primary application.

To muffle that sense, I wanted the libraries Quicklisp provided to be loaded quietly. Loaded as though they were building blocks, infrastructure pieces that can be taken for granted. Loaded without seeing pages of style-warnings, warnings, notices, and other stuff that you shouldn’t need to care about. (I realize, now, that this voluminous output isn’t common to all CL implementations, but even so, one of the loudest implementations is also one of the most popular.)

I still feel good about the concept. I don’t usually want to see supporting library load output, but if I do, there’s always (ql:quickload "foo" :verbose t) .

But the default quiet-output mode of quickload interacts with something else in a way I didn’t expect, a way I don’t like, and a way that I don’t really know how to fix.

I switched from using (asdf:load-system "foo") to using (ql:quickload "foo") . This works because Quicklisp’s quickload can “see” any system that can be found via ASDF, even if it isn’t a system provided by Quicklisp. Quickload also automatically fetches, installs, and loads Quicklisp-provided systems on demand, as needed, to make the system load. It’s super-convenient.

Unfortunately, that now means that the quiet-output philosophy is being applied to very non-infrastructure-y code, the code I’m working on at the moment, the code where I really do want to know if I’m getting warnings, style-warnings, notes, and other stuff.

It didn’t bother me a lot at first. When you’re writing something interactively in slime, C-c C-c (for a single form) and C-c C-k (for an entire file) will highlight the things you need to care about. But over time I’ve really started to miss seeing the compile and load output of my own projects differently, and more verbosely, than the output from “infrastructure.” It would be nice to be able to see and fix new warnings I accidentally introduce, in code that I’m directly responsible for.

Unfortunately, I don’t know enough about ASDF to know if it’s possible, much less how to implement it.

The special variables and condition handlers that implement quiet-output are installed around a single toplevel call to asdf:load-system . Everything after that point is handled by ASDF. Loading a given system may involve loading an unknown mix of Quicklisp-provided systems and other systems. I can think of many ways to identify systems as originating from Quicklisp, but even if they’re identified as such, I can’t think of a way to intercede and say “When loading a system provided by Quicklisp, be quiet, otherwise, be verbose.”

Ideally, of course, it would be nice to be able to be totally verbose, totally quiet, or a mix of the two, depending on some property of a system. But at the moment, I just don’t see where I can hook into things temporarily to implement the policy I want.

If you have any ideas about how this might be done, please email me at xach@xach.com. Working proof-of-concept code would be the most welcome form of help; I don’t have much time to chase down a lot of “have-you-tried-this?” speculation. But I’ll gratefully take whatever I can get.