decl -docstring "name of the client in which documentation is to be displayed" \ str docsclient def -hidden -params 1..2 doc-open %{ %sh{ manout=$(mktemp "${TMPDIR:-/tmp}"/kak-man-XXXXXX) # Those options are handled by the `man-db` implementation export MANWIDTH=${kak_window_width} if man "$1" > "${manout}"; then sed -i "" -e $(printf 's/.\x8//g') -e 's,\x1B\[[0-9;]*[a-zA-Z],,g' "${manout}" printf %s\\n " edit! -scratch '*doc*' exec |cat<space>${manout}<ret>gg nop %sh{rm ${manout}} set buffer filetype man " if [ $# -gt 1 ]; then needle=$(printf %s\\n "$2" | sed 's,<,<lt>,g') printf %s\\n "try %{ exec '%<a-s><a-k>(?i)^\h+[^\n]*?\Q${needle}\E<ret>\'' } catch %{ exec <space>gg }" fi else printf %s\\n "echo -markup %{{Error}doc '$@' failed: see *debug* buffer for details}" rm ${manout} fi } } def -params 1..2 \ -shell-candidates %{ find "${kak_runtime}/../doc/kak/manpages/" -type f -iname "*.gz" | while read l; do basename "${l%.*}" done } \ doc -docstring %{doc <topic> [<keyword>]: open a buffer containing documentation about a given topic An optional keyword argument can be passed to the function, which will be automatically selected in the documentation} %{ %sh{ readonly PATH_DOC="${kak_runtime}/../doc/kak/manpages/${1}.gz" shift if [ -f "${PATH_DOC}" ]; then printf %s\\n "eval -try-client %opt{docsclient} doc-open ${PATH_DOC} $@" else printf %s\\n "echo -markup '{Error}No such doc file: ${PATH_DOC}'" fi } } alias global help doc