Use a struct rather than a std::pair for InputHandler::Insertion

This commit is contained in:
Maxime Coste 2015-08-08 22:46:11 +01:00
parent 7a59a6d758
commit 9d50dd3886
2 changed files with 11 additions and 11 deletions

View File

@ -899,8 +899,8 @@ public:
if (m_disable_hooks) if (m_disable_hooks)
context().user_hooks_support().disable(); context().user_hooks_support().disable();
last_insert().first = mode; last_insert().mode = mode;
last_insert().second.clear(); last_insert().keys.clear();
context().hooks().run_hook("InsertBegin", "", context()); context().hooks().run_hook("InsertBegin", "", context());
prepare(m_insert_mode); prepare(m_insert_mode);
} }
@ -932,7 +932,7 @@ public:
void on_key(Key key, KeepAlive keep_alive) override void on_key(Key key, KeepAlive keep_alive) override
{ {
auto& buffer = context().buffer(); auto& buffer = context().buffer();
last_insert().second.push_back(key); last_insert().keys.push_back(key);
if (m_mode == Mode::InsertReg) if (m_mode == Mode::InsertReg)
{ {
if (key.modifiers == Key::Modifiers::None) if (key.modifiers == Key::Modifiers::None)
@ -1032,14 +1032,14 @@ public:
insert('\t'); insert('\t');
else if (key == ctrl('n')) else if (key == ctrl('n'))
{ {
last_insert().second.pop_back(); last_insert().keys.pop_back();
m_completer.select(1, last_insert().second); m_completer.select(1, last_insert().keys);
update_completions = false; update_completions = false;
} }
else if (key == ctrl('p')) else if (key == ctrl('p'))
{ {
last_insert().second.pop_back(); last_insert().keys.pop_back();
m_completer.select(-1, last_insert().second); m_completer.select(-1, last_insert().keys);
update_completions = false; update_completions = false;
} }
else if (key == ctrl('x')) else if (key == ctrl('x'))
@ -1230,14 +1230,14 @@ void InputHandler::insert(InsertMode mode)
void InputHandler::repeat_last_insert() void InputHandler::repeat_last_insert()
{ {
if (m_last_insert.second.empty()) if (m_last_insert.keys.empty())
return; return;
Vector<Key> keys; Vector<Key> keys;
swap(keys, m_last_insert.second); swap(keys, m_last_insert.keys);
// context.last_insert will be refilled by the new Insert // context.last_insert will be refilled by the new Insert
// this is very inefficient. // this is very inefficient.
push_mode(new InputModes::Insert(*this, m_last_insert.first)); push_mode(new InputModes::Insert(*this, m_last_insert.mode));
for (auto& key : keys) for (auto& key : keys)
current_mode().handle_key(key); current_mode().handle_key(key);
kak_assert(dynamic_cast<InputModes::Normal*>(&current_mode()) != nullptr); kak_assert(dynamic_cast<InputModes::Normal*>(&current_mode()) != nullptr);

View File

@ -93,7 +93,7 @@ private:
void push_mode(InputMode* new_mode); void push_mode(InputMode* new_mode);
std::unique_ptr<InputMode> pop_mode(InputMode* current_mode); std::unique_ptr<InputMode> pop_mode(InputMode* current_mode);
using Insertion = std::pair<InsertMode, Vector<Key>>; struct Insertion{ InsertMode mode; Vector<Key> keys; };
Insertion m_last_insert = {InsertMode::Insert, {}}; Insertion m_last_insert = {InsertMode::Insert, {}};
char m_recording_reg = 0; char m_recording_reg = 0;