Dispatch and SparseArray have nice output forms that summarise their contents:

Example of Dispatch output

The contents even manage to be retained fully on copy/paste. How can I make this happen for my own symbols?

  • $\begingroup$ Oh, now I find that this is a duplicate! $\endgroup$ – Patrick Stevens Nov 19 '15 at 21:19

If you want to make a nice neat way of displaying a thing with Head head, the following will work (thanks to Sjoerd):

head /: Format[b : head[a_Association]] := 
   Graphics3D[Cone[], ImageSize -> 20],
   {BoxForm`MakeSummaryItem[{"Summary 1: ", a["sum1"]}, StandardForm], 
    BoxForm`MakeSummaryItem[{"Summary 2: ", a["sum2"]}, StandardForm]}, 
   {BoxForm`MakeSummaryItem[{"Expanded thing 1: ", a["sumhidden1"]}, StandardForm], 
    BoxForm`MakeSummaryItem[{"Expanded thing 2: ", a["sumhidden2"]}, StandardForm], 
    BoxForm`MakeSummaryItem[{"Expanded thing 3: ", a["sumhidden3"]}, StandardForm]},

If you give a definition as

 <| "sum1" -> 10, "sum2" -> "Hi!",
    "sumhidden1" -> 1, "sumhidden2" -> 2, "sumhidden3" -> Pi

then the output (shown twice, once non-expanded in the Out cell and once expanded in the next In cell) is:

Nice output for head object

Moreover, this object has the same FullForm as the original: you can copy and paste it, and it'll still work fine. In particular, though it appears to have Head NiceHeadName, it actually still has Head head, just as required.


Not the answer you're looking for? Browse other questions tagged or ask your own question.