f6a2925950
Level out the builtin commands loaded at startup in terms of format and expressiveness. The following convention was followed: * commands that take more than one argument have to be described along with their parameters prior to the actual documentation, otherwise the docstring consists in a capitalized sentence e.g. `command <arg1>: do something` * optional arguments are enclosed in square brackets, to comply with the format used for hardcoded commands e.g. `cd [<directory>]` * describe the effects of the command in the documentation string and omit implementation details unless they are relevant. Usually command names include the name of the tool they use, so they don't need to be redundantly mentioned e.g. `tmux-new-pane <arguments>: open a new pane` * document the format the parameters to the commands, or list them if they are to be chosen among a list of static values (c.f. `spell.kak`)
76 lines
2.9 KiB
Plaintext
76 lines
2.9 KiB
Plaintext
decl str makecmd make
|
|
decl str toolsclient
|
|
decl -hidden int _make_current_error_line
|
|
|
|
def -params .. \
|
|
-docstring %{make [<arguments>]: make utility wrapper
|
|
All the optional arguments are forwarded to the make utility} \
|
|
make %{ %sh{
|
|
output=$(mktemp -d -t kak-make.XXXXXXXX)/fifo
|
|
mkfifo ${output}
|
|
( eval ${kak_opt_makecmd} "$@" > ${output} 2>&1 ) > /dev/null 2>&1 < /dev/null &
|
|
|
|
printf %s\\n "eval -try-client '$kak_opt_toolsclient' %{
|
|
edit! -fifo ${output} -scroll *make*
|
|
set buffer filetype make
|
|
set buffer _make_current_error_line 0
|
|
hook -group fifo buffer BufCloseFifo .* %{
|
|
nop %sh{ rm -r $(dirname ${output}) }
|
|
rmhooks buffer fifo
|
|
}
|
|
}"
|
|
}}
|
|
|
|
addhl -group / group make
|
|
addhl -group /make regex "^((?:\w:)?[^:\n]+):(\d+):(?:(\d+):)?\h+(?:((?:fatal )?error)|(warning)|(note)|(required from(?: here)?))?.*?$" 1:cyan 2:green 3:green 4:red 5:yellow 6:blue 7:yellow
|
|
addhl -group /make line %{%opt{_make_current_error_line}} default+b
|
|
|
|
hook -group make-highlight global WinSetOption filetype=make %{ addhl ref make }
|
|
|
|
hook global WinSetOption filetype=make %{
|
|
hook buffer -group make-hooks NormalKey <ret> make-jump
|
|
}
|
|
|
|
hook -group make-highlight global WinSetOption filetype=(?!make).* %{ rmhl make }
|
|
|
|
hook global WinSetOption filetype=(?!make).* %{
|
|
rmhooks buffer make-hooks
|
|
}
|
|
|
|
decl str jumpclient
|
|
|
|
def -hidden make-jump %{
|
|
eval -collapse-jumps %{
|
|
try %{
|
|
exec gl<a-?> "Entering directory" <ret>
|
|
exec s "Entering directory '([^']+)'.*\n([^:]+):(\d+):(?:(\d+):)?([^\n]+)\'" <ret>l
|
|
set buffer _make_current_error_line %val{cursor_line}
|
|
eval -try-client %opt{jumpclient} "edit -existing %reg{1}/%reg{2} %reg{3} %reg{4}; echo -color Information %{%reg{5}}"
|
|
try %{ focus %opt{jumpclient} }
|
|
} catch %{
|
|
exec <a-h><a-l> s "((?:\w:)?[^:]+):(\d+):(?:(\d+):)?([^\n]+)\'" <ret>l
|
|
set buffer _make_current_error_line %val{cursor_line}
|
|
eval -try-client %opt{jumpclient} "edit -existing %reg{1} %reg{2} %reg{3}; echo -color Information %{%reg{4}}"
|
|
try %{ focus %opt{jumpclient} }
|
|
}
|
|
}
|
|
}
|
|
|
|
def make-next -docstring 'Jump to the next make error' %{
|
|
eval -collapse-jumps -try-client %opt{jumpclient} %{
|
|
buffer '*make*'
|
|
exec "%opt{_make_current_error_line}g<a-l>/[0-9]+: (?:fatal )?error:<ret>"
|
|
make-jump
|
|
}
|
|
try %{ eval -client %opt{toolsclient} %{ exec %opt{_make_current_error_line}g } }
|
|
}
|
|
|
|
def make-prev -docstring 'Jump to the previous make error' %{
|
|
eval -collapse-jumps -try-client %opt{jumpclient} %{
|
|
buffer '*make*'
|
|
exec "%opt{_make_current_error_line}g<a-h><a-/>[0-9]+: (?:fatal )?error:<ret>"
|
|
make-jump
|
|
}
|
|
try %{ eval -client %opt{toolsclient} %{ exec %opt{_make_current_error_line}g } }
|
|
}
|