| 
									
										
										
										
											2015-11-17 21:11:09 -06:00
										 |  |  | zsh-syntax-highlighting / highlighters | 
					
						
							|  |  |  | ====================================== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Syntax highlighting is done by pluggable highlighters: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-26 17:39:51 +00:00
										 |  |  | * `main` - the base highlighter, and the only one [active by default][1]. | 
					
						
							|  |  |  | * `brackets` - [matches brackets][2] and parenthesis. | 
					
						
							|  |  |  | * `pattern` - matches [user-defined patterns][3]. | 
					
						
							|  |  |  | * `cursor` - matches [the cursor position][4]. | 
					
						
							|  |  |  | * `root` - highlights the whole command line [if the current user is root][5]. | 
					
						
							|  |  |  | * `line` - applied to [the whole command line][6]. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [1]: highlighters/main.md | 
					
						
							|  |  |  | [2]: highlighters/brackets.md | 
					
						
							|  |  |  | [3]: highlighters/pattern.md | 
					
						
							|  |  |  | [4]: highlighters/cursor.md | 
					
						
							|  |  |  | [5]: highlighters/root.md | 
					
						
							|  |  |  | [6]: highlighters/line.md | 
					
						
							| 
									
										
										
										
											2015-11-17 21:11:09 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | How to activate highlighters | 
					
						
							|  |  |  | ---------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | To activate an highlighter, add it to the `ZSH_HIGHLIGHT_HIGHLIGHTERS` array in | 
					
						
							|  |  |  | `~/.zshrc`, for example: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern cursor) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-26 17:15:48 +00:00
										 |  |  | By default, `$ZSH_HIGHLIGHT_HIGHLIGHTERS` is unset and only the `main` | 
					
						
							|  |  |  | highlighter is active. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-17 21:11:09 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | How to tweak highlighters | 
					
						
							|  |  |  | ------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-24 07:27:29 +00:00
										 |  |  | Highlighters look up styles from the `ZSH_HIGHLIGHT_STYLES` associative array. | 
					
						
							| 
									
										
										
										
											2015-11-26 17:33:21 +00:00
										 |  |  | Navigate into the [individual highlighters' documentation](highlighters/) to | 
					
						
							|  |  |  | see what styles (keys) each highlighter defines; the syntax for values is the | 
					
						
							|  |  |  | same as the syntax of "types of highlighting" of the zsh builtin | 
					
						
							|  |  |  | `$zle_highlight` array, which is documented in [the `zshzle(1)` manual | 
					
						
							|  |  |  | page][zshzle-Character-Highlighting]. | 
					
						
							| 
									
										
										
										
											2015-11-24 07:27:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-24 07:36:10 +00:00
										 |  |  | [zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting | 
					
						
							| 
									
										
										
										
											2015-11-24 07:27:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Some highlighters support additional configuration parameters; see each | 
					
						
							| 
									
										
										
										
											2015-11-26 17:15:48 +00:00
										 |  |  | highlighter's documentation for details and examples. | 
					
						
							| 
									
										
										
										
											2015-11-17 21:11:09 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | How to implement a new highlighter | 
					
						
							|  |  |  | ---------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-12 07:03:18 +00:00
										 |  |  | To create your own `acme` highlighter: | 
					
						
							| 
									
										
										
										
											2015-11-17 21:11:09 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  | * Create your script at | 
					
						
							| 
									
										
										
										
											2016-07-18 04:27:54 +00:00
										 |  |  |     `highlighters/acme/acme-highlighter.zsh`. | 
					
						
							| 
									
										
										
										
											2015-11-17 21:11:09 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-12 07:15:04 +00:00
										 |  |  | * Implement the `_zsh_highlight_highlighter_acme_predicate` function. | 
					
						
							| 
									
										
										
										
											2015-11-17 21:11:09 -06:00
										 |  |  |   This function must return 0 when the highlighter needs to be called and | 
					
						
							|  |  |  |   non-zero otherwise, for example: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-12 07:15:04 +00:00
										 |  |  |         _zsh_highlight_highlighter_acme_predicate() { | 
					
						
							| 
									
										
										
										
											2015-11-26 17:15:48 +00:00
										 |  |  |           # Call this highlighter in SVN working copies | 
					
						
							| 
									
										
										
										
											2015-11-17 21:11:09 -06:00
										 |  |  |           [[ -d .svn ]] | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-12 07:15:04 +00:00
										 |  |  | * Implement the `_zsh_highlight_highlighter_acme_paint` function. | 
					
						
							| 
									
										
										
										
											2016-04-29 21:23:09 -05:00
										 |  |  |   This function does the actual syntax highlighting, by calling | 
					
						
							|  |  |  |   `_zsh_highlight_add_highlight` with the start and end of the region to | 
					
						
							|  |  |  |   be highlighted and the `ZSH_HIGHLIGHT_STYLES` key to use. Define the default | 
					
						
							| 
									
										
										
										
											2016-05-03 15:00:48 +00:00
										 |  |  |   style for that key in the highlighter script outside of any function with | 
					
						
							| 
									
										
										
										
											2016-05-09 17:35:21 +01:00
										 |  |  |   `: ${ZSH_HIGHLIGHT_STYLES[key]:=value}`, being sure to prefix | 
					
						
							| 
									
										
										
										
											2016-05-12 19:28:17 +00:00
										 |  |  |   the key with your highlighter name and a colon. For example: | 
					
						
							| 
									
										
										
										
											2016-04-29 21:23:09 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-12 07:03:18 +00:00
										 |  |  |         : ${ZSH_HIGHLIGHT_STYLES[acme:aurora]:=fg=green} | 
					
						
							| 
									
										
										
										
											2015-11-17 21:11:09 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-12 07:15:04 +00:00
										 |  |  |         _zsh_highlight_highlighter_acme_paint() { | 
					
						
							| 
									
										
										
										
											2016-04-29 21:23:09 -05:00
										 |  |  |           # Colorize the whole buffer with the 'aurora' style | 
					
						
							| 
									
										
										
										
											2016-07-12 07:03:18 +00:00
										 |  |  |           _zsh_highlight_add_highlight 0 $#BUFFER acme:aurora | 
					
						
							| 
									
										
										
										
											2015-11-17 21:11:09 -06:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-15 20:09:39 -06:00
										 |  |  |   If you need to test which options the user has set, test `zsyh_user_options` | 
					
						
							|  |  |  |   with a sensible default if the option is not present in supported zsh | 
					
						
							|  |  |  |   versions. For example: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         [[ ${zsyh_user_options[ignoreclosebraces]:-off} == on ]] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   The option name must be all lowercase with no underscores and not an alias. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-12 07:05:37 +00:00
										 |  |  | * Name your own functions and global variables `_zsh_highlight_acme_*`. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-12 07:15:04 +00:00
										 |  |  |     - In zsh-syntax-highlighting 0.4.0 and earlier, the entrypoints  | 
					
						
							|  |  |  |         `_zsh_highlight_highlighter_acme_predicate` and | 
					
						
							|  |  |  |         `_zsh_highlight_highlighter_acme_paint` | 
					
						
							|  |  |  |         were named | 
					
						
							|  |  |  |         `_zsh_highlight_acme_highlighter_predicate` and | 
					
						
							|  |  |  |         `_zsh_highlight_highlighter_acme_paint` respectively. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         These names are still supported for backwards compatibility; | 
					
						
							|  |  |  |         however, support for them will be removed in a a future major or minor release (v0.x.0 or v1.0.0). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-17 21:11:09 -06:00
										 |  |  | * Activate your highlighter in `~/.zshrc`: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-12 07:03:18 +00:00
										 |  |  |         ZSH_HIGHLIGHT_HIGHLIGHTERS+=(acme) | 
					
						
							| 
									
										
										
										
											2016-05-04 20:38:16 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | * [Write tests](../tests/README.md). |