Skip to content

Commit

Permalink
Merge pull request #140 from randomize/pr_fix_issue_#77
Browse files Browse the repository at this point in the history
Pr fix issue #77
  • Loading branch information
nicoulaj committed Sep 24, 2014
2 parents 10391d0 + 7edd081 commit 3dc5741
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 18 deletions.
1 change: 1 addition & 0 deletions highlighters/brackets/brackets-highlighter.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ _zsh_highlight_brackets_highlighter()
{
local level=0 pos
local -A levelpos lastoflevel matching typepos
region_highlight=()

# Find all brackets and remember which one is matching
for (( pos = 0; $pos < ${#BUFFER}; pos++ )) ; do
Expand Down
41 changes: 23 additions & 18 deletions zsh-syntax-highlighting.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -54,37 +54,42 @@ _zsh_highlight()
# Do not highlight if there are pending inputs (copy/paste).
[[ $PENDING -gt 0 ]] && return $ret

# Reset region highlight to build it from scratch
region_highlight=();

{
local -a selected_highlighters
local cache_place
local -a region_highlight_copy

# Select which highlighters in ZSH_HIGHLIGHT_HIGHLIGHTERS need to be invoked.
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 "_zsh_highlight_${highlighter}_highlighter_predicate"; then

# Mark the highlighter as selected for update.
selected_highlighters+=($highlighter)
# save a copy, and cleanup region_highlight
region_highlight_copy=("${region_highlight[@]}")
region_highlight=()

# Execute highlighter and save result
{
"_zsh_highlight_${highlighter}_highlighter"
} always {
eval "${cache_place}=(\"\${region_highlight[@]}\")"
}

# Remove what was stored in its cache from region_highlight.
cache_place="_zsh_highlight_${highlighter}_highlighter_cache"
typeset -ga ${cache_place}
[[ ${#${(P)cache_place}} -gt 0 ]] && [[ ! -z ${region_highlight-} ]] && region_highlight=(${region_highlight:#(${(P~j.|.)cache_place})})
# Restore saved region_highlight
region_highlight=("${region_highlight_copy[@]}")

fi
done

# Invoke each selected highlighter and store the result in its cache.
local -a region_highlight_copy
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})}}
}
# Use value form cache if any cached
eval "region_highlight+=(\"\${${cache_place}[@]}\")"

done

} always {
Expand Down

0 comments on commit 3dc5741

Please sign in to comment.