vim build and run updates

This commit is contained in:
Michael Campagnaro 2023-03-01 15:27:26 -05:00
parent d664ba882c
commit 2e07b0c85f

62
vimrc
View File

@ -980,9 +980,9 @@ endfunction
" Set the intial light/dark mode. " Set the intial light/dark mode.
if g:campo_light_dark_mode =~ 'light' if g:campo_light_dark_mode =~ 'light'
call ChangeLightDarkMode('light', 1) call ChangeLightDarkMode('light', 1)
else else
call ChangeLightDarkMode('dark', 1) call ChangeLightDarkMode('dark', 1)
endif endif
" Open the current color scheme for editing. " Open the current color scheme for editing.
@ -1152,46 +1152,67 @@ function! StopRunTask()
endfunction endfunction
function! Build(optimized=0, silent=0) function! Build(optimized=0, silent=0)
let l:ext = tolower(expand('%:e'))
let l:parent_dir = expand('%:p:h')
let l:async_cmd = "AsyncRun! " let l:async_cmd = "AsyncRun! "
if a:silent if a:silent
let l:async_cmd .= "-post=call\\ HideAsyncResults() " let l:async_cmd .= "-post=call\\ HideAsyncResults() "
endif endif
let l:is_jai = 0 let l:is_jai = 0
let l:cmd = "" let l:cmd = ""
if filereadable(l:parent_dir . "/build.jai")
let l:ext = tolower(expand('%:e'))
let l:current_dir = expand('%:h')
let l:parent_dir = expand('%:p:h')
" Check if this is a jai module with a build.jai one directory back. This
" only works when the file is directly inside the modules folder.
let l:jai_module_with_build = (tolower(l:current_dir) == "modules") && filereadable(l:current_dir . "/../build.jai")
if (l:jai_module_with_build == 1) || filereadable(l:parent_dir . "/build.jai")
" Jai build file " Jai build file
let l:is_jai = 1 let l:is_jai = 1
let l:cmd = "jai " . l:parent_dir . "/build.jai " let l:cmd = "jai " . l:parent_dir . "/"
if l:jai_module_with_build == 1
let l:cmd .= "../build.jai"
else
let l:cmd .= "build.jai"
endif
if a:optimized == 1 if a:optimized == 1
echo "Compiling release build.jai" echo "Compiling release build.jai"
let l:cmd .= "-release " let l:cmd .= " -release"
else else
echo "Compiling debug build.jai" echo "Compiling debug build.jai"
endif endif
elseif l:ext == "jai" elseif l:ext == "jai"
let l:is_jai = 1 let l:is_jai = 1
let l:cmd = "jai % " let l:cmd = "jai % "
if a:optimized == 1 if a:optimized == 1
echo "Compiling release " . expand('%:t') echo "Compiling release " . expand('%:t')
let l:cmd .= "-release " let l:cmd .= " -release"
else else
echo "Compiling debug " . expand('%:t') echo "Compiling debug " . expand('%:t')
endif endif
" If there's a local modules/ directory then we'll import it. " If there's a local modules/ directory then we'll import it.
if isdirectory(l:parent_dir . "/modules") if isdirectory(l:parent_dir . "/modules")
let l:cmd .= "-import_dir modules " let l:cmd .= " -import_dir modules"
endif endif
else else
let l:cmd .= './build* ' let l:cmd .= './build* '
if a:optimized == 1 if a:optimized == 1
let l:cmd .= '-o ' let l:cmd .= ' -o'
endif endif
endif endif
if l:is_jai if l:is_jai
let l:cmd .= ' '.g:campo_jai_build_args let l:cmd .= ' '.g:campo_jai_build_args
endif endif
" I was originally passing -save=2 to AsyncRun! in order to save all " I was originally passing -save=2 to AsyncRun! in order to save all
" modified files (it just does a `silent! wall` call), but I want ctags to " modified files (it just does a `silent! wall` call), but I want ctags to
" be generated so we're handling the save ourselves. " be generated so we're handling the save ourselves.
@ -1199,18 +1220,29 @@ function! Build(optimized=0, silent=0)
exec l:async_cmd . l:cmd exec l:async_cmd . l:cmd
endfunction endfunction
function! RunExe() function! RunProgram()
if tolower(expand('%:e')) == "jai" let l:ext = tolower(expand('%:e'))
if l:ext == "jai"
if filereadable(expand('%:p:r') . '.exe') if filereadable(expand('%:p:r') . '.exe')
exec "AsyncRun! " . expand('%:p:r') . ".exe" exec "AsyncRun! " . expand('%:p:r') . ".exe"
else else
let l:files = systemlist('ls ' . expand('%:p:h') . '/*.exe 2>/dev/null') if tolower(expand('%:h')) == "modules"
" This is likely a jai module inside a project. Check for an " exe one directory back.
let l:files = systemlist('ls ' . expand('%:p:h') . '/../*.exe 2>/dev/null')
else
let l:files = systemlist('ls ' . expand('%:p:h') . '/*.exe 2>/dev/null')
endif
if len(l:files) > 0 if len(l:files) > 0
exec "AsyncRun! " . l:files[0] exec "AsyncRun! " . l:files[0]
else else
call PrintError("No exe found. Compile first?") call PrintError("No exe found. Compile first?")
endif endif
endif endif
elseif l:ext == "py"
exec "AsyncRun! python %"
else else
exec "AsyncRun! -post=call\\ StopRunTask() ./run %" exec "AsyncRun! -post=call\\ StopRunTask() ./run %"
endif endif
@ -1237,8 +1269,8 @@ nnoremap <silent><F8> :call Build(0, 1)<cr>
nnoremap <leader>bb :call Build(1)<cr> nnoremap <leader>bb :call Build(1)<cr>
" Execute run script " Execute run script
nnoremap <silent><leader>br :call RunExe()<cr> nnoremap <silent><leader>br :call RunProgram()<cr>
nnoremap <silent><F9> :call RunExe()<cr> nnoremap <silent><F9> :call RunProgram()<cr>
nnoremap <leader>bs :AsyncStop<cr> nnoremap <leader>bs :AsyncStop<cr>