summaryrefslogtreecommitdiff
path: root/src/normal.cc
diff options
context:
space:
mode:
authorJustTaken <juub_camara@hotmail.com>2024-07-20 23:11:43 -0400
committerJustTaken <juub_camara@hotmail.com>2024-07-20 23:11:43 -0400
commit38d4a75180d99618cfe3a254355e69fc5bb479de (patch)
tree3ac9cff053d1997863f54ec56533ac6d47187f6c /src/normal.cc
parent6f562aa0add09092d390f7ea2691959490234ed0 (diff)
Take in account scrolloff when moving viewport
`vt` and `vb` respect custom scroll offset
Diffstat (limited to 'src/normal.cc')
-rw-r--r--src/normal.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/normal.cc b/src/normal.cc
index af4d5fb1..d88e26a4 100644
--- a/src/normal.cc
+++ b/src/normal.cc
@@ -383,6 +383,9 @@ void view_commands(Context& context, NormalParams params)
const BufferCoord cursor = context.selections().main().cursor();
Window& window = context.window();
+ const DisplayCoord max_offset{(window.dimensions().line - 1)/2, (window.dimensions().column - 1)/2};
+ const DisplayCoord scrolloff =
+ std::min(context.options()["scrolloff"].get<DisplayCoord>(), max_offset);
switch (*cp)
{
case 'v':
@@ -394,10 +397,10 @@ void view_commands(Context& context, NormalParams params)
context.buffer()[cursor.line].column_count_to(cursor.column));
break;
case 't':
- window.display_line_at(cursor.line, 0);
+ window.display_line_at(cursor.line, scrolloff.line);
break;
case 'b':
- window.display_line_at(cursor.line, window.dimensions().line-1);
+ window.display_line_at(cursor.line, window.dimensions().line-1-scrolloff.line);
break;
case '<':
window.display_column_at(context.buffer()[cursor.line].column_count_to(cursor.column), 0);