@@ -494,28 +494,28 @@ func (w *BufWindow) displayBuffer() {
494494 }
495495 bloc .X = bslice
496496
497+ // returns the rune to be drawn, style of it and if the bg should be preserved
497498 getRuneStyle := func (r rune , style tcell.Style , isplaceholder bool ) (rune , tcell.Style , bool ) {
498- bgoverridable := true
499499 if nColsBeforeStart > 0 || vloc .Y < 0 || isplaceholder {
500- return r , style , bgoverridable
500+ return r , style , false
501501 }
502502
503503 for _ , mb := range matchingBraces {
504504 if mb .X == bloc .X && mb .Y == bloc .Y {
505505 if b .Settings ["matchbracestyle" ].(string ) == "highlight" {
506506 if s , ok := config .Colorscheme ["match-brace" ]; ok {
507- return r , s , bgoverridable
507+ return r , s , false
508508 } else {
509- return r , style .Reverse (true ), bgoverridable
509+ return r , style .Reverse (true ), false
510510 }
511511 } else {
512- return r , style .Underline (true ), bgoverridable
512+ return r , style .Underline (true ), false
513513 }
514514 }
515515 }
516516
517517 if r != '\t' && r != ' ' {
518- return r , style , bgoverridable
518+ return r , style , false
519519 }
520520
521521 var returnrune rune
@@ -538,16 +538,17 @@ func (w *BufWindow) displayBuffer() {
538538 }
539539 }
540540
541+ preservebg := false
541542 if b .Settings ["hltaberrors" ].(bool ) && bloc .X < leadingwsEnd {
542543 if s , ok := config .Colorscheme ["tab-error" ]; ok {
543544 if b .Settings ["tabstospaces" ].(bool ) && r == '\t' {
544545 fg , _ , _ := s .Decompose ()
545546 style = style .Background (fg )
546- bgoverridable = false
547+ preservebg = true
547548 } else if ! b .Settings ["tabstospaces" ].(bool ) && r == ' ' {
548549 fg , _ , _ := s .Decompose ()
549550 style = style .Background (fg )
550- bgoverridable = false
551+ preservebg = true
551552 }
552553 }
553554 }
@@ -565,16 +566,16 @@ func (w *BufWindow) displayBuffer() {
565566 if hl {
566567 fg , _ , _ := s .Decompose ()
567568 style = style .Background (fg )
568- bgoverridable = false
569+ preservebg = true
569570 }
570571 }
571572 }
572573 }
573574
574- return returnrune , style , bgoverridable
575+ return drawrune , style , preservebg
575576 }
576577
577- draw := func (r rune , combc []rune , style tcell.Style , highlight bool , showcursor bool , bgoverridable bool ) {
578+ draw := func (r rune , combc []rune , style tcell.Style , highlight bool , showcursor bool , preservebg bool ) {
578579 defer func () {
579580 if nColsBeforeStart <= 0 {
580581 vloc .X ++
@@ -597,10 +598,10 @@ func (w *BufWindow) displayBuffer() {
597598 _ , origBg , _ := style .Decompose ()
598599 _ , defBg , _ := config .DefStyle .Decompose ()
599600
600- // syntax or hlsearch highlighting with non-default background takes precedence
601- // over cursor-line and color-column
602- if bgoverridable {
603- bgoverridable = origBg = = defBg
601+ if ! preservebg {
602+ // syntax or hlsearch highlighting with non-default background takes precedence
603+ // over cursor-line and color-column
604+ preservebg = origBg ! = defBg
604605 }
605606
606607 for _ , c := range cursors {
@@ -615,7 +616,7 @@ func (w *BufWindow) displayBuffer() {
615616 }
616617 }
617618
618- if b .Settings ["cursorline" ].(bool ) && w .active && bgoverridable &&
619+ if b .Settings ["cursorline" ].(bool ) && w .active && ! preservebg &&
619620 ! c .HasSelection () && c .Y == bloc .Y {
620621 if s , ok := config .Colorscheme ["cursor-line" ]; ok {
621622 fg , _ , _ := s .Decompose ()
@@ -633,7 +634,7 @@ func (w *BufWindow) displayBuffer() {
633634 }
634635
635636 if s , ok := config .Colorscheme ["color-column" ]; ok {
636- if colorcolumn != 0 && vloc .X - w .gutterOffset + w .StartCol == colorcolumn && bgoverridable {
637+ if colorcolumn != 0 && vloc .X - w .gutterOffset + w .StartCol == colorcolumn && ! preservebg {
637638 fg , _ , _ := s .Decompose ()
638639 style = style .Background (fg )
639640 }
@@ -736,17 +737,17 @@ func (w *BufWindow) displayBuffer() {
736737 }
737738
738739 for _ , r := range word {
739- drawrune , drawstyle , bgoverridable := getRuneStyle (r .r , r .style , false )
740- draw (drawrune , r .combc , drawstyle , true , true , bgoverridable )
740+ drawrune , drawstyle , preservebg := getRuneStyle (r .r , r .style , false )
741+ draw (drawrune , r .combc , drawstyle , true , true , preservebg )
741742
742743 // Draw extra characters for tabs or wide runes
743744 for i := 1 ; i < r .width ; i ++ {
744745 if r .r == '\t' {
745- drawrune , drawstyle , bgoverridable = getRuneStyle ('\t' , r .style , false )
746+ drawrune , drawstyle , preservebg = getRuneStyle ('\t' , r .style , false )
746747 } else {
747- drawrune , drawstyle , bgoverridable = getRuneStyle (' ' , r .style , true )
748+ drawrune , drawstyle , preservebg = getRuneStyle (' ' , r .style , true )
748749 }
749- draw (drawrune , nil , drawstyle , true , false , bgoverridable )
750+ draw (drawrune , nil , drawstyle , true , false , preservebg )
750751 }
751752 bloc .X ++
752753 }
@@ -791,8 +792,8 @@ func (w *BufWindow) displayBuffer() {
791792
792793 if vloc .X != maxWidth {
793794 // Display newline within a selection
794- drawrune , drawstyle , bgoverridable := getRuneStyle (' ' , config .DefStyle , true )
795- draw (drawrune , nil , drawstyle , true , true , bgoverridable )
795+ drawrune , drawstyle , preservebg := getRuneStyle (' ' , config .DefStyle , true )
796+ draw (drawrune , nil , drawstyle , true , true , preservebg )
796797 }
797798
798799 bloc .X = w .StartCol
0 commit comments