libera/#clim - IRC Chatlog
Search
6:51:44
lukego
I'd like to write a function "(PRESENT-FOR-EMACS object) => svg-string, metadata" that could be called on e.g. every REPL result to get a graphical CLIM representation e.g. to show as a tooltip on the ordinary textual value. Is this a sensible thing to do from the CLIM perspective? I'm thinking it's a bit funny not specifying a presentation type but PRESENTATION-TYPE-OF for DWIM should be reasonable in this context.
6:54:22
lukego
Maybe all I'm describing is PRESENT wrapped in a suitable stream like (CLIMI::WITH-OUTPUT-TO-DRAWING-STREAM (*standard-output* :svg nil) (PRESENT object)) which would basically give me what I want...?
6:56:38
lukego
I looked at the "simpleminded REPL from scratch" example but that doesn't seem to be doing automatic coercion of REPL results into CLIM presentations. So far I didn't identify any objects that actually do yield graphical representations in this way, which makes me wonder if PRESENTATION-TYPE-OF is really a thing in practice...??
6:58:25
lukego
and now when I say that out aloud I suspect that PRINT/FORMAT to a CLIM stream does the same job here and in that case maybe the minimal REPL would actually show rich graphical REPL results if there happened to be relevant PRESENTATION-TYPE-OF methods available for the repl result values...
7:00:20
lukego
though I'm obviously laboring within an incomplete mental model here because many objects do have PRESENTATION-TYPE-OF methods, e.g. 42 => INTEGER, but are maybe not shown graphically for other reasons e.g. lack of a method for rendering that presentation type on the relevant view/etc.
7:35:06
lukego
I notice in the "minimal repl" demo the value NIL is being printed as "NIL". I'd wondered if it should be "Null" to match the definition in standard-presentations.lisp and I _think_ that would be true except that PRESENTATION-TYPE-OF is classifying NIL as a SYMBOL and not a NULL. Or maybe none of those standard presentation methods apply in the minimal REPL demo for reasons that I'm failing to appreciate.
9:37:20
jackdaniel
lukego: note that present in the "simpleminded repl" is called with a second argument 'result -- that means that the object is presented with this presentation type
9:38:15
jackdaniel
if I find some time later today I'll give you a snippet how you can do more interesting things (i.e a tooltip with a nice graphic inspired by the object) without throwing away the 'result part
9:38:39
jackdaniel
note, that the command inspect-result is specialized to the argument of type result, that's why you may click objects to inspect them
9:39:23
jackdaniel
the "hook" to customize appearance of the object is not changing its presentation type (that's for specializing translators) but by supplying and specializing to a desired view
10:08:38
lukego
I'm now imagining a different basic way for Emacs to use CLIM. For each Lisp value Emacs would have a printed representation (as today) and a reference to the real Lisp object (as today) and (new, lazily-generated) SVG image representing a CLIM presentation. So the user expectation is that for any object they can click/hover/something to toggle/reveal its graphical representation. Then ACCEPT etc would also work on sub-presentations within.
10:09:36
lukego
This would require that Emacs can query Lisp/McCLIM for some "canonical" presentation of any value received from Lisp e.g. REPL results.
10:11:48
lukego
(This is in contrast to the first version of Emacs CLIM support where Lisp values like REPL results were not automatically CLIM'ified/ifiable but rather Lisp code had to write (WITH-OUTPUT-TO-EMACS ...clim...) to get graphics inserted into a default location e.g. as REPL output.
10:26:19
jackdaniel
here's a commented addition - basically I've added a "repl view" for specialization and two presentation methods present and highlight-presentation
10:27:10
jackdaniel
surely this could be improved upon, but that illustrates the concept how you could add a preview of some sort
10:28:00
jackdaniel
a noteworthy thing: you can present thing with its own presentation type from /inside/ of a more abstract presentation method present