diff --git a/autoload/airline/extensions.vim b/autoload/airline/extensions.vim index d608e12a..df0b807b 100644 --- a/autoload/airline/extensions.vim +++ b/autoload/airline/extensions.vim @@ -526,6 +526,11 @@ function! airline#extensions#load() call add(s:loaded_ext, 'rufo') endif + if (get(g:, 'airline#extensions#zhihu#enabled', 1) && airline#util#has_zhihu()) + call airline#extensions#zhihu#init(s:ext) + call add(s:loaded_ext, 'zhihu') + endif + endfunction function! airline#extensions#get_loaded_extensions() diff --git a/autoload/airline/extensions/zhihu.vim b/autoload/airline/extensions/zhihu.vim new file mode 100644 index 00000000..86b3d2f2 --- /dev/null +++ b/autoload/airline/extensions/zhihu.vim @@ -0,0 +1,45 @@ +" MIT License. Copyright (c) 2026-2026 Wu Zhenyu et al +" Plugin: https://github.com/pxwg/zhihu.nvim +" vim: et ts=2 sts=2 sw=2 + +scriptencoding utf-8 + +if !airline#util#has_zhihu() + finish +endif + +let s:has_percent_eval = v:version > 802 || (v:version == 802 && has("patch2854")) + +function! airline#extensions#zhihu#bufname() abort + let fmod = (exists("+autochdir") && &autochdir) ? ':p' : ':.' + let name = fnamemodify(bufname('%'), fmod) + + if empty(name) + return '' + endif + + if match(name, 'zhihu://') == -1 + return s:has_percent_eval ? '%f' : name + endif + + return get(get(b:, 'article', {}), 'title', name) +endfunction + +function! airline#extensions#zhihu#init(ext) abort + let prct = s:has_percent_eval ? '%' : '' + + if exists("+autochdir") && &autochdir + " if 'acd' is set, vim-airline uses the path section, so we need to redefine this here as well + if get(g:, 'airline_stl_path_style', 'default') ==# 'short' + call airline#parts#define_raw('path', '%<%{'. prct. 'pathshorten(airline#extensions#zhihu#bufname())' . prct . '}%m') + else + call airline#parts#define_raw('path', '%<%{' . prct . 'airline#extensions#zhihu#bufname()' . prct . '}%m') + endif + else + if get(g:, 'airline_stl_path_style', 'default') ==# 'short' + call airline#parts#define_raw('file', '%<%{' . prct . 'pathshorten(airline#extensions#zhihu#bufname())' . prct . '}%m') + else + call airline#parts#define_raw('file', '%<%{' . prct . 'airline#extensions#zhihu#bufname()' . prct . '}%m') + endif + endif +endfunction diff --git a/autoload/airline/util.vim b/autoload/airline/util.vim index 137b08dc..256fdfa5 100644 --- a/autoload/airline/util.vim +++ b/autoload/airline/util.vim @@ -149,6 +149,18 @@ function! airline#util#has_fugitive() return s:has_fugitive endfunction +function! airline#util#has_zhihu() + if !has('nvim') + return 0 + endif + try + call v:lua.require'zhihu'.setup() + catch + return 0 + endtry + return 1 +endfunction + function! airline#util#has_gina() if !exists("s:has_gina") let s:has_gina = (exists(':Gina') && v:version >= 800) diff --git a/doc/airline.txt b/doc/airline.txt index 8f64e8e1..77126bca 100644 --- a/doc/airline.txt +++ b/doc/airline.txt @@ -1883,6 +1883,13 @@ default: '> Zoomed' default: '' +------------------------------------- *airline-zhihu* +zhihu.nvim + +* enable/disable zhihu integration > + let g:airline#extensions#zhihu#enabled = 1 + + ============================================================================= ADVANCED CUSTOMIZATION *airline-advanced-customization*