mirror of
https://oauth2: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@github.com/m1ngsama/chopsticks.git
synced 2026-05-14 04:51:08 +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 ==# 'go' | execute '!go run ' . l:file
|
||||||
elseif l:ft ==# 'rust' | execute '!cargo run'
|
elseif l:ft ==# 'rust' | execute '!cargo run'
|
||||||
elseif l:ft ==# 'sh' | execute '!bash ' . l:file
|
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 ==# 'lua' | execute '!lua ' . l:file
|
||||||
elseif l:ft ==# 'ruby' | execute '!ruby ' . l:file
|
elseif l:ft ==# 'ruby' | execute '!ruby ' . l:file
|
||||||
elseif l:ft ==# 'perl' | execute '!perl ' . 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 'if &l:syntax !=# "" || &l:undolevels != -1 || &l:swapfile || get(b:, "ale_enabled", 1) != 0 | cquit | endif' \
|
||||||
-c 'qa!' 2>&1
|
-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" \
|
XDG_CONFIG_HOME="$EMPTY_XDG" vim -u .vimrc -i NONE --startuptime "$TMP_ROOT/startup.log" \
|
||||||
-es -N -c 'qa!' 2>/dev/null
|
-es -N -c 'qa!' 2>/dev/null
|
||||||
tail -1 "$TMP_ROOT/startup.log"
|
tail -1 "$TMP_ROOT/startup.log"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue