summaryrefslogtreecommitdiff
path: root/src/normal.cc
diff options
context:
space:
mode:
authorJustTaken <juub_camara@hotmail.com>2024-07-22 16:20:42 -0400
committerJustTaken <juub_camara@hotmail.com>2024-07-22 16:20:42 -0400
commitab7bfec047c67c9d4f64cc0ef50dd9065e5f3362 (patch)
tree63a4185db1731212c41e6e998ac5c9f92fdac4ac /src/normal.cc
parentcbe2997bb579efa95601944ce262297cac85860a (diff)
Fix logic to get minimun custom offset
Now the scrolloff can be specified in the configuration file and if either one of the column or line offset given is too large to fit in the buffer, half of the window dimension is taken in it's place. `v<` and `v>` account custom scroll offset as well.
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));