cwonrails
6/6/2015 - 8:15 AM

Vim-airline clone with 87 lines of code

Vim-airline clone with 87 lines of code

function StatusHighlight(mode, active)
    hi StatusWarning ctermbg=136 ctermfg=235 term=none cterm=none

    if a:active == 0
        hi StatusMode ctermbg=235 ctermfg=240 term=bold cterm=bold
        hi StatusLeft ctermbg=235 ctermfg=240 term=none cterm=none
        hi StatusMiddle ctermbg=233 ctermfg=240 term=none cterm=none
        hi StatusRight1 ctermbg=241 ctermfg=235 term=none cterm=none
        hi StatusRight2 ctermbg=235 ctermfg=240 term=none cterm=none
        return ''

    elseif a:mode == 'n'
        hi StatusMode ctermbg=148 ctermfg=22 term=bold cterm=bold
        hi StatusLeft ctermbg=240 ctermfg=231 term=none cterm=none
        hi StatusMiddle ctermbg=236 ctermfg=247 term=none cterm=none
        hi StatusRight1 ctermbg=252 ctermfg=241 term=none cterm=none
        hi StatusRight2 ctermbg=240 ctermfg=250 term=none cterm=none
        return 'NORMAL'

    elseif a:mode == 'i'
        hi StatusMode ctermbg=231 ctermfg=23 term=bold cterm=bold
        hi StatusLeft ctermbg=31 ctermfg=231 term=none cterm=none
        hi StatusMiddle ctermbg=24 ctermfg=117 term=none cterm=none
        hi StatusRight1 ctermbg=117 ctermfg=23 term=none cterm=none
        hi StatusRight2 ctermbg=31 ctermfg=117 term=none cterm=none
        return 'INSERT'

    elseif a:mode == 'R'
        hi StatusMode ctermbg=160 ctermfg=231 term=bold cterm=bold
        hi StatusLeft ctermbg=240 ctermfg=231 term=none cterm=none
        hi StatusMiddle ctermbg=236 ctermfg=247 term=none cterm=none
        hi StatusRight1 ctermbg=252 ctermfg=241 term=none cterm=none
        hi StatusRight2 ctermbg=240 ctermfg=250 term=none cterm=none
        return 'REPLACE'

    elseif a:mode == 'v' || a:mode == 'V' || a:mode == ''
        hi StatusMode ctermbg=208 ctermfg=88 term=bold cterm=bold
        hi StatusLeft ctermbg=240 ctermfg=231 term=none cterm=none
        hi StatusMiddle ctermbg=236 ctermfg=247 term=none cterm=none
        hi StatusRight1 ctermbg=252 ctermfg=241 term=none cterm=none
        hi StatusRight2 ctermbg=240 ctermfg=250 term=none cterm=none
        return a:mode == 'v' ? 'VISUAL' : a:mode == 'V' ? 'V-LINE' : 'V-BLOCK'

    else
        return a:mode
    endif
endfunction

function StatusGit()
    let symbols = ['+', '~', '-']
    let hunks = GitGutterGetHunkSummary()
    let ret = []
    for i in [0, 1, 2]
        if hunks[i] > 0
            call add(ret, symbols[i] . hunks[i])
        endif
    endfor
    let git = join(ret, ' ') . ' ⎇ ' . fugitive#head()
    return fugitive#head() != '' && winwidth('.') > 70 ? git : ''
endfunction

function Status(active)

    let status = '%#StatusMode# %{StatusHighlight(mode(), ' .a:active .')} '

    let status .= '%#StatusLeft#'
                \   .' %{fnamemodify(expand(''%''), '':~:.'')}%w%q%h%r%<%m '
                \   .'%#StatusMiddle#' 

    if a:active 
        let status .= ' %{fugitive#statusline() }%{StatusGit()}'
    endif

    let status .= '%=' .'%{&filetype} | %{&fileencoding} | %{&fileformat} '
                \       .'%#StatusRight2# %p%% '
                \       .'%#StatusRight1# %l:%c '
                \       .'%#StatusWarning%{SyntasticStatuslineFlag()}'

    return status
endfunction

function StatusUpdate()
    let w = winnr()
    for n in range(1, winnr('$'))
        let f = getwinvar(n, 'netrw_prvfile')
        let s = winnr('$') == 1 ? [Status(1)] : [Status(1), Status(0)]
        call setwinvar(n, '&statusline', s[n!=w])
    endfor
endfunction

autocmd VimEnter,WinEnter,BufWinEnter * call StatusUpdate()