on master help sign in
auto_pairs: move if cursor, extend if selection.
7e9ea30Blaž Hrastnik
helix-core/src/auto_pairs.rs+12−2
@@ -69,7 +69,12 @@ fn handle_open(
69 let pos = range.head;
69 let pos = range.head;
70 let next = next_char(doc, pos);
70 let next = next_char(doc, pos);
71
71
72+ let head = pos + open.len_utf8();
73+ // if selection, retain anchor, if cursor, move over
72− ranges.push(Range::new(range.anchor, pos + open.len_utf8())); // pos + open
74+ ranges.push(Range::new(
75+ if range.is_empty() { head } else { range.anchor },
76+ head,
77+ ));
73
78
74 match next {
79 match next {
75 Some(ch) if !close_before.contains(ch) => {
80 Some(ch) if !close_before.contains(ch) => {
@@ -98,7 +103,12 @@ fn handle_close(doc: &Rope, selection: &Selection, _open: char, close: char) ->
98 let pos = range.head;
103 let pos = range.head;
99 let next = next_char(doc, pos);
104 let next = next_char(doc, pos);
100
105
106+ let head = pos + close.len_utf8();
107+ // if selection, retain anchor, if cursor, move over
101− ranges.push(Range::new(range.anchor, pos + close.len_utf8())); // pos + close
108+ ranges.push(Range::new(
109+ if range.is_empty() { head } else { range.anchor },
110+ head,
111+ ));
102
112
103 if next == Some(close) {
113 if next == Some(close) {
104 // return transaction that moves past close
114 // return transaction that moves past close