mirror of
https://oauth2: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@github.com/m1ngsama/chopsticks.git
synced 2026-05-13 20:41:04 +08:00
Use temp output for C file runner (#21)
This commit is contained in:
parent
097c8abcd7
commit
9fde301a2c
2 changed files with 39 additions and 1 deletions
|
|
@ -113,7 +113,11 @@ function! s:RunFile() abort
|
|||
elseif l:ft ==# 'go' | execute '!go run ' . l:file
|
||||
elseif l:ft ==# 'rust' | execute '!cargo run'
|
||||
elseif l:ft ==# 'sh' | execute '!bash ' . l:file
|
||||
elseif l:ft ==# 'c' | execute '!gcc -o /tmp/a.out ' . l:file . ' && /tmp/a.out'
|
||||
elseif l:ft ==# 'c'
|
||||
let l:out_path = tempname()
|
||||
let l:out = shellescape(l:out_path)
|
||||
execute '!gcc -o ' . l:out . ' ' . l:file . ' && ' . l:out
|
||||
call delete(l:out_path)
|
||||
elseif l:ft ==# 'lua' | execute '!lua ' . l:file
|
||||
elseif l:ft ==# 'ruby' | execute '!ruby ' . l:file
|
||||
elseif l:ft ==# 'perl' | execute '!perl ' . l:file
|
||||
|
|
|
|||
|
|
@ -268,6 +268,40 @@ check_vim() {
|
|||
-c 'if &l:syntax !=# "" || &l:undolevels != -1 || &l:swapfile || get(b:, "ale_enabled", 1) != 0 | cquit | endif' \
|
||||
-c 'qa!' 2>&1
|
||||
|
||||
mkdir -p "$TMP_ROOT/fake-bin" "$TMP_ROOT/c runner"
|
||||
cat > "$TMP_ROOT/fake-bin/gcc" <<'GCCEOF'
|
||||
#!/usr/bin/env bash
|
||||
set -eu
|
||||
printf '%s\n' "$@" > "$GCC_ARGS"
|
||||
out=""
|
||||
while [ "$#" -gt 0 ]; do
|
||||
if [ "$1" = "-o" ]; then
|
||||
shift
|
||||
out="$1"
|
||||
fi
|
||||
shift || true
|
||||
done
|
||||
test -n "$out"
|
||||
printf '%s\n' '#!/usr/bin/env bash' 'exit 0' > "$out"
|
||||
chmod +x "$out"
|
||||
GCCEOF
|
||||
chmod +x "$TMP_ROOT/fake-bin/gcc"
|
||||
c_file="$TMP_ROOT/c runner/main.c"
|
||||
c_file_real="$(cd "$TMP_ROOT/c runner" && pwd -P)/main.c"
|
||||
printf '%s\n' 'int main(void) { return 0; }' > "$c_file"
|
||||
GCC_ARGS="$TMP_ROOT/gcc-args.txt" \
|
||||
PATH="$TMP_ROOT/fake-bin:$PATH" \
|
||||
XDG_CONFIG_HOME="$EMPTY_XDG" \
|
||||
vim -u .vimrc -i NONE -es -N "$c_file" \
|
||||
-c 'set filetype=c' \
|
||||
-c 'normal ,cr' \
|
||||
-c 'qa!' 2>&1
|
||||
c_out="$(sed -n '2p' "$TMP_ROOT/gcc-args.txt")"
|
||||
test -n "$c_out"
|
||||
test "$c_out" != "/tmp/a.out"
|
||||
test ! -e "$c_out"
|
||||
grep -Fxq "$c_file_real" "$TMP_ROOT/gcc-args.txt"
|
||||
|
||||
XDG_CONFIG_HOME="$EMPTY_XDG" vim -u .vimrc -i NONE --startuptime "$TMP_ROOT/startup.log" \
|
||||
-es -N -c 'qa!' 2>/dev/null
|
||||
tail -1 "$TMP_ROOT/startup.log"
|
||||
|
|
|
|||
Loading…
Reference in a new issue