Change fmt to preserve width, flags, and precision, and change the logic of fmt[v]print appropriately. That __fmtdispatch discards the flags of the Fmt structure it receives, is broken behaviour. I see no present code in sources that relies on this behaviour, and I have been running my Plan 9 boxes with these changes for a while (having rebuilt the whole source tree and kernel). Moreover, the Go compilers [568]g rely on the preservation of flags.