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* ]] |
# 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 "$@" |
||||||
} |
} |
||||||
|
|||||||
@ -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