diff options
| author | JustTaken <juub_camara@hotmail.com> | 2024-07-22 16:20:42 -0400 |
|---|---|---|
| committer | JustTaken <juub_camara@hotmail.com> | 2024-07-22 16:20:42 -0400 |
| commit | ab7bfec047c67c9d4f64cc0ef50dd9065e5f3362 (patch) | |
| tree | 63a4185db1731212c41e6e998ac5c9f92fdac4ac /src/normal.cc | |
| parent | cbe2997bb579efa95601944ce262297cac85860a (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.cc | 16 |
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)); |
