Add a repeat last insert command, bound to .
This commit is contained in:
parent
d1cc5da8a6
commit
23eafd4504
51
src/main.cc
51
src/main.cc
|
@ -272,20 +272,22 @@ void print_status(const std::string& status)
|
||||||
addstr(status.c_str());
|
addstr(status.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_insert(Window& window, IncrementalInserter::Mode mode)
|
struct InsertSequence
|
||||||
{
|
{
|
||||||
Kakoune::IncrementalInserter inserter(window, mode);
|
IncrementalInserter::Mode mode;
|
||||||
draw_window(window);
|
std::string keys;
|
||||||
while(true)
|
|
||||||
{
|
|
||||||
const DisplayCoord& pos = window.cursor_position();
|
|
||||||
move(pos.line, pos.column);
|
|
||||||
|
|
||||||
char c = getch();
|
InsertSequence() : mode(IncrementalInserter::Mode::Insert) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
InsertSequence last_insert_sequence;
|
||||||
|
|
||||||
|
bool insert_char(IncrementalInserter& inserter, char c)
|
||||||
|
{
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
case 27:
|
case 27:
|
||||||
return;
|
return false;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
c = getch();
|
c = getch();
|
||||||
|
@ -309,10 +311,38 @@ void do_insert(Window& window, IncrementalInserter::Mode mode)
|
||||||
default:
|
default:
|
||||||
inserter.insert(std::string() + c);
|
inserter.insert(std::string() + c);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void do_insert(Window& window, IncrementalInserter::Mode mode)
|
||||||
|
{
|
||||||
|
last_insert_sequence.mode = mode;
|
||||||
|
last_insert_sequence.keys.clear();
|
||||||
|
IncrementalInserter inserter(window, mode);
|
||||||
|
draw_window(window);
|
||||||
|
while(true)
|
||||||
|
{
|
||||||
|
char c = getch();
|
||||||
|
|
||||||
|
if (not insert_char(inserter, c))
|
||||||
|
return;
|
||||||
|
|
||||||
|
last_insert_sequence.keys += c;
|
||||||
draw_window(window);
|
draw_window(window);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void do_repeat_insert(Window& window, int count)
|
||||||
|
{
|
||||||
|
IncrementalInserter inserter(window, last_insert_sequence.mode);
|
||||||
|
for (char c : last_insert_sequence.keys)
|
||||||
|
{
|
||||||
|
insert_char(inserter, c);
|
||||||
|
}
|
||||||
|
draw_window(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
template<bool append>
|
template<bool append>
|
||||||
void do_go(Window& window, int count)
|
void do_go(Window& window, int count)
|
||||||
{
|
{
|
||||||
|
@ -651,6 +681,9 @@ std::unordered_map<char, std::function<void (Window& window, int count)>> keymap
|
||||||
|
|
||||||
{ 's', do_select_regex },
|
{ 's', do_select_regex },
|
||||||
|
|
||||||
|
|
||||||
|
{ '.', do_repeat_insert },
|
||||||
|
|
||||||
{ '%', [](Window& window, int count) { window.select([](const BufferIterator& cursor)
|
{ '%', [](Window& window, int count) { window.select([](const BufferIterator& cursor)
|
||||||
{ return Selection(cursor.buffer().begin(), cursor.buffer().end()-1); }); } },
|
{ return Selection(cursor.buffer().begin(), cursor.buffer().end()-1); }); } },
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user