@@ -358,48 +358,53 @@ impl PartialEq for Command {
361−fn move_char_left(cx: &mut Context) {
361+fn move_impl<F>(cx: &mut Context, move_fn: F, dir: Direction, behaviour: Movement)
363+ F: Fn(RopeSlice, Range, Direction, usize, Movement) -> Range,
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(..);
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)
372+ .transform(|range| move_fn(text, range, dir, count, behaviour));
369 doc.set_selection(view.id, selection);
373 doc.set_selection(view.id, selection);
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(..);
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)
380− doc.set_selection(view.id, selection);
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(..);
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)
391− doc.set_selection(view.id, selection);
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(..);
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)
398+fn extend_char_right(cx: &mut Context) {
399+ move_impl(cx, move_horizontally, Direction::Forward, Movement::Extend)
402+fn extend_line_up(cx: &mut Context) {
403+ move_impl(cx, move_vertically, Direction::Backward, Movement::Extend)
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)
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);
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(..);
1009− let selection = doc.selection(view.id).clone().transform(|range| {
1010− movement::move_horizontally(text, range, Direction::Backward, count, Movement::Extend)
1012− doc.set_selection(view.id, selection);
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(..);
1020− let selection = doc.selection(view.id).clone().transform(|range| {
1021− movement::move_horizontally(text, range, Direction::Forward, count, Movement::Extend)
1023− doc.set_selection(view.id, selection);
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)
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(..);
1101− let selection = doc.selection(view.id).clone().transform(|range| {
1102− movement::move_vertically(text, range, Direction::Backward, count, Movement::Extend)
1104− doc.set_selection(view.id, selection);
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(..);
1112− let selection = doc.selection(view.id).clone().transform(|range| {
1113− movement::move_vertically(text, range, Direction::Forward, count, Movement::Extend)
1115− doc.set_selection(view.id, selection);
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);