From df99f5f61ae336afb7a19434b7bf74228c4b9fe3 Mon Sep 17 00:00:00 2001 From: jimmijj Date: Fri, 3 Oct 2014 17:26:14 +0000 Subject: [PATCH] Bug fix: when editing multi-line complex command highlighting was shifted by one character starting from second line. This behaviour was due to splitting of BUFFER using shell parser ${(z)BUFFER}, which basically changes all newlines to semicolons. --- highlighters/main/main-highlighter.zsh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/highlighters/main/main-highlighter.zsh b/highlighters/main/main-highlighter.zsh index a7227cd..b0a1a6d 100755 --- a/highlighters/main/main-highlighter.zsh +++ b/highlighters/main/main-highlighter.zsh @@ -84,12 +84,19 @@ _zsh_highlight_main_highlighter() $ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR $ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS ) + splitbuf1=(${(z)BUFFER}) + splitbuf2=(${(z)BUFFER//$'\n'/ \$\'\\\\n\' }) # ugly hack, but I have no other idea + local argnum=0 for arg in ${(z)BUFFER}; do + argnum=$((argnum+1)) + if [[ $splitbuf1[$argnum] != $splitbuf2[$argnum] ]] && new_expression=true && continue + local substr_color=0 isfile=false local style_override="" [[ $start_pos -eq 0 && $arg = 'noglob' ]] && highlight_glob=false ((start_pos+=${#BUFFER[$start_pos+1,-1]}-${#${BUFFER[$start_pos+1,-1]##[[:space:]]#}})) ((end_pos=$start_pos+${#arg})) + # Parse the sudo command line if $sudo; then case "$arg" in