mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-11-12 21:39:48 +01:00
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:
parent
9b2410fbcf
commit
ebd13b60c1
2 changed files with 35 additions and 3 deletions
|
@ -2,6 +2,10 @@
|
||||||
|
|
||||||
With this plugin you can syntax-highlight file contents of over 300 supported languages and other text formats.
|
With this plugin you can syntax-highlight file contents of over 300 supported languages and other text formats.
|
||||||
|
|
||||||
|
Colorize will highlight the content based on the filename extension. If it can't find a syntax-highlighting
|
||||||
|
method for a given extension, it will try to find one by looking at the file contents. If no highlight method
|
||||||
|
is found it will just cat the file normally, without syntax highlighting.
|
||||||
|
|
||||||
To use it, add colorize to the plugins array of your zshrc file:
|
To use it, add colorize to the plugins array of your zshrc file:
|
||||||
```
|
```
|
||||||
plugins=(... colorize)
|
plugins=(... colorize)
|
||||||
|
@ -9,9 +13,16 @@ plugins=(... colorize)
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
* `ccat <file> [files]`: colorize the contents of the file (or files, if more than one are provided). If no arguments are passed it will colorize the standard input or stdin.
|
* `ccat <file> [files]`: colorize the contents of the file (or files, if more than one are provided).
|
||||||
|
If no arguments are passed it will colorize the standard input or stdin.
|
||||||
|
|
||||||
Colorize will highlight the content based on the filename extension. If it can't find a syntax-highlighting method for a given extension, it will try to find one by looking at the file contents. If no highlight method is found it will just cat the file normally, without syntax highlighting.
|
* `cless <file> [files]`: colorize the contents of the file (or files, if more than one are provided) and
|
||||||
|
open less. If no arguments are passed it will colorize the standard input or stdin.
|
||||||
|
|
||||||
|
Note that `cless` will behave as less when provided more than one file: you have to navigate files with
|
||||||
|
the commands `:n` for next and `:p` for previous. The downside is that less options are not supported.
|
||||||
|
But you can circumvent this by either using the LESS environment variable, or by running `ccat file1 file2|less --opts`.
|
||||||
|
In the latter form, the file contents will be concatenated and presented by less as a single file.
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
# easier alias to use the plugin
|
# easier alias to use the plugin
|
||||||
alias ccat='colorize_via_pygmentize'
|
alias ccat='colorize_via_pygmentize'
|
||||||
|
alias cless='colorize_via_pygmentize_less'
|
||||||
|
|
||||||
colorize_via_pygmentize() {
|
colorize_via_pygmentize() {
|
||||||
if ! (( $+commands[pygmentize] )); then
|
if ! (( $+commands[pygmentize] )); then
|
||||||
|
@ -16,7 +17,7 @@ colorize_via_pygmentize() {
|
||||||
# guess lexer from file extension, or
|
# guess lexer from file extension, or
|
||||||
# guess it from file contents if unsuccessful
|
# guess it from file contents if unsuccessful
|
||||||
local FNAME lexer
|
local FNAME lexer
|
||||||
for FNAME in $@
|
for FNAME in "$@"
|
||||||
do
|
do
|
||||||
lexer=$(pygmentize -N "$FNAME")
|
lexer=$(pygmentize -N "$FNAME")
|
||||||
if [[ $lexer != text ]]; then
|
if [[ $lexer != text ]]; then
|
||||||
|
@ -26,3 +27,23 @@ colorize_via_pygmentize() {
|
||||||
fi
|
fi
|
||||||
done
|
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[@]}"
|
||||||
|
)
|
||||||
|
|
Loading…
Reference in a new issue