From eabec4e9b6590408f92557fd2bdb24408aaf8068 Mon Sep 17 00:00:00 2001 From: "Kenneth Benzie (Benie)" Date: Tue, 13 Jul 2021 21:00:48 +0100 Subject: [PATCH] Add build#dir() popup_menu() fallback When `popup_menu()` is not available, i.e. neovim or old version of vim, fallback to using `inputlist()` instead. --- autoload/build.vim | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/autoload/build.vim b/autoload/build.vim index a389436..10f5e20 100644 --- a/autoload/build.vim +++ b/autoload/build.vim @@ -10,12 +10,25 @@ function! build#dir(...) abort let l:dir = s:dirs[0] unlet s:dirs else - " Multiple build directories found, create popup menu to select one. - " Set the callback to this function on completion, handled below. - call popup_menu(s:dirs, #{ - \ filter: 'popup_filter_menu', - \ callback: 'build#dir', - \ }) + " Multiple build directories found, select one. + if exists('*popup_menu') + " Create popup menu to select the build directory. Callback to this + " function on completion, handled in the else branch below. + call popup_menu(s:dirs, #{ + \ filter: 'popup_filter_menu', + \ callback: 'build#dir', + \ }) + else + " Fallback to inputlist when popup_menu is not available. + let l:choices = [] + let l:index = 1 + for l:dir in s:dirs + call add(l:choices, string(l:index).': '.l:dir) + let l:index += 1 + endfor + let l:index = inputlist(l:choices) + let l:dir = s:dirs[l:index - 1] + endif endif else if a:0 == 1