121 lines
2.9 KiB
Bash
Executable File
121 lines
2.9 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" "$BGC$BLACK" # 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[^ ]*" "$H$G" # color words at the beginning of line, starting with d. color bright green
|
|
"q.\{0,3\}r" "$H$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
|
|
|
|
Color variables: $R $G $B $Y $M $C $W $BLACK
|
|
Modify to bright version by prefixing with $H (e.g. $H$G)
|
|
Background colors: $BGR $BGG $BGB $BGY $BGC $BGM $BGW
|
|
|
|
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:
|
|
BLACK="${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:
|
|
BGR="${E}41m"
|
|
BGG="${E}42m"
|
|
BGB="${E}44m"
|
|
BGY="${E}43m"
|
|
BGM="${E}45m"
|
|
BGC="${E}46m"
|
|
BGW="${E}47m"
|
|
|
|
|
|
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
|
|
}
|
|
|
|
|
|
|