On Wednesday, May 10, 2017 at 10:01:36 AM UTC-4, [email protected] wrote: > On Wednesday, May 10, 2017 at 9:37:41 AM UTC-4, Tony Mechelynck wrote: > > On Wed, May 10, 2017 at 6:09 AM, <[email protected]> wrote: > > > On Tuesday, May 9, 2017 at 11:35:47 PM UTC-4, Tony Mechelynck wrote: > > >> On Wed, May 10, 2017 at 3:04 AM, <[email protected]> wrote: > > >> [...] > > >> > Thanks a ton for the reply, Tony! > > >> > > > >> > So, just to confirm: There is NO WAY to conveniently specify a pair > > >> > of colors that the status line will use to alternate between to > > >> > indicate active/inactive status? I find that hard to believe. This > > >> > seems extremely odd to me if it's the case. In fact, it would appear > > >> > to be a deficiency within Vim itself. > > >> > > > >> > As another follow up question regarding the documentation: Note that > > >> > it says "the difference ... will be applied". This seems to indicate > > >> > that vim should automatically "darken" inactive windows for me when > > >> > I've defined and used User1 to highlight my statusline. The > > >> > documentation is then poorly written if this is not the behavior. In > > >> > fact, I have no idea what it means... Any thoughts? > > >> > > > >> > Thanks again for the reply, man! > > >> > > >> The status line for the current split-window is highlighted in the > > >> StatusLine highlight group. Status lines for all other split-windows > > >> (the inactive ones) are highlighted in the StatusLineNC highlight > > >> group. In addition, when doing command-line completion, the currently > > >> selected match is highlighted in the WildMenu highlight group. These > > >> are used on the default status lines and if you don't specify special > > >> highlighting they will be used in custom status lines too. > > >> > > >> Anything that can be tested fom the context of a split-window can be > > >> used to set a different highlight to part of the status line. The > > >> colours themselves are global, but by using appropriate constructs in > > >> your 'statusline' option you can build it with almost infinite > > >> variety. if?then:else expressions can be used advantageously there to > > >> put various text, and even various highlight groups, depending on > > >> circumstances; and any highlight groups can be used: "User" groups by > > >> using %1* to %9* and any other ones by using their name, e.g. (IIUC, > > >> and including the option-backslashes to guard the double quotes) > > >> %{&binary?\"%#Error#BINARY%0*\":\"\"} to output the text BINARY in the > > >> scary Error highlight group at that point of the statusline for > > >> windows displaying buffers where the 'binary' local option is set. > > >> > > >> See > > >> :h 'statusline' > > >> :h option-backslash > > >> > > >> P.S. Here's how I set my status line. Rather complicated but I like the > > >> result: > > >> > > >> if has('statusline') > > >> set statusline=%<%f\ > > >> %h%m%r%=%k[%{(&fenc==''?&enc:&fenc)}%{(&bomb?',BOM':'')}][U+%04B]\ > > >> %-12.(%l,%c%V%)\ %P > > >> endif > > >> > > >> and here is how I set my text-style tab bar (even in gvim, using > > >> 'showtabline' set to 2 and e absent from 'guioptions') with fancy > > >> colors (the principle is the same as for the status line but I use a > > >> function to construct it in steps): > > >> > > >> if has('windows') && exists('+tabline') > > >> function MyTabLine() > > >> let rv = '' > > >> let i = 1 > > >> while i <= tabpagenr('$') > > >> let rv .= '%#Normal#' > > >> let icur = tabpagewinnr(i) > > >> let imax = tabpagewinnr(i, '$') > > >> let rv .= '%' . i . 'T' > > >> let rv .= i . '|' . icur . ':' . imax . ' ' > > >> if i == tabpagenr() > > >> let rv .= '%#NonText#' > > >> else > > >> let rv .= '%#SpecialKey#' > > >> endif > > >> let buf = fnamemodify(bufname(tabpagebuflist(i)[icur-1]),':t') > > >> if buf == "" > > >> let buf = '[NoName]' > > >> endif > > >> let rv .= buf . ' ' > > >> let i += 1 > > >> endwhile > > >> let rv .= '%T%=%999X%#Error#X%#Normal#%X' > > >> return rv > > >> endfunction > > >> set tabline=%!MyTabLine() > > >> set showtabline=2 > > >> endif > > >> > > >> Best regards, > > >> Tony. > > > > > > Tony, > > > > > > Thanks again for your efforts. > > > > > > The code you posted is broken, I'm afraid. In particular, the following > > > example > > > > > > > %{&binary?\"%#Error#BINARY%0*\":\"\"} to output the text BINARY in the > > > > > > does not work as you might expect. This has caused me much grief in the > > > past couple of weeks of looking for a solution to my problem. It is not > > > possible to nest highlight group items within expression items. I > > > certainly wish it were! That would solve ALL of my problems! > > > > > > The definition of my statusline can be found here: > > > https://github.com/lifecrisis/vim-vimrc/blob/master/vimrc#L434. > > > > > > I want to emphasize that I think the documentation here is wrong. To > > > quote again: > > > > > > > * - Set highlight group to User{N}, where {N} is taken from the > > > > minwid field, e.g. %1*. Restore normal highlight with %* > > > or %0*. > > > > The difference between User{N} and StatusLine will be > > > applied > > > > to StatusLineNC for the statusline of non-current windows. > > > > The number N must be between 1 and 9. See |hl-User1..9| > > > > > > This indicates clearly that there should be some kind of automatic > > > behavior in relation to the User1...User9 highlight groups. The whole > > > "difference between" nonsense... what on Earth is that??? That clearly > > > indicates that some kind of automatic action should be taken by Vim... > > > LOL I'm about to pull my hair out! HAHA! > > > > > > There MUST be an elegant and concise way to highlight the statusline that > > > automatically "darkens" the statuslines in the inactive windows. > > > > Yes, there is. Just don't set any highlight group in your statusline, > > and set constrastive colours to the StatusLine and StatusLineNC > > highlight groups. Normally this is best done in a colourscheme. If > > these two groups are set to the same colours, Vim will add circumflex > > accents ^^^^^^^ in the empty spaces of the current window's statusline > > instead. > > > > See > > :help hl-StatusLine > > :help hl-StatusLineNC > > > > > > I'm lost for where to look... > > > > > > Thanks again! > > > Jason > > > > Best regards, > > Tony. > > > > P.S. I'm attaching my own "almost-default" colorscheme. To use it, > > drop it in one of the following directories (I'm listing them using > > the Unix-like notation used in Vim; for Windows, use %VARIABLE% > > instead of $VARIABLE and \ instead of / when working outside Vim): > > > > $VIM/vimfiles/colors/ (system-wide, for any OS) > > $HOME/.vim/colors/ (user-private, for Unix-like OSes > > including Linux and Mac OS X) > > $HOME/vimfiles/colors/ (user-private, for Windows) > > > > ...then use the ":colorscheme almost-default" command (without the > > quotes), either by typing it manually to try it out, or in your vimrc > > if you like it. It is meant for gvim, for a 24-bit-color console with > > 'termguicolors' set, or for an 88- or 216-color console with 't_Co' > > set appropriately and the CSApprox plugin installed; but it will work > > even in an 8-background, 16-foreground color terminal (and display > > fewer colours there, of course). > > Hey Tony, > > I understand the default behavior of the highlight groups StatusLine and > StatusLineNC. That is not the issue. The problem is that grouping items in > the statusline by color is brittle because one cannot conditionally apply > colors in the statusline and have an automatic darkening effect as you would > expect. > > In short, putting more than two colors in your statusline requires all kinds > of special hacks to get the "darkening" effect to work. It is then not > guaranteed to work, for example if some other script ever uses the > 'eventignore' setting. This is painful if you just want an attractive > statusline that works seamlessly. > > > %{&binary?\"%#Error#BINARY%0*\":\"\"} to output the text BINARY in the > > The conditional application of highlighting that you mentioned above is what > I want, but it does not work. The documentation here is incomplete or simply > misleading (I can't tell which). > > In any case, the help system doesn't really explain what User1 ... User9 do > or what benefit they add beyond just defining your own highlight groups. No > examples are even provided. > > Someone has to know why these special highlight groups where defined. > > Thanks, > Jason
I have raised a Github issue concerning this problem. The issue is accessible at: https://github.com/vim/vim/issues/1697. -- -- You received this message from the "vim_use" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_use" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
