| function! s:Make(dir, make, format, name) abort |
| let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd' : 'cd' |
| let cwd = getcwd() |
| let [mp, efm, cc] = [&l:mp, &l:efm, get(b:, 'current_compiler', '')] |
| try |
| execute cd fnameescape(dir) |
| let [&l:mp, &l:efm, b:current_compiler] = [a:make, a:format, a:compiler] |
| execute (exists(':Make') == 2 ? 'Make' : 'make') |
| finally |
| let [&l:mp, &l:efm, b:current_compiler] = [mp, efm, cc] |
| if empty(cc) | unlet! b:current_compiler | endif |
| execute cd fnameescape(cwd) |
| endtry |
| endfunction |