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

Robert Perlberg perl@creativegroup.tv
Tue Oct 18 19:42:00 GMT 2011


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
>> windows.
>>
>> 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?
>
> Yep.
>
>> 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/fhandler_console.cc), 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.
>
> Andy

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.

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: sgr_options.txt
URL: <http://cygwin.com/pipermail/cygwin/attachments/20111018/935e1dab/attachment.txt>
-------------- next part --------------


-------------- next part --------------
--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


More information about the Cygwin mailing list