define-command -params .. \ -docstring %{ zig-run []: wrapper for `zig build run` All the optional arguments are forwarded to zig build run } zig-run %{ evaluate-commands %sh{ output=$(mktemp -d "${TMPDIR:-/tmp}"/kak-zig.XXXXXXXX)/fifo mkfifo ${output} ( eval zig build run "$@" > ${output} 2>&1 & ) > /dev/null 2>&1 < /dev/null printf %s\\n "evaluate-commands -try-client '$kak_opt_toolsclient' %{ edit! -fifo ${output} -scroll *zig* set-option buffer filetype zig-build hook -always -once buffer BufCloseFifo .* %{ nop %sh{ rm -r $(dirname ${output}) } } try %{ focus } }" }} define-command -params 1 \ -docstring %{ zig-auto-run : automatically run zig-run on save } zig-auto-run %{ hook %arg{1} BufWritePost .* %{ zig-run } } hook -group zig-build-highlight global WinSetOption filetype=zig-build %{ add-highlighter window/zig-build group add-highlighter window/zig-build/ regex '(error:)|(note:)' 1:Error 2:Information add-highlighter window/zig-build/ regex '((?:\w|/|\.)+?):([0-9]+):([0-9]+): (?:.*?)' 1:variable 2:value 3:value hook buffer -group zig-hooks NormalKey zig-jump hook -once -always window WinSetOption filetype=.* %{ remove-hooks buffer zig-hooks remove-highlighter window/zig-build } } define-command -hidden zig-open-error -params 4 %{ evaluate-commands -try-client %opt{jumpclient} %{ edit -existing "%arg{1}" %arg{2} %arg{3} echo -markup "{Information}{\}%arg{4}" try %{ focus } } } define-command -hidden zig-jump %{ evaluate-commands %{ execute-keys gl '((?:\w|/|\.|-)+):([0-9]+):([0-9]+): (.+?)' execute-keys s '((?:\w|/|\.|-)+):([0-9]+):([0-9]+): (.+?)$' ; zig-open-error "%reg{1}" "%reg{2}" "%reg{3}" "%reg{4}" } } define-command \ -docstring %{ new-tools: open a new client for tools (make.kak, grep.kak, zig.kak) to use for output Also sets the current client to be the one to go back to when jumping to an error } new-tools %{ new rename-client tools set-option global toolsclient tools set-option global jumpclient %val{client} }