refactor(colored-man-pages): move nroff wrapper and refactor logic in colored function (#9437)

This commit is contained in:
ratijas 2020-11-12 21:32:17 +03:00 committed by GitHub
parent 51772732f5
commit 9b119866dd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 67 additions and 32 deletions

View file

@ -16,3 +16,17 @@ You can also try to color other pages by prefixing the respective command with `
```zsh ```zsh
colored git help clone colored git help clone
``` ```
## Customization
The plugin declares global associative array `less_termcap`, which maps termcap capabilities to escape
sequences for the `less` pager. This mapping can be further customized by the user after the plugin is
loaded. Check out sources for more.
For example: `less_termcap[md]` maps to `LESS_TERMCAP_md` which is the escape sequence that tells `less`
how to print something in bold. It's currently shown in bold red, but if you want to change it, you
can redefine `less_termcap[md]` in your zshrc file, after OMZ is sourced:
```zsh
less_termcap[md]="${fg_bold[blue]}" # this tells less to print bold text in bold blue
```

View file

@ -1,39 +1,48 @@
if [[ "$OSTYPE" = solaris* ]] # Requires colors autoload.
then # See termcap(5).
if [[ ! -x "$HOME/bin/nroff" ]]
then # Set up once, and then reuse. This way it supports user overrides after the
mkdir -p "$HOME/bin" # plugin is loaded.
cat > "$HOME/bin/nroff" <<EOF typeset -AHg less_termcap
#!/bin/sh
if [ -n "\$_NROFF_U" -a "\$1,\$2,\$3" = "-u0,-Tlp,-man" ]; then # bold & blinking mode
shift less_termcap[mb]="${fg_bold[red]}"
exec /usr/bin/nroff -u\$_NROFF_U "\$@" less_termcap[md]="${fg_bold[red]}"
fi less_termcap[me]="${reset_color}"
#-- Some other invocation of nroff # standout mode
exec /usr/bin/nroff "\$@" less_termcap[so]="${fg_bold[yellow]}${bg[blue]}"
EOF less_termcap[se]="${reset_color}"
chmod +x "$HOME/bin/nroff" # underlining
fi less_termcap[us]="${fg_bold[green]}"
fi less_termcap[ue]="${reset_color}"
# Absolute path to this file's directory.
typeset __colored_man_pages_dir="${0:A:h}"
function colored() { function colored() {
command env \ local -a environment
LESS_TERMCAP_mb=$(printf "\e[1;31m") \
LESS_TERMCAP_md=$(printf "\e[1;31m") \ # Convert associative array to plain array of NAME=VALUE items.
LESS_TERMCAP_me=$(printf "\e[0m") \ local k v
LESS_TERMCAP_se=$(printf "\e[0m") \ for k v in "${(@kv)less_termcap}"; do
LESS_TERMCAP_so=$(printf "\e[1;44;33m") \ environment+=( "LESS_TERMCAP_${k}=${v}" )
LESS_TERMCAP_ue=$(printf "\e[0m") \ done
LESS_TERMCAP_us=$(printf "\e[1;32m") \
PAGER="${commands[less]:-$PAGER}" \ # Prefer `less` whenever available, since we specifically configured
_NROFF_U=1 \ # environment for it.
PATH="$HOME/bin:$PATH" \ environment+=( PAGER="${commands[less]:-$PAGER}" )
"$@"
# See ./nroff script.
if [[ "$OSTYPE" = solaris* ]]; then
environment+=( PATH="${__colored_man_pages_dir}:$PATH" )
fi
command env $environment "$@"
} }
# Colorize man and dman/debman (from debian-goodies) # Colorize man and dman/debman (from debian-goodies)
function man \ function man \
dman \ dman \
debman { debman {
colored $0 "$@" colored $0 "$@"
} }

12
plugins/colored-man-pages/nroff Executable file
View file

@ -0,0 +1,12 @@
#!/bin/sh
# The whole point of this wrapper is to replace emboldening factor -u0 with
# -u1 under certain circumstances on Solaris.
if [ "$1,$2,$3" = "-u0,-Tlp,-man" ]; then
shift
exec /usr/bin/nroff -u1 "$@"
else
# Some other invocation of nroff
exec /usr/bin/nroff "$@"
fi