Files
q-tools/highbeam
ville rantanen 3516fed53c coloring update
2015-06-15 10:48:23 +03:00

133 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
function usage {
echo -e ' High Beam Highlighter
- a trial to create a very generic modifyable
syntax highlighter.
Example rules: ( ~/.highbeamrc )
--------------------
RULES=(
"[0-9]" "$c" # Show numbers with Cyan color. NOTE: since the colors are represented with numbers, having this later in the rules will break coloring!
"$USER[ ]\+$USER" "$BC$K" # Use quotes to have rules with spaces. This colors the "ls -la" usernames. background cyan, black text
status "$g" # simple word matching, coloring green
"^d[^ ]*" "$G" # color words at the beginning of line, starting with d. color bright green
"q.\{0,3\}r" "$Y" # q*r with maximum 3 characters in between. color bright yellow
)
--------------------
Rules can be also exressed as a space separated list variable:
export HB_RULES='\''"[0-9]" "$C" "g" "$Y"'\''
HB_RULES are appended to other rules
Bright colors: $R $G $B $Y $M $C $W $K
Dark colors: $r $g $b $y $m $c $w $k
Modify to bright version by prefixing with $H (e.g. $H$g)
Background colors: $BR $BG $BB $BY $BC $BM $BW
Underline: $U
Usage: highbeam [-c] [-h] [-f config]
-c Be case sensitive
-h Help
-f Define config file (default ~/.highbeamrc)
-r Define rules with a string, replaces the other rules
-r '\''"land[^[:space:]]\+" "$G" "sky" "$B"'\''
'
}
E='\x1b['
H="${E}1m"
Z="${E}0m"
# list of text colors:
K="${E}1;30m"
R="${E}1;31m"
G="${E}1;32m"
B="${E}1;34m"
Y="${E}1;33m"
M="${E}1;35m"
C="${E}1;36m"
W="${E}1;37m"
k="${E}30m"
r="${E}31m"
g="${E}32m"
b="${E}34m"
y="${E}33m"
m="${E}35m"
c="${E}36m"
w="${E}37m"
# list of BG colors:
BR="${E}41m"
BG="${E}42m"
BB="${E}44m"
BY="${E}43m"
BM="${E}45m"
BC="${E}46m"
BW="${E}47m"
# lines
U="${E}4m"
CONF_FILE=~/.highbeamrc
CONF_LINE=""
FLAGS="ig"
while getopts chf:r: opt
do case "$opt" in
c)
FLAGS="g"
;;
h)
usage
exit
;;
f)
CONF_FILE=$OPTARG
;;
r)
CONF_LINE=( $( eval echo $OPTARG ) )
;;
esac
done
[[ -z "$CONF_LINE" ]] && {
# user rules:
[[ -e "${CONF_FILE}" ]] && {
. "${CONF_FILE}" || {
echo You may have wrong format in "${CONF_FILE}" >&2
usage >&2
exit 1
}
}
for (( r=0; r<${#RULES[@]}; r++ ));
do REGEX="$REGEX -e 's/\(${RULES[$r]}\)/${RULES[$(( $r + 1 ))]}\1${Z}/${FLAGS}'"
r=$(( $r + 1 ))
done
} || {
# string fed rules
for (( r=0; r<${#CONF_LINE[@]}; r++ ));
do REGEX="$REGEX -e 's/\(${CONF_LINE[$r]}\)/${CONF_LINE[$(( $r + 1 ))]}\1${Z}/${FLAGS}'"
r=$(( $r + 1 ))
done
}
# env variable fed rules
[[ -z "$HB_RULES" ]] || {
CONF_ENV=( $( eval echo "$HB_RULES" ) )
for (( r=0; r<${#CONF_ENV[@]}; r++ ));
do REGEX="$REGEX -e 's/\(${CONF_ENV[$r]}\)/${CONF_ENV[$(( $r + 1 ))]}\1${Z}/${FLAGS}'"
r=$(( $r + 1 ))
done
}
#~ echo ${CONF_ENV[@]}
#~ echo $HB_RULES
#~ echo $REGEX
[[ -z "$REGEX" ]] && {
cat -
} || {
eval sed $REGEX || echo Maybe errors in your rules: "$REGEX" >&2
}