summaryrefslogtreecommitdiff
path: root/src/normal.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-11-05 13:39:29 +0000
committerMaxime Coste <frrrwww@gmail.com>2015-11-05 13:40:40 +0000
commit33253a8fd510dcd3ad0b64439664727f74a390d4 (patch)
tree8df83ef81339f35813cab37d95dad10883005bd1 /src/normal.cc
parent05f7337eb0fb4464e14e996d5ded5d5342afeb24 (diff)
Support 'V' for locked view control
Fixes #343
Diffstat (limited to 'src/normal.cc')
-rw-r--r--src/normal.cc21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/normal.cc b/src/normal.cc
index 8be4b792..28347413 100644
--- a/src/normal.cc
+++ b/src/normal.cc
@@ -229,10 +229,18 @@ void goto_commands(Context& context, NormalParams params)
}
}
+template<bool lock>
void view_commands(Context& context, NormalParams params)
{
+ const int count = params.count;
on_next_key_with_autoinfo(context, KeymapMode::View,
- [params](Key key, Context& context) {
+ [count](Key key, Context& context) {
+ if (key == Key::Escape)
+ return;
+
+ if (lock)
+ view_commands<true>(context, {});
+
auto cp = key.codepoint();
if (not cp or not context.has_window())
return;
@@ -256,16 +264,16 @@ void view_commands(Context& context, NormalParams params)
context.window().display_line_at(cursor.line, window.dimensions().line-1);
break;
case 'h':
- context.window().scroll(-std::max<CharCount>(1, params.count));
+ context.window().scroll(-std::max<CharCount>(1, count));
break;
case 'j':
- context.window().scroll( std::max<LineCount>(1, params.count));
+ context.window().scroll( std::max<LineCount>(1, count));
break;
case 'k':
- context.window().scroll(-std::max<LineCount>(1, params.count));
+ context.window().scroll(-std::max<LineCount>(1, count));
break;
case 'l':
- context.window().scroll( std::max<CharCount>(1, params.count));
+ context.window().scroll( std::max<CharCount>(1, count));
break;
}
}, "view",
@@ -1496,7 +1504,8 @@ static NormalCmdDesc cmds[] =
{ 'g', "go to location", goto_commands<SelectMode::Replace> },
{ 'G', "extend to location", goto_commands<SelectMode::Extend> },
- { 'v', "move view", view_commands },
+ { 'v', "move view", view_commands<false> },
+ { 'V', "move view (locked)", view_commands<true> },
{ 'y', "yank selected text", yank },
{ 'p', "paste after selected text", repeated<paste<InsertMode::Append>> },