>> How "character2 (\t with :align-to) name2" could predict the right value >> of this 'align-to' if it doesn't know what value of 'align-to' will use >> 'completion--insert-strings' in its separator? > > Ah, okay. Would it work to change read-char-by-name to generate > strings "character1 TAB name1" and "character2 TAB name2", and then > make completion--insert-strings to produce a suitably calculated > (SPC with :align-to) separator between them? Then all you'd need to > do is set tab-width in the completions buffer. Thanks, the suggested solution works well. This screenshot demonstrates that spacing between a character and its name is the same in the first column and in the second column: