mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			79 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # Put standard ANSI color codes in shell parameters for easy use.
 | |
| # Note that some terminals do not support all combinations.
 | |
| 
 | |
| typeset -Ag color colour
 | |
| 
 | |
| color=(
 | |
| # Attribute codes:
 | |
|   00 none
 | |
|   01 bold
 | |
|   02 faint                  22 normal
 | |
|   03 standout               23 no-standout
 | |
|   04 underline              24 no-underline
 | |
|   05 blink                  25 no-blink
 | |
|   07 reverse                27 no-reverse
 | |
|   08 conceal
 | |
| 
 | |
| # Text color codes:
 | |
|   30 black                  40 bg-black
 | |
|   31 red                    41 bg-red
 | |
|   32 green                  42 bg-green
 | |
|   33 yellow                 43 bg-yellow
 | |
|   34 blue                   44 bg-blue
 | |
|   35 magenta                45 bg-magenta
 | |
|   36 cyan                   46 bg-cyan
 | |
|   37 white                  47 bg-white
 | |
|   39 default                49 bg-default
 | |
| )
 | |
| 
 | |
| # A word about black and white:  The "normal" shade of white is really a
 | |
| # very pale grey on many terminals; to get truly white text, you have to
 | |
| # use bold white, and to get a truly white background you have to use
 | |
| # bold reverse white bg-xxx where xxx is your desired foreground color
 | |
| # (and which means the foreground is also bold).
 | |
| 
 | |
| # Map in both directions; could do this with e.g. ${(k)colors[(i)normal]},
 | |
| # but it's clearer to include them all both ways.
 | |
| 
 | |
| local k
 | |
| for k in ${(k)color}; do color[${color[$k]}]=$k; done
 | |
| 
 | |
| # Add "fg-" keys for all the text colors, for clarity.
 | |
| 
 | |
| for k in ${color[(I)3?]}; do color[fg-${color[$k]}]=$k; done
 | |
| 
 | |
| # This is inaccurate, but the prompt theme system needs it.
 | |
| 
 | |
| color[grey]=${color[black]}
 | |
| color[fg-grey]=${color[grey]}
 | |
| color[bg-grey]=${color[bg-black]}
 | |
| 
 | |
| # Assistance for the color-blind.
 | |
| 
 | |
| colour=(${(kv)color})	# A case where ksh namerefs would be useful ...
 | |
| 
 | |
| # The following are terminal escape sequences used by colored prompt themes.
 | |
| 
 | |
| local lc=$'\e[' rc=m	# Standard ANSI terminal escape values
 | |
| 
 | |
| typeset -Hg reset_color bold_color
 | |
| reset_color="$lc${color[none]}$rc"
 | |
| bold_color="$lc${color[bold]}$rc"
 | |
| 
 | |
| # Foreground
 | |
| 
 | |
| typeset -AHg fg fg_bold fg_no_bold
 | |
| for k in ${(v)color[(I)fg-*]}; do
 | |
|     fg[${color[$k]}]="$lc$k$rc"
 | |
|     fg_bold[${color[$k]}]="$lc${color[bold]};$k$rc"
 | |
|     fg_no_bold[${color[$k]}]="$lc${color[normal]};$k$rc"
 | |
| done
 | |
| 
 | |
| # Background
 | |
| 
 | |
| typeset -AHg bg bg_bold bg_no_bold
 | |
| for k in ${(v)color[(I)bg-*]}; do
 | |
|     bg[${color[$k]}]="$lc$k$rc"
 | |
|     bg_bold[${color[$k]}]="$lc${color[bold]};$k$rc"
 | |
|     bg_no_bold[${color[$k]}]="$lc${color[normal]};$k$rc"
 | |
| done
 |