add support for tolower (), toupper (~), and swap case become alt-

This commit is contained in:
Maxime Coste 2013-07-12 13:55:30 +01:00
parent 81b5c477f6
commit 90b92aed3c
2 changed files with 14 additions and 5 deletions

View File

@ -128,7 +128,9 @@ Changes
* _r_: replace each character with the next entered one * _r_: replace each character with the next entered one
* _&_: align selection, align the last character of selections by * _&_: align selection, align the last character of selections by
inserting spaces before inserting spaces before
* _~_: swap case * _`_: to lower case
* _~_: to upper case
* _alt-`_: swap case
Goto Commands Goto Commands
------------- -------------

View File

@ -211,20 +211,24 @@ void replace_with_char(Context& context)
}); });
} }
Codepoint swapped_case(Codepoint cp) Codepoint to_lower(Codepoint cp) { return tolower(cp); }
Codepoint to_upper(Codepoint cp) { return toupper(cp); }
Codepoint swap_case(Codepoint cp)
{ {
Codepoint res = std::tolower(cp); Codepoint res = std::tolower(cp);
return res == cp ? std::toupper(cp) : res; return res == cp ? std::toupper(cp) : res;
} }
void swap_case(Context& context) template<Codepoint (*func)(Codepoint)>
void for_each_char(Context& context)
{ {
Editor& editor = context.editor(); Editor& editor = context.editor();
std::vector<String> sels = editor.selections_content(); std::vector<String> sels = editor.selections_content();
for (auto& sel : sels) for (auto& sel : sels)
{ {
for (auto& c : sel) for (auto& c : sel)
c = swapped_case(c); c = func(c);
} }
editor.insert(sels, InsertMode::Replace); editor.insert(sels, InsertMode::Replace);
} }
@ -881,7 +885,10 @@ KeyMap keymap =
{ { Key::Modifiers::None, 'q' }, start_or_end_macro_recording }, { { Key::Modifiers::None, 'q' }, start_or_end_macro_recording },
{ { Key::Modifiers::None, 'Q' }, replay_macro }, { { Key::Modifiers::None, 'Q' }, replay_macro },
{ { Key::Modifiers::None, '~' }, swap_case }, { { Key::Modifiers::None, '`' }, for_each_char<to_lower> },
{ { Key::Modifiers::None, '~' }, for_each_char<to_upper> },
{ { Key::Modifiers::Alt, '`' }, for_each_char<swap_case> },
{ { Key::Modifiers::None, '&' }, align }, { { Key::Modifiers::None, '&' }, align },
{ Key::Left, move<CharCount, Backward> }, { Key::Left, move<CharCount, Backward> },