on master help sign in
goto line start/end commands extend when in select mode (#739)
05c2a72Kangwook Lee (이강욱)
helix-term/src/commands.rs+39−12
@@ -410,8 +410,7 @@ fn extend_line_down(cx: &mut Context) {
410 move_impl(cx, move_vertically, Direction::Forward, Movement::Extend)
410 move_impl(cx, move_vertically, Direction::Forward, Movement::Extend)
411}
411}
412
412
413−fn goto_line_end_impl(cx: &mut Context, movement: Movement) {
413+fn goto_line_end_impl(view: &mut View, doc: &mut Document, movement: Movement) {
414− let (view, doc) = current!(cx.editor);
415 let text = doc.text().slice(..);
414 let text = doc.text().slice(..);
416
415
417 let selection = doc.selection(view.id).clone().transform(|range| {
416 let selection = doc.selection(view.id).clone().transform(|range| {
@@ -427,15 +426,24 @@ fn goto_line_end_impl(cx: &mut Context, movement: Movement) {
427}
426}
428
427
429fn goto_line_end(cx: &mut Context) {
428fn goto_line_end(cx: &mut Context) {
429+ let (view, doc) = current!(cx.editor);
430− goto_line_end_impl(cx, Movement::Move)
430+ goto_line_end_impl(
431+ view,
432+ doc,
433+ if doc.mode == Mode::Select {
434+ Movement::Extend
435+ } else {
436+ Movement::Move
437+ },
438+ )
431}
439}
432
440
433fn extend_to_line_end(cx: &mut Context) {
441fn extend_to_line_end(cx: &mut Context) {
434− goto_line_end_impl(cx, Movement::Extend)
442+ let (view, doc) = current!(cx.editor);
443+ goto_line_end_impl(view, doc, Movement::Extend)
435}
444}
436
445
437−fn goto_line_end_newline_impl(cx: &mut Context, movement: Movement) {
446+fn goto_line_end_newline_impl(view: &mut View, doc: &mut Document, movement: Movement) {
438− let (view, doc) = current!(cx.editor);
439 let text = doc.text().slice(..);
447 let text = doc.text().slice(..);
440
448
441 let selection = doc.selection(view.id).clone().transform(|range| {
449 let selection = doc.selection(view.id).clone().transform(|range| {
@@ -448,15 +456,24 @@ fn goto_line_end_newline_impl(cx: &mut Context, movement: Movement) {
448}
456}
449
457
450fn goto_line_end_newline(cx: &mut Context) {
458fn goto_line_end_newline(cx: &mut Context) {
459+ let (view, doc) = current!(cx.editor);
451− goto_line_end_newline_impl(cx, Movement::Move)
460+ goto_line_end_newline_impl(
461+ view,
462+ doc,
463+ if doc.mode == Mode::Select {
464+ Movement::Extend
465+ } else {
466+ Movement::Move
467+ },
468+ )
452}
469}
453
470
454fn extend_to_line_end_newline(cx: &mut Context) {
471fn extend_to_line_end_newline(cx: &mut Context) {
455− goto_line_end_newline_impl(cx, Movement::Extend)
472+ let (view, doc) = current!(cx.editor);
473+ goto_line_end_newline_impl(view, doc, Movement::Extend)
456}
474}
457
475
458−fn goto_line_start_impl(cx: &mut Context, movement: Movement) {
476+fn goto_line_start_impl(view: &mut View, doc: &mut Document, movement: Movement) {
459− let (view, doc) = current!(cx.editor);
460 let text = doc.text().slice(..);
477 let text = doc.text().slice(..);
461
478
462 let selection = doc.selection(view.id).clone().transform(|range| {
479 let selection = doc.selection(view.id).clone().transform(|range| {
@@ -470,11 +487,21 @@ fn goto_line_start_impl(cx: &mut Context, movement: Movement) {
470}
487}
471
488
472fn goto_line_start(cx: &mut Context) {
489fn goto_line_start(cx: &mut Context) {
490+ let (view, doc) = current!(cx.editor);
473− goto_line_start_impl(cx, Movement::Move)
491+ goto_line_start_impl(
492+ view,
493+ doc,
494+ if doc.mode == Mode::Select {
495+ Movement::Extend
496+ } else {
497+ Movement::Move
498+ },
499+ )
474}
500}
475
501
476fn extend_to_line_start(cx: &mut Context) {
502fn extend_to_line_start(cx: &mut Context) {
477− goto_line_start_impl(cx, Movement::Extend)
503+ let (view, doc) = current!(cx.editor);
504+ goto_line_start_impl(view, doc, Movement::Extend)
478}
505}
479
506
480fn goto_first_nonwhitespace(cx: &mut Context) {
507fn goto_first_nonwhitespace(cx: &mut Context) {