on master help sign in
Update change-case commands to work with gap indexing.
commit954314a7c9661920d878cdbf604354252dca8ce8 authorNathan Vegdahl <cessen@cessen.com> dateSat 17 Jul 2021, 10:57 (5 years ago) parenta77274e
1 file changed+36−27
helix-term/src/commands.rs+36−27
helix-term/src/commands.rs+36−27
@@ -786,24 +786,27 @@ fn replace(cx: &mut Context) {
786786
787787fn switch_case(cx: &mut Context) {
788788 let (view, doc) = current!(cx.editor);
789− let transaction =
790− Transaction::change_by_selection(doc.text(), doc.selection(view.id), |range| {
791− let text: Tendril = range
792− .fragment(doc.text().slice(..))
793− .chars()
794− .flat_map(|ch| {
795− if ch.is_lowercase() {
796− ch.to_uppercase().collect()
797− } else if ch.is_uppercase() {
798− ch.to_lowercase().collect()
799− } else {
800− vec![ch]
801− }
802− })
803− .collect();
789+ let selection = doc
790+ .selection(view.id)
791+ .clone()
792+ .min_width_1(doc.text().slice(..));
793+ let transaction = Transaction::change_by_selection(doc.text(), &selection, |range| {
794+ let text: Tendril = range
795+ .fragment(doc.text().slice(..))
796+ .chars()
797+ .flat_map(|ch| {
798+ if ch.is_lowercase() {
799+ ch.to_uppercase().collect()
800+ } else if ch.is_uppercase() {
801+ ch.to_lowercase().collect()
802+ } else {
803+ vec![ch]
804+ }
805+ })
806+ .collect();
804807
805− (range.from(), range.to() + 1, Some(text))
806− });
808+ (range.from(), range.to(), Some(text))
809+ });
807810
808811 doc.apply(&transaction, view.id);
809812 doc.append_changes_to_history(view.id);
@@ -811,12 +814,15 @@ fn switch_case(cx: &mut Context) {
811814
812815fn switch_to_uppercase(cx: &mut Context) {
813816 let (view, doc) = current!(cx.editor);
814− let transaction =
815− Transaction::change_by_selection(doc.text(), doc.selection(view.id), |range| {
816− let text: Tendril = range.fragment(doc.text().slice(..)).to_uppercase().into();
817+ let selection = doc
818+ .selection(view.id)
819+ .clone()
820+ .min_width_1(doc.text().slice(..));
821+ let transaction = Transaction::change_by_selection(doc.text(), &selection, |range| {
822+ let text: Tendril = range.fragment(doc.text().slice(..)).to_uppercase().into();
817823
818− (range.from(), range.to() + 1, Some(text))
819− });
824+ (range.from(), range.to(), Some(text))
825+ });
820826
821827 doc.apply(&transaction, view.id);
822828 doc.append_changes_to_history(view.id);
@@ -824,12 +830,15 @@ fn switch_to_uppercase(cx: &mut Context) {
824830
825831fn switch_to_lowercase(cx: &mut Context) {
826832 let (view, doc) = current!(cx.editor);
827− let transaction =
828− Transaction::change_by_selection(doc.text(), doc.selection(view.id), |range| {
829− let text: Tendril = range.fragment(doc.text().slice(..)).to_lowercase().into();
833+ let selection = doc
834+ .selection(view.id)
835+ .clone()
836+ .min_width_1(doc.text().slice(..));
837+ let transaction = Transaction::change_by_selection(doc.text(), &selection, |range| {
838+ let text: Tendril = range.fragment(doc.text().slice(..)).to_lowercase().into();
830839
831− (range.from(), range.to() + 1, Some(text))
832− });
840+ (range.from(), range.to(), Some(text))
841+ });
833842
834843 doc.apply(&transaction, view.id);
835844 doc.append_changes_to_history(view.id);