diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2015-11-05 13:39:29 +0000 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2015-11-05 13:40:40 +0000 |
| commit | 33253a8fd510dcd3ad0b64439664727f74a390d4 (patch) | |
| tree | 8df83ef81339f35813cab37d95dad10883005bd1 /src/normal.cc | |
| parent | 05f7337eb0fb4464e14e996d5ded5d5342afeb24 (diff) | |
Support 'V' for locked view control
Fixes #343
Diffstat (limited to 'src/normal.cc')
| -rw-r--r-- | src/normal.cc | 21 |
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>> }, |
