driver: Run under emulate -L zsh and add zsyh_user_options
This commit is contained in:
		
							parent
							
								
									3e56294543
								
							
						
					
					
						commit
						b07ada1255
					
				|  | @ -78,6 +78,14 @@ To create your own `acme` highlighter: | ||||||
|           _zsh_highlight_add_highlight 0 $#BUFFER acme:aurora |           _zsh_highlight_add_highlight 0 $#BUFFER acme:aurora | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |   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. | ||||||
|  | 
 | ||||||
| * Name your own functions and global variables `_zsh_highlight_acme_*`. | * Name your own functions and global variables `_zsh_highlight_acme_*`. | ||||||
| 
 | 
 | ||||||
|     - In zsh-syntax-highlighting 0.4.0 and earlier, the entrypoints  |     - In zsh-syntax-highlighting 0.4.0 and earlier, the entrypoints  | ||||||
|  |  | ||||||
|  | @ -195,24 +195,7 @@ _zsh_highlight_main__stack_pop() { | ||||||
| # Main syntax highlighting function. | # Main syntax highlighting function. | ||||||
| _zsh_highlight_highlighter_main_paint() | _zsh_highlight_highlighter_main_paint() | ||||||
| { | { | ||||||
|   # Before we even 'emulate -L', save the user's options |   setopt localoptions extendedglob | ||||||
|   local -A useroptions |  | ||||||
|   if zmodload -e zsh/parameter; then |  | ||||||
|     useroptions=("${(@kv)options}") |  | ||||||
|   else |  | ||||||
|     local canonicaloptions onoff option rawoptions |  | ||||||
|     rawoptions=(${(f)"$(emulate -R zsh; set -o)"}) |  | ||||||
|     canonicaloptions=(${${${(M)rawoptions:#*off}%% *}#no} ${${(M)rawoptions:#*on}%% *}) |  | ||||||
|     for option in $canonicaloptions; do |  | ||||||
|       [[ -o $option ]] |  | ||||||
|       # This variable cannot be eliminated c.f. workers/42101. |  | ||||||
|       onoff=${${=:-off on}[2-$?]} |  | ||||||
|       useroptions+=($option $onoff) |  | ||||||
|     done |  | ||||||
|   fi |  | ||||||
| 
 |  | ||||||
|   emulate -L zsh |  | ||||||
|   setopt localoptions extendedglob bareglobqual |  | ||||||
| 
 | 
 | ||||||
|   # At the PS3 prompt and in vared, highlight nothing. |   # At the PS3 prompt and in vared, highlight nothing. | ||||||
|   # |   # | ||||||
|  | @ -243,13 +226,13 @@ _zsh_highlight_highlighter_main_paint() | ||||||
|   # ":" for 'then' |   # ":" for 'then' | ||||||
|   local braces_stack |   local braces_stack | ||||||
| 
 | 
 | ||||||
|   if [[ $useroptions[ignorebraces] == on || ${useroptions[ignoreclosebraces]:-off} == on ]]; then |   if [[ $zsyh_user_options[ignorebraces] == on || ${zsyh_user_options[ignoreclosebraces]:-off} == on ]]; then | ||||||
|     local right_brace_is_recognised_everywhere=false |     local right_brace_is_recognised_everywhere=false | ||||||
|   else |   else | ||||||
|     local right_brace_is_recognised_everywhere=true |     local right_brace_is_recognised_everywhere=true | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|   if [[ $useroptions[pathdirs] == on ]]; then |   if [[ $zsyh_user_options[pathdirs] == on ]]; then | ||||||
|     options_to_set+=( PATH_DIRS ) |     options_to_set+=( PATH_DIRS ) | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|  | @ -326,7 +309,7 @@ _zsh_highlight_highlighter_main_paint() | ||||||
|   # Processing buffer |   # Processing buffer | ||||||
|   local proc_buf="$buf" |   local proc_buf="$buf" | ||||||
|   local -a args |   local -a args | ||||||
|   if [[ $useroptions[interactivecomments] == on ]]; then |   if [[ $zsyh_user_options[interactivecomments] == on ]]; then | ||||||
|     args=(${(zZ+c+)buf}) |     args=(${(zZ+c+)buf}) | ||||||
|   else |   else | ||||||
|     args=(${(z)buf}) |     args=(${(z)buf}) | ||||||
|  | @ -420,7 +403,7 @@ _zsh_highlight_highlighter_main_paint() | ||||||
|     # Handle the INTERACTIVE_COMMENTS option. |     # Handle the INTERACTIVE_COMMENTS option. | ||||||
|     # |     # | ||||||
|     # We use the (Z+c+) flag so the entire comment is presented as one token in $arg. |     # We use the (Z+c+) flag so the entire comment is presented as one token in $arg. | ||||||
|     if [[ $useroptions[interactivecomments] == on && $arg[1] == $histchars[3] ]]; then |     if [[ $zsyh_user_options[interactivecomments] == on && $arg[1] == $histchars[3] ]]; then | ||||||
|       if [[ $this_word == *(':regular:'|':start:')* ]]; then |       if [[ $this_word == *(':regular:'|':start:')* ]]; then | ||||||
|         style=comment |         style=comment | ||||||
|       else |       else | ||||||
|  | @ -659,7 +642,7 @@ _zsh_highlight_highlighter_main_paint() | ||||||
|                    _zsh_highlight_main__stack_pop 'R' style=reserved-word |                    _zsh_highlight_main__stack_pop 'R' style=reserved-word | ||||||
|                  fi;; |                  fi;; | ||||||
|         $'\x28\x29') # possibly a function definition |         $'\x28\x29') # possibly a function definition | ||||||
|                  if [[ $useroptions[multifuncdef] == on ]] || false # TODO: or if the previous word was a command word |                  if [[ $zsyh_user_options[multifuncdef] == on ]] || false # TODO: or if the previous word was a command word | ||||||
|                  then |                  then | ||||||
|                    next_word+=':start:' |                    next_word+=':start:' | ||||||
|                  fi |                  fi | ||||||
|  | @ -816,7 +799,6 @@ _zsh_highlight_main_highlighter_check_path() | ||||||
| # Highlight special chars inside double-quoted strings | # Highlight special chars inside double-quoted strings | ||||||
| _zsh_highlight_main_highlighter_highlight_string() | _zsh_highlight_main_highlighter_highlight_string() | ||||||
| { | { | ||||||
|   setopt localoptions noksharrays |  | ||||||
|   local -a match mbegin mend |   local -a match mbegin mend | ||||||
|   local MATCH; integer MBEGIN MEND |   local MATCH; integer MBEGIN MEND | ||||||
|   local i j k style |   local i j k style | ||||||
|  | @ -872,7 +854,6 @@ _zsh_highlight_main_highlighter_highlight_string() | ||||||
| # Highlight special chars inside dollar-quoted strings | # Highlight special chars inside dollar-quoted strings | ||||||
| _zsh_highlight_main_highlighter_highlight_dollar_string() | _zsh_highlight_main_highlighter_highlight_dollar_string() | ||||||
| { | { | ||||||
|   setopt localoptions noksharrays |  | ||||||
|   local -a match mbegin mend |   local -a match mbegin mend | ||||||
|   local MATCH; integer MBEGIN MEND |   local MATCH; integer MBEGIN MEND | ||||||
|   local i j k style |   local i j k style | ||||||
|  |  | ||||||
|  | @ -83,8 +83,25 @@ _zsh_highlight() | ||||||
|     return $ret |     return $ret | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|  |   # Before we 'emulate -L', save the user's options | ||||||
|  |   local -A zsyh_user_options | ||||||
|  |   if zmodload -e zsh/parameter; then | ||||||
|  |     zsyh_user_options=("${(@kv)options}") | ||||||
|  |   else | ||||||
|  |     local canonical_options onoff option raw_options | ||||||
|  |     raw_options=(${(f)"$(emulate -R zsh; set -o)"}) | ||||||
|  |     canonical_options=(${${${(M)raw_options:#*off}%% *}#no} ${${(M)raw_options:#*on}%% *}) | ||||||
|  |     for option in $canonical_options; do | ||||||
|  |       [[ -o $option ]] | ||||||
|  |       # This variable cannot be eliminated c.f. workers/42101. | ||||||
|  |       onoff=${${=:-off on}[2-$?]} | ||||||
|  |       zsyh_user_options+=($option $onoff) | ||||||
|  |     done | ||||||
|  |   fi | ||||||
|  |   typeset -r zsyh_user_options | ||||||
|  | 
 | ||||||
|  |   emulate -L zsh | ||||||
|   setopt localoptions warncreateglobal |   setopt localoptions warncreateglobal | ||||||
|   setopt localoptions noksharrays |  | ||||||
|   local REPLY # don't leak $REPLY into global scope |   local REPLY # don't leak $REPLY into global scope | ||||||
| 
 | 
 | ||||||
|   # Do not highlight if there are more than 300 chars in the buffer. It's most |   # Do not highlight if there are more than 300 chars in the buffer. It's most | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue