on master help sign in
Update change-case commands to work with gap indexing.
954314aNathan Vegdahl
helix-term/src/commands.rs+36−27
@@ -786,24 +786,27 @@ fn replace(cx: &mut Context) {
786
786
787fn switch_case(cx: &mut Context) {
787fn switch_case(cx: &mut Context) {
788 let (view, doc) = current!(cx.editor);
788 let (view, doc) = current!(cx.editor);
789− let transaction =
789+ let selection = doc
790+ .selection(view.id)
791+ .clone()
792+ .min_width_1(doc.text().slice(..));
790− Transaction::change_by_selection(doc.text(), doc.selection(view.id), |range| {
793+ let transaction = Transaction::change_by_selection(doc.text(), &selection, |range| {
791− let text: Tendril = range
794+ let text: Tendril = range
792− .fragment(doc.text().slice(..))
795+ .fragment(doc.text().slice(..))
793− .chars()
796+ .chars()
794− .flat_map(|ch| {
797+ .flat_map(|ch| {
795− if ch.is_lowercase() {
798+ if ch.is_lowercase() {
796− ch.to_uppercase().collect()
799+ ch.to_uppercase().collect()
797− } else if ch.is_uppercase() {
800+ } else if ch.is_uppercase() {
798− ch.to_lowercase().collect()
801+ ch.to_lowercase().collect()
799− } else {
802+ } else {
800− vec![ch]
803+ vec![ch]
801− }
804+ }
802− })
805+ })
803− .collect();
806+ .collect();
804
807
805− (range.from(), range.to() + 1, Some(text))
808+ (range.from(), range.to(), Some(text))
806− });
809+ });
807
810
808 doc.apply(&transaction, view.id);
811 doc.apply(&transaction, view.id);
809 doc.append_changes_to_history(view.id);
812 doc.append_changes_to_history(view.id);
@@ -811,12 +814,15 @@ fn switch_case(cx: &mut Context) {
811
814
812fn switch_to_uppercase(cx: &mut Context) {
815fn switch_to_uppercase(cx: &mut Context) {
813 let (view, doc) = current!(cx.editor);
816 let (view, doc) = current!(cx.editor);
814− let transaction =
817+ let selection = doc
818+ .selection(view.id)
819+ .clone()
820+ .min_width_1(doc.text().slice(..));
815− Transaction::change_by_selection(doc.text(), doc.selection(view.id), |range| {
821+ let transaction = Transaction::change_by_selection(doc.text(), &selection, |range| {
816− let text: Tendril = range.fragment(doc.text().slice(..)).to_uppercase().into();
822+ let text: Tendril = range.fragment(doc.text().slice(..)).to_uppercase().into();
817
823
818− (range.from(), range.to() + 1, Some(text))
824+ (range.from(), range.to(), Some(text))
819− });
825+ });
820
826
821 doc.apply(&transaction, view.id);
827 doc.apply(&transaction, view.id);
822 doc.append_changes_to_history(view.id);
828 doc.append_changes_to_history(view.id);
@@ -824,12 +830,15 @@ fn switch_to_uppercase(cx: &mut Context) {
824
830
825fn switch_to_lowercase(cx: &mut Context) {
831fn switch_to_lowercase(cx: &mut Context) {
826 let (view, doc) = current!(cx.editor);
832 let (view, doc) = current!(cx.editor);
827− let transaction =
833+ let selection = doc
834+ .selection(view.id)
835+ .clone()
836+ .min_width_1(doc.text().slice(..));
828− Transaction::change_by_selection(doc.text(), doc.selection(view.id), |range| {
837+ let transaction = Transaction::change_by_selection(doc.text(), &selection, |range| {
829− let text: Tendril = range.fragment(doc.text().slice(..)).to_lowercase().into();
838+ let text: Tendril = range.fragment(doc.text().slice(..)).to_lowercase().into();
830
839
831− (range.from(), range.to() + 1, Some(text))
840+ (range.from(), range.to(), Some(text))
832− });
841+ });
833
842
834 doc.apply(&transaction, view.id);
843 doc.apply(&transaction, view.id);
835 doc.append_changes_to_history(view.id);
844 doc.append_changes_to_history(view.id);