I changed setup.py up until a point where it works for me. I'm not entirely certain I didn't break something in the process but it's the best I managed ¯\_(ツ)_/¯
The key combination used for this is likely to change. See
ConsoleWindow.designateCurrentWidget() for precisely what this does and
means.
Essentially, mousing over something (with the console open) and hitting
that combination of keys will give information on the GUI element the user
had the mouse over at the time (if any), via the console.
It also tells you what the stylesheet looks like, if it has one; if it
doesn't have one, it looks for one on the object's parents, posting that
instead if applicable.
The last selected widget is stored in CONSOLE.selected_widget - it can
be modified directly from there.
More features and detailed information may come in the future.
Minor menu/UI tweaks, with the addition of some shortcuts.
Reconnecting in the middle of typing shouldn't kill the whole client
now.
It still needs to account for the "reconnecting" window (this will
likely be made to loop back into the query window for now).
The logic for both of these has been corrected; neither will try to
handle reserved or preexisting attributes as though they should be part
of their dicts.
These can still be set manually, but it makes things much safer.
New attributes have to come from the class or local __dict__ modifications.
Redid some of the logic behind AttrDict. It now raises AttributeError
when necessary, instead of giving the incorrect KeyError response.
This has restored compatibility with copy.deepcopy().