Move rotate selection and rotate selection contents to ) and <a-)>

Backward rotation are supported with (.

Fixes #1210
This commit is contained in:
Maxime Coste 2018-03-25 11:34:38 +11:00
parent 683ce8e83b
commit ec7f3738ee
6 changed files with 30 additions and 18 deletions

View File

@ -1,5 +1,5 @@
┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┲━━━━━━━━━━━━━━┓
│ upper│ cmdout│convtab│ │selpipe│sel all│ │ align│pattern│ │ trim│ ┃ ⇤ ┃
│ upper│ cmdout│convtab│ │selpipe│sel all│ │ align│pattern│ rotate│ rotate│ trim│ ┃ ⇤ ┃
├┄┄CASE┄┼┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨ ┃
│ lower│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ │ ┃ ┃
┢━━━━━━━┷━━━┱───┴───┬───┴───┬───┴───┬───┴───┬───┴───┬───┴───┬───┴───┬───┴───┬───┴───┬───┴───┬───┴───┬───┺━━━┳━━━━━━━━━━┫
@ -9,7 +9,7 @@
┣━━━━━━━━━━━┻━┱─────┴─┬─────┴─┬─────┴─┬─────┴─┬─────┴─┬─────┴─┬─────┴─┬─────┴─┬─────┴─┬─────┴─┬─────┴─┬─────┺━┓ ┃
┃ ⇬ ┃ APPEND│ split│ │ ᵐʳ│ ᵐᵍ│ ᵐˡ│ ᵐ│ ᵐ│ ᵐˡ│cmdline│use reg│ pipe┃ ┃
┃ ┠┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┤ find│ goto │ │ │ │ ├┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┨ ┃
┃ ┃ append│ select│ delete│ char│ │ ← │ ↓ │ ↑ │ → │ cursor│ rotate│eschook┃ ┃
┃ ┃ append│ select│ delete│ char│ │ ← │ ↓ │ ↑ │ → │ cursor│ │eschook┃ ┃
┣━━━━━━━━━┳━━━┹───┬───┴───┬───┴───┬───┴───┬───┴───┬───┴───┬───┴───┬───┴───┬───┴───┬───┴───┬───┴───┲━━━┷━━━━━━━┻━━━━━━━━┫
┃ ┃ indent│ save│ ᵐ│copysel│ ᵛ│ ᵐʷ│ ᵐʳ│ │ dedent│ indent│ ᵐʳ┃ ┃
┃ ┠┄┄┄┄┄┄┄┼┄MARKS┄┤ select├┄┄┄┄┄┄┄┤ view│ prev│ search│ match├┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┤ search┃ ┃

View File

@ -196,11 +196,11 @@ is a sequence of non whitespace characters
*<c-d>*::
scroll half a page down
*'*::
rotate selections (the main selection becomes the next one)
*)*::
rotate main selection (the main selection becomes the next one)
*<a-'>*::
rotate selections backwards
*(*::
rotate main selection backward (the main selection becomes the previous one)
*;*::
reduce selections to their cursor
@ -362,7 +362,7 @@ is a sequence of non whitespace characters
*_*::
trim selections
*<a-">*::
*<a-)>*::
rotate selections content, if specified, the count groups selections,
so the following command
@ -372,6 +372,9 @@ is a sequence of non whitespace characters
rotate (1, 2, 3) and (3, 4, 6) independently
*<a-(>*::
rotate selections content backward
== Goto commands
*g*, *G*::

View File

@ -1365,10 +1365,11 @@ void rotate_selections(Context& context, NormalParams params)
: (index + (num - count % num)) % num);
}
template<Direction direction>
void rotate_selections_content(Context& context, NormalParams params)
{
int group = params.count;
int count = 1;
size_t group = params.count;
size_t count = 1;
auto strings = context.selections_content();
if (group == 0 or group > (int)strings.size())
group = (int)strings.size();
@ -1376,13 +1377,20 @@ void rotate_selections_content(Context& context, NormalParams params)
for (auto it = strings.begin(); it != strings.end(); )
{
auto end = std::min(strings.end(), it + group);
std::rotate(it, end-count, end);
if (direction == Direction::Forward)
std::rotate(it, end-count, end);
else
std::rotate(it, it+count, end);
it = end;
}
auto& selections = context.selections();
selections.insert(strings, InsertMode::Replace);
selections.set_main_index((selections.main_index() + count) %
selections.size());
const size_t index = selections.main_index();
const size_t index_in_group = index % group;
selections.set_main_index(index - index_in_group +
(direction == Forward) ?
(index_in_group + count) % group
: (index_in_group + group - count % group) % group);
}
enum class SelectFlags
@ -2182,9 +2190,10 @@ static const HashMap<Key, NormalCmd, MemoryDomain::Undefined, KeymapBackend> key
{ {ctrl('o')}, {"jump backward in jump list", jump<Backward>} },
{ {ctrl('s')}, {"push current selections in jump list", push_selections} },
{ {'\''}, {"rotate main selection forward", rotate_selections<Forward>} },
{ {alt('\'')}, {"rotate main selection backward", rotate_selections<Backward>} },
{ {alt('"')}, {"rotate selections content", rotate_selections_content} },
{ {')'}, {"rotate main selection forward", rotate_selections<Forward>} },
{ {'('}, {"rotate main selection backward", rotate_selections<Backward>} },
{ {alt(')')}, {"rotate selections content forward", rotate_selections_content<Forward>} },
{ {alt('(')}, {"rotate selections content backward", rotate_selections_content<Backward>} },
{ {'q'}, {"replay recorded macro", replay_macro} },
{ {'Q'}, {"start or end macro recording", start_or_end_macro_recording} },

View File

@ -1 +1 @@
<a-">
<a-)>

View File

@ -1 +1 @@
'<a-space>
)<a-space>

View File

@ -1 +1 @@
%<a-s>_<a-">
%<a-s>_<a-)>