Try to execute run-cpp if editing a C/C++ file
This commit is contained in:
parent
05c46303c8
commit
4b6d506d7b
47
.vimrc
47
.vimrc
|
@ -1301,8 +1301,10 @@ endfu
|
||||||
fu! RunProgramInDirectory(starting_path, file_exe_name) abort
|
fu! RunProgramInDirectory(starting_path, file_exe_name) abort
|
||||||
|
|
||||||
let l:search_path = a:starting_path
|
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
|
" 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
|
" path that takes us outside of it. We'll use that path for finding an
|
||||||
" exe or run script.
|
" exe or run script.
|
||||||
|
@ -1326,6 +1328,8 @@ fu! RunProgramInDirectory(starting_path, file_exe_name) abort
|
||||||
|
|
||||||
let l:search_path = l:module_root_path
|
let l:search_path = l:module_root_path
|
||||||
endif
|
endif
|
||||||
|
elseif l:ext == "cpp" || l:ext == "c" || l:ext == "h" || l:ext == "inc"
|
||||||
|
let l:also_search_for_cpp_run_script = 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let l:search_path = fnamemodify(l:search_path, ':p') " Normalize the path just in case.
|
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
|
" If nothing is found after exhausting the search then we start over and
|
||||||
" find the first exe with any name.
|
" 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
|
let l:current_path = l:search_path
|
||||||
while 1
|
while 1
|
||||||
" Run script has higher priority over an exe named after the current file.
|
" run script
|
||||||
let l:search = l:current_path . 'run'
|
if l:also_search_for_cpp_run_script
|
||||||
if filereadable(l:search)
|
if TryRun(l:current_path . 'run-cpp') | return 1 | endif
|
||||||
exec "AsyncRun! " . l:search
|
|
||||||
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
|
" filename exe
|
||||||
let l:search = l:current_path . a:file_exe_name
|
if TryRun(l:current_path . a:file_exe_name) | return 1 | endif
|
||||||
if filereadable(l:search)
|
|
||||||
exec "AsyncRun! " . l:search
|
|
||||||
return 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
" bin/filename exe
|
" bin/filename exe
|
||||||
let l:search = l:current_path . 'bin/' . a:file_exe_name
|
if TryRun(l:current_path. 'bin/' . a:file_exe_name) | return 1 | endif
|
||||||
if filereadable(l:search)
|
|
||||||
exec "AsyncRun! " . l:search
|
|
||||||
return 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
" run_tree/filename exe
|
" run_tree/filename exe
|
||||||
let l:search = l:current_path . 'run_tree/' . a:file_exe_name
|
if TryRun(l:current_path. 'run_tree/' . a:file_exe_name) | return 1 | endif
|
||||||
if filereadable(l:search)
|
|
||||||
exec "AsyncRun! " . l:search
|
|
||||||
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.
|
" 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)
|
if isdirectory(l:current_path . '.git') || IsRootDrive(l:current_path)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user