on master help sign in
Introduce Selection::point.
f5981f7Blaž Hrastnik
helix-core/src/selection.rs+5
@@ -179,6 +179,11 @@ impl Selection {
179 }
179 }
180 }
180 }
181
181
182+ /// Constructs a selection holding a single cursor.
183+ pub fn point(pos: usize) -> Self {
184+ Self::single(pos, pos)
185+ }
186+
182 #[must_use]
187 #[must_use]
183 pub fn new(ranges: SmallVec<[Range; 1]>, primary_index: usize) -> Self {
188 pub fn new(ranges: SmallVec<[Range; 1]>, primary_index: usize) -> Self {
184 fn normalize(mut ranges: SmallVec<[Range; 1]>, mut primary_index: usize) -> Selection {
189 fn normalize(mut ranges: SmallVec<[Range; 1]>, mut primary_index: usize) -> Selection {
helix-view/src/commands.rs+9−10
@@ -93,7 +93,7 @@ pub fn move_next_word_start(view: &mut View, count: usize) {
93 count,
93 count,
94 );
94 );
95
95
96− view.doc.set_selection(Selection::single(pos, pos));
96+ view.doc.set_selection(Selection::point(pos));
97}
97}
98
98
99pub fn move_prev_word_start(view: &mut View, count: usize) {
99pub fn move_prev_word_start(view: &mut View, count: usize) {
@@ -104,7 +104,7 @@ pub fn move_prev_word_start(view: &mut View, count: usize) {
104 count,
104 count,
105 );
105 );
106
106
107− view.doc.set_selection(Selection::single(pos, pos));
107+ view.doc.set_selection(Selection::point(pos));
108}
108}
109
109
110pub fn move_next_word_end(view: &mut View, count: usize) {
110pub fn move_next_word_end(view: &mut View, count: usize) {
@@ -114,11 +114,11 @@ pub fn move_next_word_end(view: &mut View, count: usize) {
114 count,
114 count,
115 );
115 );
116
116
117− view.doc.set_selection(Selection::single(pos, pos));
117+ view.doc.set_selection(Selection::point(pos));
118}
118}
119
119
120pub fn move_file_start(view: &mut View, _count: usize) {
120pub fn move_file_start(view: &mut View, _count: usize) {
121− view.doc.set_selection(Selection::single(0, 0));
121+ view.doc.set_selection(Selection::point(0));
122
122
123 view.doc.mode = Mode::Normal;
123 view.doc.mode = Mode::Normal;
124}
124}
@@ -126,8 +126,7 @@ pub fn move_file_start(view: &mut View, _count: usize) {
126pub fn move_file_end(view: &mut View, _count: usize) {
126pub fn move_file_end(view: &mut View, _count: usize) {
127 let text = &view.doc.text();
127 let text = &view.doc.text();
128 let last_line = text.line_to_char(text.len_lines().saturating_sub(2));
128 let last_line = text.line_to_char(text.len_lines().saturating_sub(2));
129− view.doc
130− .set_selection(Selection::single(last_line, last_line));
129+ view.doc.set_selection(Selection::point(last_line));
131
130
132 view.doc.mode = Mode::Normal;
131 view.doc.mode = Mode::Normal;
133}
132}
@@ -153,7 +152,7 @@ pub fn page_up(view: &mut View, _count: usize) {
153 if !check_cursor_in_view(view) {
152 if !check_cursor_in_view(view) {
154 let text = view.doc.text();
153 let text = view.doc.text();
155 let pos = text.line_to_char(view.last_line().saturating_sub(PADDING));
154 let pos = text.line_to_char(view.last_line().saturating_sub(PADDING));
156− view.doc.set_selection(Selection::single(pos, pos));
155+ view.doc.set_selection(Selection::point(pos));
157 }
156 }
158}
157}
159
158
@@ -163,7 +162,7 @@ pub fn page_down(view: &mut View, _count: usize) {
163 if view.first_line < view.doc.text().len_lines() {
162 if view.first_line < view.doc.text().len_lines() {
164 let text = view.doc.text();
163 let text = view.doc.text();
165 let pos = text.line_to_char(view.first_line as usize);
164 let pos = text.line_to_char(view.first_line as usize);
166− view.doc.set_selection(Selection::single(pos, pos));
165+ view.doc.set_selection(Selection::point(pos));
167 }
166 }
168}
167}
169
168
@@ -177,7 +176,7 @@ pub fn half_page_up(view: &mut View, _count: usize) {
177 if !check_cursor_in_view(view) {
176 if !check_cursor_in_view(view) {
178 let text = &view.doc.text();
177 let text = &view.doc.text();
179 let pos = text.line_to_char(view.last_line() - PADDING);
178 let pos = text.line_to_char(view.last_line() - PADDING);
180− view.doc.set_selection(Selection::single(pos, pos));
179+ view.doc.set_selection(Selection::point(pos));
181 }
180 }
182}
181}
183
182
@@ -189,7 +188,7 @@ pub fn half_page_down(view: &mut View, _count: usize) {
189 if !check_cursor_in_view(view) {
188 if !check_cursor_in_view(view) {
190 let text = view.doc.text();
189 let text = view.doc.text();
191 let pos = text.line_to_char(view.first_line as usize);
190 let pos = text.line_to_char(view.first_line as usize);
192− view.doc.set_selection(Selection::single(pos, pos));
191+ view.doc.set_selection(Selection::point(pos));
193 }
192 }
194}
193}
195// avoid select by default by having a visual mode switch that makes movements into selects
194// avoid select by default by having a visual mode switch that makes movements into selects