Junio C Hamano wrote: > Felipe Contreras <felipe.contreras@xxxxxxxxx> writes: > > Why not use color.pager? > > I dug a bit to refresh my memory and it turns out that the reason we > should not do so is because it means something totally different. > > color.[ch] defines want_color() that applications like "diff" and > "log" can use to see if the application is configured to paint its > output in colors. > > When that layer says for that particular application it should be > decided automatically, then we call into color.c::check_auto_color() > which is the only user of pager_use_color (which is set from the > color.pager configuration variable). The purpose of that call is to > ask if the pager is capable of colors. That is not true. check_auto_color() returns 1 when the fd is a tty. For example advice() would indirectly call check_auto_color() and no pager is involved. Inside the help built-in want_color(GIT_COLOR_UNKNOWN) will always return 1 (unless you do something like `git help git > file`). pager_use_color is completely ignored in this case. It's used only when 1) the fd is not a tty, 2) it's stdout, 3) git is using a pager... Only _then_ it checks for pager_use_color (color.pager). So no; the first purpose of check_auto_color() is to find out if the fd is capable of showing colors, secondary, if we are using a pager, then check the user configuration. In the case we are using a pager it's not check if the pager is capable of colors, the pager could be capable of colors and yet the user would disable them: it's the check for the user preference. > So in short, the color.pager is about "is the pager capable of > colors?" That's not the case. Even the documentation says so: color.pager:: A boolean to enable/disable colored output when the pager is in use (default is true). > and the color.ui (and color.<cmd>) is about "does the user > wants output from <cmd> in color?" > Tying it directly to "color.pager" is wrong. Why? color.pager is to enable/disable colored output when a pager is in use. The fact that it's man executing the pager and not git makes no difference to the user. Cheers. -- Felipe Contreras