Try to execute run-cpp if editing a C/C++ file

This commit is contained in:
Michael Campagnaro 2023-12-10 18:49:05 -05:00
parent 05c46303c8
commit 4b6d506d7b

47
.vimrc
View File

@ -1301,8 +1301,10 @@ endfu
fu! RunProgramInDirectory(starting_path, file_exe_name) abort
let l:search_path = a:starting_path
let l:ext = tolower(expand('%:e'))
let l:also_search_for_cpp_run_script = 0 " Covers the case of having a run-cpp file in a jai project.
if tolower(expand('%:e')) == "jai"
if l:ext == "jai"
" Check if we're editing inside a modules file and if so then get a
" path that takes us outside of it. We'll use that path for finding an
" exe or run script.
@ -1326,6 +1328,8 @@ fu! RunProgramInDirectory(starting_path, file_exe_name) abort
let l:search_path = l:module_root_path
endif
elseif l:ext == "cpp" || l:ext == "c" || l:ext == "h" || l:ext == "inc"
let l:also_search_for_cpp_run_script = 1
endif
let l:search_path = fnamemodify(l:search_path, ':p') " Normalize the path just in case.
@ -1338,35 +1342,36 @@ fu! RunProgramInDirectory(starting_path, file_exe_name) abort
" If nothing is found after exhausting the search then we start over and
" find the first exe with any name.
fu! TryRun(path) abort
if filereadable(a:path)
exec "AsyncRun! " . a:path
return 1
endif
return 0
endfu
let l:current_path = l:search_path
while 1
" Run script has higher priority over an exe named after the current file.
let l:search = l:current_path . 'run'
if filereadable(l:search)
exec "AsyncRun! " . l:search
return 1
" run script
if l:also_search_for_cpp_run_script
if TryRun(l:current_path . 'run-cpp') | return 1 | endif
endif
if TryRun(l:current_path . 'run') | return 1 | endif
" run_tree/run script
if l:also_search_for_cpp_run_script
if TryRun(l:current_path . 'run_tree/run-cpp') | return 1 | endif
endif
if TryRun(l:current_path . 'run_tree/run') | return 1 | endif
" filename exe
let l:search = l:current_path . a:file_exe_name
if filereadable(l:search)
exec "AsyncRun! " . l:search
return 1
endif
if TryRun(l:current_path . a:file_exe_name) | return 1 | endif
" bin/filename exe
let l:search = l:current_path . 'bin/' . a:file_exe_name
if filereadable(l:search)
exec "AsyncRun! " . l:search
return 1
endif
if TryRun(l:current_path. 'bin/' . a:file_exe_name) | return 1 | endif
" run_tree/filename exe
let l:search = l:current_path . 'run_tree/' . a:file_exe_name
if filereadable(l:search)
exec "AsyncRun! " . l:search
return 1
endif
if TryRun(l:current_path. 'run_tree/' . a:file_exe_name) | return 1 | endif
" Only go back a directory if the current path doesn't have a .git folder or we're not in a root drive path.
if isdirectory(l:current_path . '.git') || IsRootDrive(l:current_path)