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