define-command -docstring %{ shell-command [switches] : Run the given shell command. Display its output in an info modal. Switches: -d echo stdout to *debug* buffer as well } -params 1.. shell-command %{ evaluate-commands %sh{ if [ "$1" = "-d" ]; then debug="true" shift fi stdout="$(eval "$@")" printf 'info -title sh "%s"\n' "$stdout" if [ "$debug" = "true" ]; then printf 'echo -debug -- "%s"\n' "$stdout" fi } } define-command -docstring %{ shell-async-command [switches] : Run the given shell command asynchronously. Display its output in an info modal. Switches: -d echo stdout to *debug* buffer as well } -params 1.. shell-async-command %{ nop %sh{ { if [ "$1" = "-d" ]; then debug="true" shift fi stdout="$(eval "$@")" cmd="$(printf 'info -title sh "%s"\n' "$stdout")" if [ "$debug" = "true" ]; then dcmd="$(printf 'echo -debug "%s"\n' "$stdout")" cmd="$(printf '%s\n%s' "$cmd" "$dcmd")" fi printf 'evaluate-commands -try-client %s %%{ %s }' "$kak_client" "$cmd" | kak -p "$kak_session" } >/dev/null 2>&1