From 0694335daa0cfffff8310461d3923ad7013af098 Mon Sep 17 00:00:00 2001 From: Christian Brabandt Date: Sun, 13 Apr 2025 17:03:11 +0200 Subject: [PATCH] fern: failure when opening a path with spaces Fix this by: - decode the path using fern#fri#decode() - use fnameescape() for the 'lcd' command - add try catch around the 'lcd' command closes: #2717 Signed-off-by: Christian Brabandt --- autoload/airline/extensions/fern.vim | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/autoload/airline/extensions/fern.vim b/autoload/airline/extensions/fern.vim index a1878e32..51fe55b1 100644 --- a/autoload/airline/extensions/fern.vim +++ b/autoload/airline/extensions/fern.vim @@ -27,12 +27,20 @@ endfunction function! airline#extensions#fern#configure_sections(win, context) abort let spc = g:airline_symbols.space let fri = fern#fri#parse(bufname(a:context.bufnr)) - let abspath = substitute(fri.path, 'file://', '', '') + let abspath = fri.path + if fri.path =~ '%\d\d' + let abspath = fern#fri#decode(fern#fri#decode(fri.path)) + endif + let abspath = substitute(abspath, 'file://', '', '') call a:win.add_section('airline_a', spc.'fern'.spc) if exists('*airline#extensions#branch#get_head') " because fern navigation changes an internal _fri_ and not the working directory " we need to give it some help so the branch name gets updated - execute 'lcd' abspath + try + execute 'lcd' fnameescape(abspath) + catch /^Vim\%((\a\+)\)\=:E344:/ + call a:win.add_section('airline_b', '') + endtry call a:win.add_section('airline_b', spc.'%{airline#extensions#branch#get_head()}'.spc) else call a:win.add_section('airline_b', '')