From ab7bfec047c67c9d4f64cc0ef50dd9065e5f3362 Mon Sep 17 00:00:00 2001 From: JustTaken Date: Mon, 22 Jul 2024 16:20:42 -0400 Subject: 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. --- src/normal.cc | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'src/normal.cc') 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(), max_offset); + + const DisplayCoord scrolloff = context.options()["scrolloff"].get(); + 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(1, count)); -- cgit v1.2.3