Initial commit

This commit is contained in:
Nulo 2021-07-09 01:51:32 +00:00
commit 57e55a2e5a
2 changed files with 99 additions and 0 deletions

37
README.md Normal file
View file

@ -0,0 +1,37 @@
# zig.kak
Useful tools for developing [Zig](https://ziglang.org) on [Kakoune](https://kakoune.org). Note that Kakoune already includes Zig syntax highlighting by default.
Inspired by `make.kak` and `grep.kak`.
## Commands
### `zig-run [arguments]`: wrapper for `zig build run`
> All the optional arguments are forwarded to zig build run.
Runs `zig build run` and opens the result in a buffer with basic syntax highlighting for errors, also allows going to the position of the errors by pressing Return.
### `zig-auto-run <scope>`: automatically run zig-run on save
Add this to your kakrc to apply this when opening any Zig file:
```kak
hook global WinSetOption filetype=zig %{ zig-auto-run buffer }
```
### `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.
## Also useful
Set the formatter for Zig files to `zig fmt`:
```kak
hook global WinSetOption filetype=zig %{
set-option buffer formatcmd 'zig fmt --stdin'
# Optionally format every time we save
#hook buffer BufWritePre .* format-buffer
}
```

62
rc/zig.kak Normal file
View file

@ -0,0 +1,62 @@
define-command -params .. \
-docstring %{
zig-run [<arguments>]: 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 <scope>: 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 <ret> 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<a-?> '((?:\w|/|\.)+):([0-9]+):([0-9]+): (.+?)' <ret>
execute-keys s '((?:\w|/|\.)+):([0-9]+):([0-9]+): (.+?)$' <ret>;
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}
}