On Sun, Feb 15, 2009 at 10:35 AM, Stahlman Family wrote:
>
> Ok. I *think* I've got it. You have very fine (24-bit) control
> over a single color (the default) for foreground and background.

Right.

> A subset of (e.g.) 6, 14 or 254 colors from the 24-bit range is
> made available to color text applications such as vim.

8, 16, 88, or 256 - these colors are completely independent of the
default.  FWIW, true 8-color terminals are very rare these days.
What are much more common are what vim's help informally refers to
as "8*" color terminals, which support 16 foreground colors and only
8 background colors.  This is the case for, for instance, the linux
consoles /dev/tty1-6.  But, my point is that the default foreground
and background - and a few other colors - don't have numbers between
0 and t_Co defined for them - they exist outside that range of
numbers.  Think about it this way: even in a monochrome terminal,
where the applications can't request that any particular color be
used to draw a particular character, there will still be a color for
the foreground, the background, and the cursor.  When colors were
added, there were suddenly 8 colors - plus the color of the
foreground, background, and cursor.

> There's no guarantee that the default color defined by the user is
> present in the subset.

Right.

> At any rate, I plan to do some reading on the intricacies of color
> terminals. I'll likely have a much better understanding after I've
> done so...

/me points at http://www.xfree86.org/current/ctlseqs.html - it lays
out every single control sequence that xterm understands.  Feel free
to contact me off list with any non-vim questions about terminals,
and I'll be happy to help, too.

> I believe I've got it now. I reread this after responding to
> Tony's email, and one of the remaining questions I had (whether
> Vim could request background color equal to default when the
> default doesn't correspond to one of the colors on the "cube") was
> answered.

Technically, it's possible in xterms to change the default
background color or default foreground color on the fly, but vim
doesn't use this functionality - and it doesn't work in all
terminals, anyway.  Likewise, xterm has a "hidden" attribute that
you can set for some text, which sets it to be invisible - but,
again, this is only on xterms (technically, vt300's), and vim
doesn't use this feature.

> Since there's no way to request that foreground be set to the
> default background, it is not always possible to hide text
> completely.

Like I said.  ;-)  If there is a way to do it without changing vim's
source, I don't see it.

> I suspect, though, that the color on the color cube "nearest" to
> the default background would typically be close enough (especially
> in 256 color terminals) effectively to hide the text.

*shrug*, you get the same sort of scenario as the colorschemes have,
with Ignore text that's hard to see but not invisible.

> Unfortunately, I'm beginning to suspect that there's not an easy
> way to determine the default background color from within a Vim
> script.

I doubt there's any way to do it portably - many terminal emulators
won't let you query that, and you can't count on $TERM being set
properly because so many things lie and pretend to be an xterm...
If it is possible, it would require per-terminal hacks, I think.

> Even if the default background color could be determined, it would
> need to be converted to the nearest color on the color cube, which
> would depend upon number of colors (which could be presumably be
> determined from &t_Co),

If &t_Co <= 16, it's basically impossible - as above, you can't
really query what those colors are set to, and users have a tendency
to customize them to their tastes.  If &t_Co is 88 or 256, you'd
just wind up reimplementing the logic of (or stealing the code of)
CSApprox.vim.  /me makes a mental note to add a BSD license header
to that script...

> and perhaps something else...

The terminal emulator itself.  Konsole uses a different color
palette than xterm for it's cube.  Eterm uses one that's different
from both xterm and Konsole.  AFAIK, though, every other 256-color
terminal uses the xterm palette.  urxvt (without the 256-color
patch) and very old xterms support 88 colors instead of 256, but my
research has led me to believe that all 88-color terminal emulators
use the same palette.  Previews of the 3 different 256-color
palettes can be found here, for the curious:

http://www.cs.drexel.edu/~mjw452/256.html

~Matt

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_use" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

Reply via email to