on master help sign in
Refactor {move,extend}_char_* commands
ea2b4c6Gokul Soumya
helix-term/src/commands.rs+32−71
@@ -358,48 +358,53 @@ impl PartialEq for Command {
358 }
358 }
359}
359}
360
360
361−fn move_char_left(cx: &mut Context) {
361+fn move_impl<F>(cx: &mut Context, move_fn: F, dir: Direction, behaviour: Movement)
362+where
363+ F: Fn(RopeSlice, Range, Direction, usize, Movement) -> Range,
364+{
362 let count = cx.count();
365 let count = cx.count();
363 let (view, doc) = current!(cx.editor);
366 let (view, doc) = current!(cx.editor);
364 let text = doc.text().slice(..);
367 let text = doc.text().slice(..);
365
368
366− let selection = doc.selection(view.id).clone().transform(|range| {
369+ let selection = doc
367− movement::move_horizontally(text, range, Direction::Backward, count, Movement::Move)
370+ .selection(view.id)
368− });
371+ .clone()
372+ .transform(|range| move_fn(text, range, dir, count, behaviour));
369 doc.set_selection(view.id, selection);
373 doc.set_selection(view.id, selection);
370}
374}
371
375
372−fn move_char_right(cx: &mut Context) {
376+use helix_core::movement::{move_horizontally, move_vertically};
373− let count = cx.count();
374− let (view, doc) = current!(cx.editor);
375− let text = doc.text().slice(..);
376
377
377− let selection = doc.selection(view.id).clone().transform(|range| {
378+fn move_char_left(cx: &mut Context) {
378− movement::move_horizontally(text, range, Direction::Forward, count, Movement::Move)
379+ move_impl(cx, move_horizontally, Direction::Backward, Movement::Move)
379− });
380− doc.set_selection(view.id, selection);
381}
380}
382
381
383−fn move_line_up(cx: &mut Context) {
382+fn move_char_right(cx: &mut Context) {
384− let count = cx.count();
383+ move_impl(cx, move_horizontally, Direction::Forward, Movement::Move)
385− let (view, doc) = current!(cx.editor);
384+}
386− let text = doc.text().slice(..);
387
385
388− let selection = doc.selection(view.id).clone().transform(|range| {
386+fn move_line_up(cx: &mut Context) {
389− movement::move_vertically(text, range, Direction::Backward, count, Movement::Move)
387+ move_impl(cx, move_vertically, Direction::Backward, Movement::Move)
390− });
391− doc.set_selection(view.id, selection);
392}
388}
393
389
394fn move_line_down(cx: &mut Context) {
390fn move_line_down(cx: &mut Context) {
395− let count = cx.count();
391+ move_impl(cx, move_vertically, Direction::Forward, Movement::Move)
396− let (view, doc) = current!(cx.editor);
392+}
397− let text = doc.text().slice(..);
398
393
399− let selection = doc.selection(view.id).clone().transform(|range| {
394+fn extend_char_left(cx: &mut Context) {
400− movement::move_vertically(text, range, Direction::Forward, count, Movement::Move)
395+ move_impl(cx, move_horizontally, Direction::Backward, Movement::Extend)
396+}
397+
398+fn extend_char_right(cx: &mut Context) {
399+ move_impl(cx, move_horizontally, Direction::Forward, Movement::Extend)
400+}
401+
402+fn extend_line_up(cx: &mut Context) {
403+ move_impl(cx, move_vertically, Direction::Backward, Movement::Extend)
401− });
404+}
402− doc.set_selection(view.id, selection);
405+
406+fn extend_line_down(cx: &mut Context) {
407+ move_impl(cx, move_vertically, Direction::Forward, Movement::Extend)
403}
408}
404
409
405fn goto_line_end(cx: &mut Context) {
410fn goto_line_end(cx: &mut Context) {
@@ -1001,28 +1006,6 @@ fn half_page_down(cx: &mut Context) {
1001 scroll(cx, offset, Direction::Forward);
1006 scroll(cx, offset, Direction::Forward);
1002}
1007}
1003
1008
1004−fn extend_char_left(cx: &mut Context) {
1005− let count = cx.count();
1006− let (view, doc) = current!(cx.editor);
1007− let text = doc.text().slice(..);
1008−
1009− let selection = doc.selection(view.id).clone().transform(|range| {
1010− movement::move_horizontally(text, range, Direction::Backward, count, Movement::Extend)
1011− });
1012− doc.set_selection(view.id, selection);
1013−}
1014−
1015−fn extend_char_right(cx: &mut Context) {
1016− let count = cx.count();
1017− let (view, doc) = current!(cx.editor);
1018− let text = doc.text().slice(..);
1019−
1020− let selection = doc.selection(view.id).clone().transform(|range| {
1021− movement::move_horizontally(text, range, Direction::Forward, count, Movement::Extend)
1022− });
1023− doc.set_selection(view.id, selection);
1024−}
1025−
1026fn copy_selection_on_line(cx: &mut Context, direction: Direction) {
1009fn copy_selection_on_line(cx: &mut Context, direction: Direction) {
1027 let count = cx.count();
1010 let count = cx.count();
1028 let (view, doc) = current!(cx.editor);
1011 let (view, doc) = current!(cx.editor);
@@ -1093,28 +1076,6 @@ fn copy_selection_on_next_line(cx: &mut Context) {
1093 copy_selection_on_line(cx, Direction::Forward)
1076 copy_selection_on_line(cx, Direction::Forward)
1094}
1077}
1095
1078
1096−fn extend_line_up(cx: &mut Context) {
1097− let count = cx.count();
1098− let (view, doc) = current!(cx.editor);
1099− let text = doc.text().slice(..);
1100−
1101− let selection = doc.selection(view.id).clone().transform(|range| {
1102− movement::move_vertically(text, range, Direction::Backward, count, Movement::Extend)
1103− });
1104− doc.set_selection(view.id, selection);
1105−}
1106−
1107−fn extend_line_down(cx: &mut Context) {
1108− let count = cx.count();
1109− let (view, doc) = current!(cx.editor);
1110− let text = doc.text().slice(..);
1111−
1112− let selection = doc.selection(view.id).clone().transform(|range| {
1113− movement::move_vertically(text, range, Direction::Forward, count, Movement::Extend)
1114− });
1115− doc.set_selection(view.id, selection);
1116−}
1117−
1118fn select_all(cx: &mut Context) {
1079fn select_all(cx: &mut Context) {
1119 let (view, doc) = current!(cx.editor);
1080 let (view, doc) = current!(cx.editor);
1120
1081