Hello, and apologies if this isn't the right place to post this question 
but if it isn't I hope you'll help me out and point me in the right 
direction.

I'm trying to make a custom tabline. I want the tabline to display "M", 
"A", etc when a file's git status is modified, added, etc., but that part 
isn't the focus of my question.

I'm trying to replicate the existing tabline functionality and I notice 
that if a tab has 3 windows, the number 3 will be displayed before the name 
of the file in the active window. I've nearly got that replicated But I'm 
using the "#Title#" highlight group and it's not quite working. The 
background color doesn't change correctly as compared to the original. 
Should I make a custom highlight group here? I might publish this and I'd 
like to find a solution that works with multiple color schemes instead of 
just hardcoding my own thing.

Below is the relevant section of my vimrc. You can replicate the issue as 
follows:
1. Copy the below code into a custom .vimrc
2. Run vim with vim -u .vimrc
3. Make a new tab with :tabnew
4. Split the tab with :vs
5. Move back and forth between the tabs with gt in command mode
6. Use \t and \y to use the default tabline and the custom tabline 
respectively, and after setting this cycle through the tabs again and the 
issue will be clear.

Thanks for your time and attention,
Nickolai
Reproducible .vimrc:
vim9script
runtime defaults.vim  # Maintain the default behavior of remembering cursor 
position


def g:MyTabLabel(n: number): string
        var buflist = tabpagebuflist(n)
        var winnr = tabpagewinnr(n)
        var buffer_name = bufname(buflist[winnr - 1])
        var name = "[No Name]"
        if buffer_name != ""
          name = fnamemodify(buffer_name, ':~:.')
        endif
        var gst = split(system('git status --porcelain=v1 ' .. name))
        if len(gst) == 2
                if gst[0] == '??'
                        gst[0] = 'U'
                endif
          return name .. ' ' .. gst[0]
        endif
        return name
enddef


def g:MyTabLine(): string
   var s = ''
        for i in range(tabpagenr('$'))
                # select the highlighting
                var highlight_g = '%#TabLine#'
                if i + 1 == tabpagenr()
                        highlight_g = '%#TabLineSel#'
                endif
                s ..= highlight_g
                # set the tab page number (for mouse clicks)
                s ..= '%' .. (i + 1) .. 'T'

                # Put the number of windows in this tab
                var num_windows = tabpagewinnr(i + 1, '$')
                if num_windows > 1
                        s ..= '%#Title# ' .. num_windows .. '' .. 
highlight_g
                endif

                # the label is made by MyTabLabel
                s ..= ' %{MyTabLabel(' .. (i + 1) .. ')} '
        endfor

        # after the last tab fill with TabLineFill and reset tab page nr
        s ..= '%#TabLineFill#%T'

        # right align the label to close the current tab page
        if tabpagenr('$') > 1
                s ..= '%=%#TabLine#%999Xclose'
        endif

        return s
enddef


set tabline=%!MyTabLine()

map <leader>t :set tabline=<CR>
map <leader>y :set tabline=%!MyTabLine()<CR>
map <leader>r :source .vimrc<CR>

-- 
-- 
You received this message from the "vim_dev" 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_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/bd03da6c-d8be-47b3-a539-3fd64219f72en%40googlegroups.com.

Raspunde prin e-mail lui