home/rc/core/doc.kak
Frank LENORMAND 0532251aaf Make sure no ANSI sequences are in the data returned by man
The Debian implementation of `man-db` does not strip ANSI sequences out
of the file, even though the documentation says it would do so. The
commit that originally closed this issue wasn't related to the problem
experienced, this one hopefully addresses it.

This commit also addresses an issue with the `-i` flag in BSD `sed`
which expects an argument (the GNU implementation doesn't).

Fixes #1098
2017-02-10 13:30:06 +03:00

53 lines
1.7 KiB
Plaintext

decl str docsclient
def -hidden -params 1..2 doc-open %{
%sh{
manout=$(mktemp /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 -color 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 "echo -color Error No such doc file: ${PATH_DOC}"
exit
fi
printf %s\\n "eval -try-client %opt{docsclient} doc-open ${PATH_DOC} $@"
}
}
alias global help doc