Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 8th, 2012  |  syntax: None  |  size: 7.33 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #! /bin/bash
  2. # (c) 2011  ssvda
  3.  
  4. BASHCOLOR_ESCAPE="\033["
  5. BASHCOLOR_ESCAPE_COLOR="m"
  6. BASHCOLOR_ESCAPE_CS=";"
  7.  
  8. BASHCOLOR_PURE_BLACK=0
  9. BASHCOLOR_PURE_RED=1
  10. BASHCOLOR_PURE_GREEN=2
  11. BASHCOLOR_PURE_YELLOW=3
  12. BASHCOLOR_PURE_BLUE=4
  13. BASHCOLOR_PURE_MAGENTA=5
  14. BASHCOLOR_PURE_CYAN=6
  15. BASHCOLOR_PURE_WHITE=7
  16.  
  17. BASHCOLOR_STYLE_NORMAL=0
  18. BASHCOLOR_STYLE_BOLD=1
  19. BASHCOLOR_STYLE_UNDERLINE=4
  20. BASHCOLOR_STYLE_BLINKED=5
  21. BASHCOLOR_STYLE_INVERTED=7
  22. BASHCOLOR_STYLE_CONCEALED=8
  23.  
  24. BASHCOLOR_STYLE=0
  25. BASHCOLOR_FOREGROUND=3
  26. BASHCOLOR_BACKGROUND=4
  27. BASHCOLOR_BRIGHT_FOREGROUND=9
  28. BASHCOLOR_BRIGHT_BACKGROUND=10
  29.  
  30. BASHCOLOR_CURSOR_PUSH=s
  31. BASHCOLOR_CURSOR_POP=u
  32. BASHCOLOR_CURSOR_SET=f
  33.  
  34. function color()
  35. {
  36.         # Save argument.
  37.         local ARG=$1
  38.        
  39.         # Testing for special arguments.
  40.         case "$ARG" in
  41.                 -f|--f|--fl|--flu|--flus|--flush)
  42.                         ARG=f;
  43.                         ;;
  44.                 -t|--t|--ta|--tab|--tabl|--table)
  45.                         # TODO
  46.                         ;;
  47.                 -?|-h|--h|--he|--hel|--help)
  48.                         cat <<EOF
  49. Take arguments describing color and style and sets it.
  50.  
  51. It's argument coud be in form (all fields are optional):
  52.  (special)(style)(colors)(cursor)
  53.  
  54. (colors) are
  55.  (foreground color)
  56.  (foreground color)(backgroung color)
  57.  
  58.  Colors are:
  59.   d   for black        or  D   for brighten black (dark gray)
  60.   r   for red          or  R   for brighten red
  61.   g   for green        or  G   for brighten green
  62.   b   for blue         or  B   for brighten blue
  63.   y   for yellow       or  Y   for brighten yellow
  64.   m   for magenta      or  M   for brighten magenta
  65.   c   for cyan         or  C   for brighten cyan
  66.   w   for white (gray) or  W   for brighten white
  67.   _   for previous value
  68.  Or #RRGGBB code for 256-colors scheme (not implemented yet).
  69.  
  70. (style) are:
  71.  n    for normal text (negativate all other styles)
  72.  s    for bold (strong) text
  73.  u    for underlined test.
  74.  S    for concealed text
  75.  i    for inversed text (foreground substitute background)
  76.  t    for blinkng (twinkling) text
  77. Styles could be combined linearity.
  78.  
  79. (special) arguments are:
  80.  f            --- reset to default (before setting others options).
  81.  e            --- do not change something on terminal, just print escapes.
  82.  -f        or
  83.  --flush      --- reset to default and exit.
  84.  -t        or
  85.  --table      --- print a table of colors and other escapes and exit.
  86.  -?        or
  87.  -h        or
  88.  --help       --- print this message and exit.
  89.  
  90. Cursor commands are:
  91.  +x,y      to set cursor in position
  92.  +x,yS     to set cursor in position and save it
  93.  +S        to save current cursor position
  94.  +R        to restore saved cursor position
  95. x and y coud be negative to address the opposite side of screen.
  96. EOF
  97.                         return
  98.                         ;;
  99.         esac
  100.        
  101.         local FIELD=SPECIAL
  102.         local C
  103.        
  104.         local SPECIAL
  105.         local COLORS
  106.         local STYLES
  107.         local CURSOR
  108.        
  109.         local SBOLD=0
  110.         local SCONC=0
  111.         local SINVE=0
  112.         local SBLNK=0
  113.         local SUNDL=0
  114.         local SUNTA=1
  115.        
  116.         local FGC
  117.         local BGC
  118.        
  119.         local ESCAPE
  120.        
  121.         local ECHO=0
  122.        
  123.         # Should we reset?
  124.         if [ ${#ARG} -gt 0 ] && [ "${ARG:0:1}" == "f" ]
  125.         then
  126.                 ESCAPE="$ESCAPE$BASHCOLOR_ESCAPE$BASHCOLOR_STYLE_NORMAL$BASHCOLOR_ESCAPE_COLOR"
  127.                 ARG="${ARG/#f/}"
  128.         fi
  129.        
  130.         while [ ${#ARG} -gt 0 ]
  131.         do
  132.                 C="${ARG:0:1}"
  133.                 case $FIELD in
  134.                         SPECIAL)
  135.                                 case "$C" in
  136.                                         f) ESCAPE="$ESCAPE$BASHCOLOR_ESCAPE$BASHCOLOR_STYLE_NORMAL$BASHCOLOR_ESCAPE_COLOR";;
  137.                                         e) ECHO=1;;
  138.                                         *)
  139.                                                 FIELD=STYLES
  140.                                                 continue
  141.                                                 ;;
  142.                                 esac
  143.                                 ;;
  144.                         STYLES)
  145.                                 case "$C" in
  146.                                         n)
  147.                                                 SUNTA=0
  148.                                                 SBOLD=0
  149.                                                 SCONC=0
  150.                                                 SINVE=0
  151.                                                 SBLNK=0;;
  152.                                         s)
  153.                                                 SUNTA=0
  154.                                                 SBOLD=1;;
  155.                                         u)
  156.                                                 SUNTA=0
  157.                                                 SUNDL=1;;
  158.                                         S)
  159.                                                 SUNTA=0
  160.                                                 SCONC=1;;
  161.                                         i)
  162.                                                 SUNTA=0
  163.                                                 SINVE=1;;
  164.                                         t)
  165.                                                 SUNTA=0
  166.                                                 SBLNK=1;;
  167.                                         *)
  168.                                                 FIELD=FCOLOR
  169.                                                 continue # Do not update C
  170.                                                 ;;
  171.                                 esac
  172.                                 ;;
  173.                         FCOLOR)
  174.                                 case "$C" in
  175.                                         d) FGC="${BASHCOLOR_FOREGROUND}${BASHCOLOR_PURE_BLACK}";;
  176.                                         D) FGC="${BASHCOLOR_BRIGHT_FOREGROUND}${BASHCOLOR_PURE_BLACK}";;
  177.                                         r) FGC="${BASHCOLOR_FOREGROUND}${BASHCOLOR_PURE_RED}";;
  178.                                         R) FGC="${BASHCOLOR_BRIGHT_FOREGROUND}${BASHCOLOR_PURE_RED}";;
  179.                                         g) FGC="${BASHCOLOR_FOREGROUND}${BASHCOLOR_PURE_GREEN}";;
  180.                                         G) FGC="${BASHCOLOR_BRIGHT_FOREGROUND}${BASHCOLOR_PURE_GREEN}";;
  181.                                         b) FGC="${BASHCOLOR_FOREGROUND}${BASHCOLOR_PURE_BLUE}";;
  182.                                         B) FGC="${BASHCOLOR_BRIGHT_FOREGROUND}${BASHCOLOR_PURE_BLUE}";;
  183.                                         y) FGC="${BASHCOLOR_FOREGROUND}${BASHCOLOR_PURE_YELLOW}";;
  184.                                         Y) FGC="${BASHCOLOR_BRIGHT_FOREGROUND}${BASHCOLOR_PURE_YELLOW}";;
  185.                                         m) FGC="${BASHCOLOR_FOREGROUND}${BASHCOLOR_PURE_MAGENTA}";;
  186.                                         M) FGC="${BASHCOLOR_BRIGHT_FOREGROUND}${BASHCOLOR_PURE_MAGENTA}";;
  187.                                         c) FGC="${BASHCOLOR_FOREGROUND}${BASHCOLOR_PURE_CYAN}";;
  188.                                         C) FGC="${BASHCOLOR_BRIGHT_FOREGROUND}${BASHCOLOR_PURE_CYAN}";;
  189.                                         w) FGC="${BASHCOLOR_FOREGROUND}${BASHCOLOR_PURE_WHITE}";;
  190.                                         W) FGC="${BASHCOLOR_BRIGHT_FOREGROUND}${BASHCOLOR_PURE_WHITE}";;
  191.                                         0) ;;
  192.                                         *)
  193.                                                 FIELD=BCOLOR
  194.                                                 continue
  195.                                                 ;;
  196.                                 esac
  197.                                 FIELD=BCOLOR
  198.                                 ;;
  199.                         BCOLOR)
  200.                                 case "$C" in
  201.                                         d) BGC="${BASHCOLOR_BACKGROUND}${BASHCOLOR_PURE_BLACK}";;
  202.                                         D) BGC="${BASHCOLOR_BRIGHT_BACKGROUND}${BASHCOLOR_PURE_BLACK}";;
  203.                                         r) BGC="${BASHCOLOR_BACKGROUND}${BASHCOLOR_PURE_RED}";;
  204.                                         R) BGC="${BASHCOLOR_BRIGHT_BACKGROUND}${BASHCOLOR_PURE_RED}";;
  205.                                         g) BGC="${BASHCOLOR_BACKGROUND}${BASHCOLOR_PURE_GREEN}";;
  206.                                         G) BGC="${BASHCOLOR_BRIGHT_BACKGROUND}${BASHCOLOR_PURE_GREEN}";;
  207.                                         b) BGC="${BASHCOLOR_BACKGROUND}${BASHCOLOR_PURE_BLUE}";;
  208.                                         B) BGC="${BASHCOLOR_BRIGHT_BACKGROUND}${BASHCOLOR_PURE_BLUE}";;
  209.                                         y) BGC="${BASHCOLOR_BACKGROUND}${BASHCOLOR_PURE_YELLOW}";;
  210.                                         Y) BGC="${BASHCOLOR_BRIGHT_BACKGROUND}${BASHCOLOR_PURE_YELLOW}";;
  211.                                         m) BGC="${BASHCOLOR_BACKGROUND}${BASHCOLOR_PURE_MAGENTA}";;
  212.                                         M) BGC="${BASHCOLOR_BRIGHT_BACKGROUND}${BASHCOLOR_PURE_MAGENTA}";;
  213.                                         c) BGC="${BASHCOLOR_BACKGROUND}${BASHCOLOR_PURE_CYAN}";;
  214.                                         C) BGC="${BASHCOLOR_BRIGHT_BACKGROUND}${BASHCOLOR_PURE_CYAN}";;
  215.                                         w) BGC="${BASHCOLOR_BACKGROUND}${BASHCOLOR_PURE_WHITE}";;
  216.                                         W) BGC="${BASHCOLOR_BRIGHT_BACKGROUND}${BASHCOLOR_PURE_WHITE}";;
  217.                                         0) ;;
  218.                                         *)
  219.                                                 FIELD=CURSOR
  220.                                                 continue
  221.                                                 ;;
  222.                                 esac
  223.                                 FIELD=CURSOR
  224.                                 ;;
  225.                         CURSOR)
  226.                                 [ "$C" != "+" ] && break
  227.                                 echo "Not implemented"
  228.                                 ;;
  229.                 esac
  230.                 ARG="${ARG/#$C/}"
  231.         done
  232.        
  233.         # Form escape sequence
  234.         if [ "$FGC" != "" ] || [ "$BGC" != "" ] || [ $SUNTA == 0 ]
  235.         then
  236.                 ESCAPE="$ESCAPE$BASHCOLOR_ESCAPE"
  237.                
  238.                 if [ $SUNTA == 0 ]
  239.                 then
  240.                         if [ $((SBOLD + SCONC + SINVE + SBLNK + SUNDL)) -eq 0 ]
  241.                         then
  242.                                 ESCAPE="$ESCAPE$BASHCOLOR_STYLE$BASHCOLOR_STYLE_NORMAL"
  243.                         else
  244.                                 local SEP=""
  245.                                 while [ $((SBOLD + SCONC + SINVE + SBLNK + SUNDL)) -ne 0 ]
  246.                                 do
  247.                                         #ESCAPE="$SEP$ESCAPE$BASHCOLOR_ESCAPE$BASHCOLOR_STYLE"
  248.                                         ESCAPE="$ESCAPE$SEP"
  249.                                         SEP="$BASHCOLOR_ESCAPE_CS"
  250.                                         [ $SBOLD -eq 1 ] && { ESCAPE="$ESCAPE$BASHCOLOR_STYLE_BOLD"; SBOLD=0; continue; }
  251.                                         [ $SCONC -eq 1 ] && {  ESCAPE="$ESCAPE$BASHCOLOR_STYLE_CONCEALED"; SCONC=0; continue; }
  252.                                         [ $SINVE -eq 1 ] && {  ESCAPE="$ESCAPE$BASHCOLOR_STYLE_INVERTED"; SINVE=0; continue; }
  253.                                         [ $SBLNK -eq 1 ] && {  ESCAPE="$ESCAPE$BASHCOLOR_STYLE_BLINKED"; SBLNK=0; continue; }
  254.                                         [ $SUNDL -eq 1 ] && {  ESCAPE="$ESCAPE$BASHCOLOR_STYLE_UNDERLINE"; SUNDL=0; continue; }
  255.                                 done
  256.                                 SEP=""
  257.                         fi
  258.                 fi
  259.                
  260.                 if [ "$FGC" != "" ]
  261.                 then
  262.                         if [ $SUNTA == 0 ]
  263.                         then
  264.                                 ESCAPE="$ESCAPE;"
  265.                         fi
  266.                        
  267.                         ESCAPE="$ESCAPE$FGC"
  268.                 fi
  269.                
  270.                 if [ "$BGC" != "" ]
  271.                 then
  272.                         if [ $SUNTA == 0 ] || [ "$FGC" != "" ]
  273.                         then
  274.                                 ESCAPE="$ESCAPE;"
  275.                         fi
  276.                        
  277.                         ESCAPE="$ESCAPE$BGC"
  278.                 fi
  279.                
  280.                 ESCAPE="$ESCAPE$BASHCOLOR_ESCAPE_COLOR"
  281.         fi
  282.        
  283.         if [ $ECHO == 1 ]
  284.         then
  285.                 echo "$ESCAPE"
  286.         else
  287.                 echo -ne "$ESCAPE"
  288.         fi
  289. }