@@ -811,12 +811,25 @@ fn replace(cx: &mut Context) {
814−fn switch_case(cx: &mut Context) {
814+fn switch_case_impl<F>(cx: &mut Context, change_fn: F)
816+ F: Fn(Cow<str>) -> Tendril,
815 let (view, doc) = current!(cx.editor);
818 let (view, doc) = current!(cx.editor);
816 let selection = doc.selection(view.id);
819 let selection = doc.selection(view.id);
817 let transaction = Transaction::change_by_selection(doc.text(), selection, |range| {
820 let transaction = Transaction::change_by_selection(doc.text(), selection, |range| {
818− let text: Tendril = range
819− .fragment(doc.text().slice(..))
821+ let text: Tendril = change_fn(range.fragment(doc.text().slice(..)));
823+ (range.from(), range.to(), Some(text))
826+ doc.apply(&transaction, view.id);
827+ doc.append_changes_to_history(view.id);
830+fn switch_case(cx: &mut Context) {
831+ switch_case_impl(cx, |string| {
821 .flat_map(|ch| {
834 .flat_map(|ch| {
822 if ch.is_lowercase() {
835 if ch.is_lowercase() {
@@ -827,39 +840,16 @@ fn switch_case(cx: &mut Context) {
830− .collect();
843+ .collect()
832− (range.from(), range.to(), Some(text))
835− doc.apply(&transaction, view.id);
836− doc.append_changes_to_history(view.id);
839fn switch_to_uppercase(cx: &mut Context) {
847fn switch_to_uppercase(cx: &mut Context) {
840− let (view, doc) = current!(cx.editor);
848+ switch_case_impl(cx, |string| string.to_uppercase().into());
841− let selection = doc.selection(view.id);
842− let transaction = Transaction::change_by_selection(doc.text(), selection, |range| {
843− let text: Tendril = range.fragment(doc.text().slice(..)).to_uppercase().into();
845− (range.from(), range.to(), Some(text))
848− doc.apply(&transaction, view.id);
849− doc.append_changes_to_history(view.id);
852fn switch_to_lowercase(cx: &mut Context) {
851fn switch_to_lowercase(cx: &mut Context) {
853− let (view, doc) = current!(cx.editor);
852+ switch_case_impl(cx, |string| string.to_lowercase().into());
854− let selection = doc.selection(view.id);
855− let transaction = Transaction::change_by_selection(doc.text(), selection, |range| {
856− let text: Tendril = range.fragment(doc.text().slice(..)).to_lowercase().into();
858− (range.from(), range.to(), Some(text))
861− doc.apply(&transaction, view.id);
862− doc.append_changes_to_history(view.id);
865pub fn scroll(cx: &mut Context, offset: usize, direction: Direction) {
855pub fn scroll(cx: &mut Context, offset: usize, direction: Direction) {