This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Mapping "underline" to "colour" - how is the colour determined?

On Oct 15, 2011, at 4:19 AM, Andy Koppe wrote:

On 14 October 2011 14:18, Ronald Fischer wrote:
When I (to give an example) execute a "man" command within a mintty
window, and do the same within a "normal" Windows console window, I see
that those words represented as underlined words in the mintty
window, are represented by a different colour in the Windows console

I guess this different has nothing to do with the "man" command, but by
the way the terminal definition says how render "emphasized" words.
Since the Windows console (likely) can't underline, colouring is used.
It's kind of a "terminal property". Do I understand this correctly?


I would like to understand, where this mapping to a certain colour is
done. Reason is that the colour used for my Windows console window, is a
bit hard to read and I would like to change it.

It's hardcoded in the Cygwin DLL (in winsup/cygwin/, so you'd have to build that yourself to change it.

Getting man/groff to use something other than the underline attribute
might be the better approach, but I don't know how to do that.


The "Graphic Rendition" of the text is controlled by a facility called Terminfo. Here's how you can change it.

First, do:

printenv TERM

This should display "cygwin" as the terminal type. If not, replace "cygwin" in the following instructions with whatever terminal type you are using.

The terminfo files are stored under /usr/share/terminfo. If you look there you will see several subdirectories with one and two-character names. Each terminfo entry is stored in a subdirectory which corresponds to the ASCII value of its first character in hex, so the "cygwin" file is in the "63" directory. You will also find a copy under the "c" directory, but that's not the one the system uses. I presume that the one-character directories are for backwards compatibility. Make a backup copy of the "cygwin" file so you can restore the original functionality in case you mess things up.

Now go create a new working directory somewhere, perhaps under your home directory. In there, type:

infocmp cygwin >cygwin.txt

This will convert the binary terminfo file from /usr/share/terminfo/63 into a text file you can examine and edit. Edit the file with the text editor of your choice and locate the capabilities "smul" and "rmul". "smul" specifies the escape sequence that will be used to introduce "underlined" characters, and "rmul" is the sequence that turns this mode off. Set these values to whatever produces the effect you desire. (More on this below.)

After editing the source file, type:

tic cygwin.txt

This "compiles" the source file back into the binary format and overwrites the original binary file in /usr/share/terminfo/63. There are ways to redirect it to another directory, but I'll leave you to figure that out for yourself. (man tic)

Now run the man command and see if it produces the effect you want.

As for how to figure out what escape sequence to use, unpack the attached file "sgr_options,txt" and cat it in the desired terminal window. Use "cat" rather than "less" or any other program that will filter the file contents. This will show you the effects of the different options to the SGR (Set Graphic Rendition) escape sequence. For "rmul" just use "\E[0m" which turns off all modes.

Attachment: sgr_options.txt
Description: Text document

Problem reports:
Unsubscribe info:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]