DUB colored output proposal/showcase
gdelazzari
giacky98.mail at gmail.com
Fri Jun 8 16:10:34 UTC 2018
On Friday, 8 June 2018 at 15:34:06 UTC, Uknown wrote:
> I love it! I have very little experience with terminal colours,
> but as far as colourizing text on POSIX its fairly easy. You
> just need to emit the right ANSI escape sequences [0]. This is
> what the colorize-d library does.. For Windows before Windows
> 10, things are more messy. You need to use `handle`s, to get
> the current state and then correctly set the colours. The real
> hard part here is adjusting the colour scheme based on the
> terminal background colour.
>
> [0]: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
Sure, I sort of know how that works, I did some stuff some time
ago. Also, regarding Windows, the colorize-d library already
handles what you described. I think I'll simply take the source
of colorize-d and copy-paste the files in the Dub source, as I
saw they've done with some parts of Vibe.d in order to avoid
having to fetch Dub packages while compiling Dub itself.
> I would love to help you on this. Is there anything in
> particular you need help with?
Actually, it's not a difficult task. But, being a bit of a
perfectionst, I already spotted the possibility of writing a
separate module handling all the terminal output, in order to
better separate things. At the moment Dub uses the log module
from Vibe.d (as I wrote before, which it seems they've just
copy-pasted in dub/internal/vibecompat/core/log.d) to print stuff
to the terminal, I think replacing it with a module that handles
colors and "tags" like in the screenshots I attacched would be
the best option. But in order to do something like this cleanly
we should first define well how to structure the output and thus
the module handling it. Also documenting stuff a bit. Then we'll
need to replace all the calls to logInfo, logDiagnostic,
logError, etc... in the entire codebase :P
A quicker option is to just leave the log calls there, add the
escape sequences in order to color the wanted words (as it's
currently done in the proof-of-concept) and then fix the Vibe.d
log module to handle colors on Windows with the same "workaround"
that colorize-d uses. That's a faster way indeed, but a bit dirty
IMHO. Also, to handle different color schemes (for MacOS/white
background terminals) it may become a mess.
So, having a module which handles all the terminal output seems
the best option to me, if we want to do stuff cleanly. The main
problem is to define its requirements, how it should interface
with the rest of the code, how to structure it, etc... then
writing the code is the simplest part, as always. I can handle
this by myself, but if anyone wants to help that would be really
appreciated, especially on planning how to structure the changes.
Maybe we can discuss about the implementation on IRC or some
other platform?
More information about the Digitalmars-d
mailing list