colorize: add ability to colorize multiple files into less (#7662)

cless is an alias for a colorized less wrappper: colorize_via_pygmentize_less.
Note that cless opens many files as independent files, navigatable with `:n` and `:p`.
This commit is contained in:
Francisco de Zuviría
2019-04-22 16:06:47 -03:00
committed by Marc Cornellà
parent 9b2410fbcf
commit ebd13b60c1
2 changed files with 35 additions and 3 deletions

View File

@@ -1,5 +1,6 @@
# easier alias to use the plugin
alias ccat='colorize_via_pygmentize'
alias cless='colorize_via_pygmentize_less'
colorize_via_pygmentize() {
if ! (( $+commands[pygmentize] )); then
@@ -16,7 +17,7 @@ colorize_via_pygmentize() {
# guess lexer from file extension, or
# guess it from file contents if unsuccessful
local FNAME lexer
for FNAME in $@
for FNAME in "$@"
do
lexer=$(pygmentize -N "$FNAME")
if [[ $lexer != text ]]; then
@@ -26,3 +27,23 @@ colorize_via_pygmentize() {
fi
done
}
colorize_via_pygmentize_less() (
# this function is a subshell so tmp_files can be shared to cleanup function
declare -a tmp_files
cleanup () {
[[ ${#tmp_files} -gt 0 ]] && rm -f "${tmp_files[@]}"
exit
}
trap 'cleanup' EXIT HUP TERM INT
while (( $# != 0 )); do #TODO: filter out less opts
tmp_file="$(mktemp --tmpdir "tmp.colorize.XXXX.$(sed 's/\//./g' <<< "$1")")"
tmp_files+=("$tmp_file")
colorize_via_pygmentize "$1" > "$tmp_file"
shift 1
done
less -f "${tmp_files[@]}"
)