When editing common lisp with slime and emacs, I’d like a speedbar listing, alternately, top level definitions in the file I’m editing, and top level definitions in the package I’m looking at (which may be a superset of definitions in the file). Preferably sorted by type of definition (function, macro, constant, etc) and/or alphabetically.
Is there some emacs tooling for this? I haven’t found it.
I’m using doom emacs pretty much it’s default setup for common lisp, and
SPC-s-i
is bound toconsult-imenu
which gives a nice fuzzy searchable listing of all top level definitions in the current file and their type (function, variable, etc).SPC-m-h-p
orsly-apropos-package
will show all public symbols in a package with their docstrings. With a prefix argument it will include all private symbols also, with clickable links to go to their definition.What I don’t know is if there’s a way to view all top level definitions in a whole asdf system
Are the sly presentations in a speedbar or special buffer of some kind, or just listed in the REPL?
It looks like this, it opens a vertical popup at the bottom of the screen with fuzzy completion. Well that’s just cause doom is using Vertico for completion by default, I assume with other completion frameworks or configuration it’ll look different.
https://preview.redd.it/u9duaifg8vvb1.png?width=656&format=png&auto=webp&s=44c25fb889e109bec1f4c2a9665ad28921056cc4
That’s the closest approximation (so far) of what I was looking for, though unfortunately I’m a slime user and haven’t yet tried sly.
I’m actually surprised there isn’t speedbar for CL definitions already in slime, somehow I figured it was an obvious thing I was missing, since you see that sort of thing all the time in IDE’s.
I digged in a little and it seems that imenu default for
imenu-prev-index-position-function
is set tobeginning-of-defun
which is how this is working, I don’t think it has anything to do with sly or slime. Thenconsult-imenu
gives a nicer UI for imenu. I just realized there is also aconsult-line-multi
which will do for all buffers in the current project, which is what I was looking for. It also supports narrowing to show just functions or just variables or just macros or whatever.