@@ -186,6 +186,9 @@ impl Command {
186 extend_till_prev_char,
186 extend_till_prev_char,
187 extend_prev_char,
187 extend_prev_char,
190+ switch_to_uppercase,
191+ switch_to_lowercase,
190 page_down,
193 page_down,
191 half_page_up,
194 half_page_up,
@@ -780,6 +783,57 @@ fn replace(cx: &mut Context) {
786+fn switch_case(cx: &mut Context) {
787+ let (view, doc) = current!(cx.editor);
789+ Transaction::change_by_selection(doc.text(), doc.selection(view.id), |range| {
790+ let text: Tendril = range
791+ .fragment(doc.text().slice(..))
794+ if ch.is_lowercase() {
795+ ch.to_uppercase().collect()
796+ } else if ch.is_uppercase() {
797+ ch.to_lowercase().collect()
804+ (range.from(), range.to() + 1, Some(text))
807+ doc.apply(&transaction, view.id);
808+ doc.append_changes_to_history(view.id);
811+fn switch_to_uppercase(cx: &mut Context) {
812+ let (view, doc) = current!(cx.editor);
814+ Transaction::change_by_selection(doc.text(), doc.selection(view.id), |range| {
815+ let text: Tendril = range.fragment(doc.text().slice(..)).to_uppercase().into();
817+ (range.from(), range.to() + 1, Some(text))
820+ doc.apply(&transaction, view.id);
821+ doc.append_changes_to_history(view.id);
824+fn switch_to_lowercase(cx: &mut Context) {
825+ let (view, doc) = current!(cx.editor);
827+ Transaction::change_by_selection(doc.text(), doc.selection(view.id), |range| {
828+ let text: Tendril = range.fragment(doc.text().slice(..)).to_lowercase().into();
830+ (range.from(), range.to() + 1, Some(text))
833+ doc.apply(&transaction, view.id);
834+ doc.append_changes_to_history(view.id);
783fn scroll(cx: &mut Context, offset: usize, direction: Direction) {
837fn scroll(cx: &mut Context, offset: usize, direction: Direction) {
784 use Direction::*;
838 use Direction::*;
785 let (view, doc) = current!(cx.editor);
839 let (view, doc) = current!(cx.editor);