@@ -4,10 +4,10 @@ use linkroot;
4
4
use std:: os:: raw:: { c_char, c_void} ;
5
5
use { getshfunc, doshfunc, newlinklist, insertlinknode, linknode} ;
6
6
7
- pub fn brackets_paint ( buf : & str , widget : & str , cursor : usize ) {
8
- let mut style: String ;
7
+ pub fn brackets_paint ( bracket_color_size : usize , buf : & str , cursor : usize , widget : & str ) {
8
+ let mut style: String = "" . to_owned ( ) ;
9
9
let mut level: usize = 0 ;
10
- let bracket_color_size: usize = 5 ; // TODO
10
+ // let bracket_color_size: usize = 5; // TODO
11
11
let pos;
12
12
13
13
let mut level_pos: HashMap < usize , usize > = HashMap :: new ( ) ;
@@ -25,12 +25,9 @@ pub fn brackets_paint(buf: &str, widget: &str, cursor: usize) {
25
25
last_of_level. insert ( level, i) ;
26
26
} ,
27
27
')' | ']' | '}' => {
28
- let matching_pos = match last_of_level. get ( & level) {
29
- Some ( val) => * val,
30
- None => continue
31
- } ;
28
+ let matching_pos = * last_of_level. get ( & level) . unwrap_or ( & 0 ) ;
32
29
level_pos. insert ( i, level) ;
33
- level -= 1 ;
30
+ level = level . saturating_sub ( 1 ) ;
34
31
35
32
if brackets_match ( * chars. get ( matching_pos) . unwrap_or ( & ' ' ) , chars[ i] ) {
36
33
matching. insert ( matching_pos, i) ;
@@ -42,6 +39,7 @@ pub fn brackets_paint(buf: &str, widget: &str, cursor: usize) {
42
39
if val. 1 != chr {
43
40
continue ;
44
41
}
42
+ break ;
45
43
}
46
44
//it = Box::new(it.skip(chars[(pos+1)..].iter().position(|c| c == chr).unwrap_or(chars.len() + 1)));
47
45
} ,
@@ -51,7 +49,9 @@ pub fn brackets_paint(buf: &str, widget: &str, cursor: usize) {
51
49
52
50
for pos in level_pos. keys ( ) {
53
51
if matching. contains_key ( pos) {
54
- style = format ! ( "bracket-level-{}" , ( ( level_pos[ pos] - 1 ) % bracket_color_size) + 1 ) ;
52
+ if bracket_color_size != 0 {
53
+ style = format ! ( "bracket-level-{}" , ( level_pos[ pos] - 1 ) % bracket_color_size + 1 ) ;
54
+ }
55
55
} else {
56
56
style = "bracket-error" . to_owned ( ) ;
57
57
}
@@ -60,10 +60,10 @@ pub fn brackets_paint(buf: &str, widget: &str, cursor: usize) {
60
60
}
61
61
62
62
if widget != "zle-line-finish" {
63
- pos = cursor + 1 ;
63
+ pos = cursor; // cursor is already zero-based
64
64
if level_pos. get ( & pos) . is_some ( ) && matching. get ( & pos) . is_some ( ) {
65
65
let other_pos = matching[ & pos] ;
66
- do_highlight ( other_pos, other_pos + 1 , "standout " ) ;
66
+ do_highlight ( other_pos, other_pos + 1 , "cursor-matchingbracket " ) ;
67
67
}
68
68
}
69
69
0 commit comments