summaryrefslogtreecommitdiff
path: root/src/normal.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/normal.cc')
-rw-r--r--src/normal.cc16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/normal.cc b/src/normal.cc
index d88e26a4..e00d0976 100644
--- a/src/normal.cc
+++ b/src/normal.cc
@@ -383,9 +383,10 @@ 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);
+
+ const DisplayCoord scrolloff = context.options()["scrolloff"].get<DisplayCoord>();
+ const LineCount line_offset{std::min((window.dimensions().line - 1) / 2, scrolloff.line)};
+ const ColumnCount column_offset{std::min((window.dimensions().column - 1) / 2, scrolloff.column)};
switch (*cp)
{
case 'v':
@@ -397,17 +398,18 @@ 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, scrolloff.line);
+ window.display_line_at(cursor.line, line_offset);
break;
case 'b':
- window.display_line_at(cursor.line, window.dimensions().line-1-scrolloff.line);
+ window.display_line_at(cursor.line, window.dimensions().line-1-line_offset);
break;
case '<':
- window.display_column_at(context.buffer()[cursor.line].column_count_to(cursor.column), 0);
+ window.display_column_at(context.buffer()[cursor.line].column_count_to(cursor.column),
+ column_offset);
break;
case '>':
window.display_column_at(context.buffer()[cursor.line].column_count_to(cursor.column),
- window.dimensions().column-1);
+ window.dimensions().column-1-column_offset);
break;
case 'h':
window.scroll(-std::max<ColumnCount>(1, count));