`eval-buffer` will evaluate (defvar ...) in the normal way, which does
*nothing* if the variable is already defined.

Aaaah, with your explanations it clicked. I tested with "emacs -Q" and though tabulated-list was not loaded before my eval-buffer, but I just checked and it is.

So we have a problem in the sense that we cannot actually tweak this character through the defcustom like it is done currently:

    (defcustom tabulated-list-sort-icon-asc ?▼)
    (defcustom tabulated-list-glyphless-sort-icon-asc ?v)
    ....
   (defvar tabulated-list-glyphless-char-display
     (let ((table (make-char-table 'glyphless-char-display nil)))
       (aset table tabulated-list-sort-icon-asc (cons nil (char-to-string tabulated-list-glyphless-sort-icon-asc)))

I can imagine two solutions: either we make `tabulated-list-glyphless-char-display` "dynamic" everytime it is accessed (is that even possible?) or we do some magic that resets it whenever the custom value changes.

Feel free to point me to "the right thing" I have no clue.
 
So I suspect that "re-eval the whole ..." above meant to use C-M-x which
has special support for `defvar` to force re-evaluation.

Yes this is what I used, ok thanks for the explanation a lot of other weirdnesses make sense now :-)
 
> Should `make-char-table` purpose really be 'glyphless-char-display?

Of course, that's what it's for.  This "purpose" should be thought
of as a type.

Alright.

Thanks,
Philippe