summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-01-24 19:08:57 +0000
committerMaxime Coste <frrrwww@gmail.com>2012-01-24 19:08:57 +0000
commit1fd8ec8bfd80e190f360fb55d92c7d6f1426c245 (patch)
treebda4e17034b116948a9c2b5a04e6e7f51de2fe91 /src
parenta62d56064fe6b1547882e9ce720d71afa72ad76e (diff)
support Ctrl-R <reg> when inserting to insert a register
Diffstat (limited to 'src')
-rw-r--r--src/main.cc23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/main.cc b/src/main.cc
index 8383d68e..98d716bf 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -324,7 +324,7 @@ struct InsertSequence
InsertSequence last_insert_sequence;
-bool insert_char(IncrementalInserter& inserter, const Key& key)
+bool insert_char(Window& window, IncrementalInserter& inserter, const Key& key)
{
switch (key.modifiers)
{
@@ -353,6 +353,23 @@ bool insert_char(IncrementalInserter& inserter, const Key& key)
inserter.insert_capture(next_key.key - '0');
break;
}
+ case 'r':
+ {
+ Key next_key = get_key();
+ last_insert_sequence.keys.push_back(next_key);
+ if (next_key.modifiers == Key::Modifiers::None)
+ {
+ switch (next_key.key)
+ {
+ case '%':
+ inserter.insert(window.buffer().name());
+ break;
+ default:
+ inserter.insert(RegisterManager::instance()[next_key.key]);
+ }
+ }
+ break;
+ }
case 'd':
inserter.move_cursor({0, -1});
break;
@@ -378,7 +395,7 @@ void do_insert(Window& window, IncrementalInserter::Mode mode)
{
Key key = get_key();
- if (not insert_char(inserter, key))
+ if (not insert_char(window, inserter, key))
return;
last_insert_sequence.keys.push_back(key);
@@ -391,7 +408,7 @@ void do_repeat_insert(Window& window, int count)
IncrementalInserter inserter(window, last_insert_sequence.mode);
for (const Key& key : last_insert_sequence.keys)
{
- insert_char(inserter, key);
+ insert_char(window, inserter, key);
}
draw_window(window);
}