merging with upstream master
This commit is contained in:
		
						commit
						6e679ca300
					
				| 
						 | 
					@ -8,6 +8,7 @@ Syntax highlighting is done by pluggable highlighters:
 | 
				
			||||||
* [***pattern***](pattern) - matches user-defined patterns.
 | 
					* [***pattern***](pattern) - matches user-defined patterns.
 | 
				
			||||||
* [***cursor***](cursor) - matches the cursor position.
 | 
					* [***cursor***](cursor) - matches the cursor position.
 | 
				
			||||||
* [***root***](root) - triggered if the current user is root.
 | 
					* [***root***](root) - triggered if the current user is root.
 | 
				
			||||||
 | 
					* [***line***](line) - applied to the whole command line
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
How to activate highlighters
 | 
					How to activate highlighters
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,6 +49,7 @@ _zsh_highlight_brackets_highlighter()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  local level=0 pos
 | 
					  local level=0 pos
 | 
				
			||||||
  local -A levelpos lastoflevel matching typepos
 | 
					  local -A levelpos lastoflevel matching typepos
 | 
				
			||||||
 | 
					  region_highlight=()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Find all brackets and remember which one is matching
 | 
					  # Find all brackets and remember which one is matching
 | 
				
			||||||
  for (( pos = 0; $pos < ${#BUFFER}; pos++ )) ; do
 | 
					  for (( pos = 0; $pos < ${#BUFFER}; pos++ )) ; do
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					zsh-syntax-highlighting / highlighters / line
 | 
				
			||||||
 | 
					=================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is the ***line*** highlighter, that highlights the whole line.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					How to activate it
 | 
				
			||||||
 | 
					------------------
 | 
				
			||||||
 | 
					To activate it, add it to `ZSH_HIGHLIGHT_HIGHLIGHTERS`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ZSH_HIGHLIGHT_HIGHLIGHTERS=( [...] line)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					How to tweak it
 | 
				
			||||||
 | 
					---------------
 | 
				
			||||||
 | 
					This highlighter defines the following styles:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* `line` - the style for the whole line
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`, for example in `~/.zshrc`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ZSH_HIGHLIGHT_STYLES[line]='bold'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The syntax for declaring styles is [documented here](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC135).
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,45 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env zsh
 | 
				
			||||||
 | 
					# -------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
 | 
				
			||||||
 | 
					# All rights reserved.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Redistribution and use in source and binary forms, with or without modification, are permitted
 | 
				
			||||||
 | 
					# provided that the following conditions are met:
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#  * Redistributions of source code must retain the above copyright notice, this list of conditions
 | 
				
			||||||
 | 
					#    and the following disclaimer.
 | 
				
			||||||
 | 
					#  * Redistributions in binary form must reproduce the above copyright notice, this list of
 | 
				
			||||||
 | 
					#    conditions and the following disclaimer in the documentation and/or other materials provided
 | 
				
			||||||
 | 
					#    with the distribution.
 | 
				
			||||||
 | 
					#  * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
 | 
				
			||||||
 | 
					#    may be used to endorse or promote products derived from this software without specific prior
 | 
				
			||||||
 | 
					#    written permission.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
 | 
				
			||||||
 | 
					# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 | 
				
			||||||
 | 
					# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 | 
				
			||||||
 | 
					# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
				
			||||||
 | 
					# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
				
			||||||
 | 
					# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 | 
				
			||||||
 | 
					# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 | 
				
			||||||
 | 
					# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					# -------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
 | 
				
			||||||
 | 
					# vim: ft=zsh sw=2 ts=2 et
 | 
				
			||||||
 | 
					# -------------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Define default styles.
 | 
				
			||||||
 | 
					: ${ZSH_HIGHLIGHT_STYLES[line]:=}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Whether the root highlighter should be called or not.
 | 
				
			||||||
 | 
					_zsh_highlight_line_highlighter_predicate()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  _zsh_highlight_buffer_modified
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# root highlighting function.
 | 
				
			||||||
 | 
					_zsh_highlight_line_highlighter()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  region_highlight+=("0 $#BUFFER $ZSH_HIGHLIGHT_STYLES[line]")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -134,7 +134,7 @@ _zsh_highlight_main_highlighter()
 | 
				
			||||||
                        elif _zsh_highlight_main_highlighter_check_path; then
 | 
					                        elif _zsh_highlight_main_highlighter_check_path; then
 | 
				
			||||||
                          style=$ZSH_HIGHLIGHT_STYLES[path]
 | 
					                          style=$ZSH_HIGHLIGHT_STYLES[path]
 | 
				
			||||||
                          path_found=path
 | 
					                          path_found=path
 | 
				
			||||||
                        elif [[ $arg[0,1] = $histchars[0,1] ]]; then
 | 
					                        elif [[ $arg[0,1] == $histchars[0,1] || $arg[0,1] == $histchars[2,2] ]]; then
 | 
				
			||||||
                          style=$ZSH_HIGHLIGHT_STYLES[history-expansion]
 | 
					                          style=$ZSH_HIGHLIGHT_STYLES[history-expansion]
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                          style=$ZSH_HIGHLIGHT_STYLES[unknown-token]
 | 
					                          style=$ZSH_HIGHLIGHT_STYLES[unknown-token]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,37 +54,42 @@ _zsh_highlight()
 | 
				
			||||||
  # Do not highlight if there are pending inputs (copy/paste).
 | 
					  # Do not highlight if there are pending inputs (copy/paste).
 | 
				
			||||||
  [[ $PENDING -gt 0 ]] && return $ret
 | 
					  [[ $PENDING -gt 0 ]] && return $ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Reset region highlight to build it from scratch
 | 
				
			||||||
 | 
					  region_highlight=();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    local -a selected_highlighters
 | 
					 | 
				
			||||||
    local cache_place
 | 
					    local cache_place
 | 
				
			||||||
 | 
					    local -a region_highlight_copy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Select which highlighters in ZSH_HIGHLIGHT_HIGHLIGHTERS need to be invoked.
 | 
					    # Select which highlighters in ZSH_HIGHLIGHT_HIGHLIGHTERS need to be invoked.
 | 
				
			||||||
    local highlighter; for highlighter in $ZSH_HIGHLIGHT_HIGHLIGHTERS; do
 | 
					    local highlighter; for highlighter in $ZSH_HIGHLIGHT_HIGHLIGHTERS; do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # eval cache place for current highlighter and prepare it
 | 
				
			||||||
 | 
					      cache_place="_zsh_highlight_${highlighter}_highlighter_cache"
 | 
				
			||||||
 | 
					      typeset -ga ${cache_place}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # If highlighter needs to be invoked
 | 
					      # If highlighter needs to be invoked
 | 
				
			||||||
      if "_zsh_highlight_${highlighter}_highlighter_predicate"; then
 | 
					      if "_zsh_highlight_${highlighter}_highlighter_predicate"; then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Mark the highlighter as selected for update.
 | 
					        # save a copy, and cleanup region_highlight
 | 
				
			||||||
        selected_highlighters+=($highlighter)
 | 
					        region_highlight_copy=("${region_highlight[@]}")
 | 
				
			||||||
 | 
					        region_highlight=()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Remove what was stored in its cache from region_highlight.
 | 
					        # Execute highlighter and save result
 | 
				
			||||||
        cache_place="_zsh_highlight_${highlighter}_highlighter_cache"
 | 
					        {
 | 
				
			||||||
        typeset -ga ${cache_place}
 | 
					          "_zsh_highlight_${highlighter}_highlighter"
 | 
				
			||||||
        [[ ${#${(P)cache_place}} -gt 0 ]] && [[ ! -z ${region_highlight-} ]] && region_highlight=(${region_highlight:#(${(P~j.|.)cache_place})})
 | 
					        } always {
 | 
				
			||||||
 | 
					          eval "${cache_place}=(\"\${region_highlight[@]}\")"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Restore saved region_highlight
 | 
				
			||||||
 | 
					        region_highlight=("${region_highlight_copy[@]}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      fi
 | 
					      fi
 | 
				
			||||||
    done
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Invoke each selected highlighter and store the result in its cache.
 | 
					      # Use value form cache if any cached
 | 
				
			||||||
    local -a region_highlight_copy
 | 
					      eval "region_highlight+=(\"\${${cache_place}[@]}\")"
 | 
				
			||||||
    for highlighter in $selected_highlighters; do
 | 
					
 | 
				
			||||||
      cache_place="_zsh_highlight_${highlighter}_highlighter_cache"
 | 
					 | 
				
			||||||
      region_highlight_copy=($region_highlight)
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        "_zsh_highlight_${highlighter}_highlighter"
 | 
					 | 
				
			||||||
      } always  {
 | 
					 | 
				
			||||||
        [[ ! -z ${region_highlight-} ]] && : ${(PA)cache_place::=${region_highlight:#(${(~j.|.)region_highlight_copy})}}
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    done
 | 
					    done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } always {
 | 
					  } always {
 | 
				
			||||||
| 
						 | 
					@ -134,7 +139,7 @@ _zsh_highlight_bind_widgets()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Override ZLE widgets to make them invoke _zsh_highlight.
 | 
					  # Override ZLE widgets to make them invoke _zsh_highlight.
 | 
				
			||||||
  local cur_widget
 | 
					  local cur_widget
 | 
				
			||||||
  for cur_widget in ${${(f)"$(builtin zle -la)"}:#(.*|_*|orig-*|run-help|which-command|beep)}; do
 | 
					  for cur_widget in ${${(f)"$(builtin zle -la)"}:#(.*|_*|orig-*|run-help|which-command|beep|yank*)}; do
 | 
				
			||||||
    case $widgets[$cur_widget] in
 | 
					    case $widgets[$cur_widget] in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Already rebound event: do nothing.
 | 
					      # Already rebound event: do nothing.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue