plugins/scrollview: init

This commit is contained in:
Gaetan Lepage 2024-10-29 22:09:02 +01:00 committed by nix-infra-bot
parent 42ea1626cb
commit 356896f58d
2 changed files with 543 additions and 0 deletions

View file

@ -0,0 +1,439 @@
{ lib, ... }:
let
inherit (lib.nixvim) defaultNullOpts mkNullOrStr mkNullOrOption;
inherit (lib) types;
in
lib.nixvim.vim-plugin.mkVimPlugin {
name = "scrollview";
originalName = "nvim-scrollview";
package = "nvim-scrollview";
globalPrefix = "scrollview_";
maintainers = [ lib.maintainers.GaetanLepage ];
settingsOptions =
let
mkPriorityOption =
name: default:
defaultNullOpts.mkUnsignedInt default ''
The priority for the ${name}.
Considered only when the plugin is loaded.
'';
symbolCommonDesc = ''
A list of strings can also be used; the symbol is selected using the index equal to the
number of lines corresponding to the sign, or the last element when the retrieval would be
out-of-bounds.
Considered only when the plugin is loaded.
'';
symbolType = with types; maybeRaw (either str (listOf (maybeRaw str)));
in
{
always_show = defaultNullOpts.mkBool false ''
Specify whether scrollbars and signs are shown when all lines are visible.
'';
base =
defaultNullOpts.mkEnumFirstDefault
[
"right"
"left"
"buffer"
]
''
Specify where the scrollbar is anchored.
Possible values are `"left"` or `"right"` for corresponding window edges, or `"buffer"`.
'';
byte_limit = defaultNullOpts.mkInt 1000000 ''
The buffer size threshold (in bytes) for entering restricted mode, to prevent slow operation.
Use `-1` for no limit.
'';
character = defaultNullOpts.mkStr "" ''
A character to display on scrollbars.
Scrollbar transparency (via `|scrollview_winblend|`) is not possible when a scrollbar
character is used.
'';
column = defaultNullOpts.mkPositiveInt 1 ''
The scrollbar column (relative to `|scrollview_base|`).
Must be an integer greater than or equal to `1`.
'';
consider_border = defaultNullOpts.mkBool false ''
(experimental)
Specify whether floating window borders are taken into account for positioning scrollbars and
signs.
- When set to `true`, borders are considered as part of the window; scrollbars and signs can
be positioned where there are borders.
- When set to `false`, borders are ignored.
The setting is only applicable for floating windows that have borders, and only relevant when
`floating_windows` is turned on and `base` is set to `"left"` or `"right"`.
'';
current_only = defaultNullOpts.mkBool false ''
Whether scrollbars and signs should only be displayed in the current window.
'';
excluded_filetypes = defaultNullOpts.mkListOf types.str [ ] ''
optional file types for which scrollbars should not be displayed.
'';
floating_windows = defaultNullOpts.mkBool false ''
Whether scrollbars and signs are shown in floating windows.
'';
hide_bar_for_insert = defaultNullOpts.mkBool false ''
Whether the scrollbar is hidden in the current window for insert mode.
See the `signs_hidden_for_insert` option for hiding signs.
'';
hide_on_intersect = defaultNullOpts.mkBool false ''
Whether each scrollbar or sign becomes hidden (not shown) when it would otherwise intersect
with a floating window.
'';
hover = defaultNullOpts.mkBool true ''
Whether the highlighting of scrollbars and signs should change when hovering with the mouse.
Requires mouse support (see `|'mouse'|`) with `|'mousemoveevent'|` set.
'';
include_end_region = defaultNullOpts.mkBool false ''
Whether the region beyond the last line is considered as containing ordinary lines for the
calculation of scrollbar height and positioning.
'';
line_limit = defaultNullOpts.mkInt (-1) ''
The buffer size threshold (in lines) for entering restricted mode, to prevent slow operation.
Defaults to `20000`.
Use `-1` for no limit.
'';
mode = defaultNullOpts.mkStr "auto" ''
Specify what the scrollbar position and size correspond to.
See |scrollview-modes| for details on the available modes.
'';
mouse_primary = defaultNullOpts.mkStr "left" ''
The button for primary mouse operations (dragging scrollbars and clicking signs).
Possible values include `"left"`, `"middle"`, `"right"`, `"x1"`, and `"x2"`.
These can be prepended with `"c-"` or `"m-"` for the control-key and alt-key variants
(e.g., `"c-left"` for control-left).
An existing mapping will not be clobbered, unless `"!"` is added at the end (e.g., `"left!"`).
Set to `"nil"` to disable the functionality.
Considered only when the plugin is loaded.
'';
mouse_secondary = defaultNullOpts.mkStr "right" ''
The button for secondary mouse operations (clicking signs for additional information).
See the `mouse_primary` option for the possible values, including how `"c-"`, `"m-"`, `"!"`,
and `"nil"` can be utilized.
Considered only when the plugin is loaded.
'';
on_startup = defaultNullOpts.mkBool true ''
Whether scrollbars are enabled on startup.
Considered only when the plugin is loaded.
'';
winblend = defaultNullOpts.mkUnsignedInt 50 ''
The level of transparency for scrollbars when a GUI is not running and `termguicolors` is not
set.
Must be between `0` (opaque) and `100` (transparent).
This option is ignored for scrollview windows whose highlight group has `reverse` or `inverse`
specified as a cterm attribute; see `|attr-list|`.
Such windows will have no transparency, as a workaround for Neovim #24159.
This option is ignored for scrollview windows shown for floating windows; see
`|scrollview_floating_windows|`.
Such windows will have no transparency, as a workaround for Neovim #14624.
'';
winblend_gui = defaultNullOpts.mkUnsignedInt 0 ''
(experimental)
The level of transparency for scrollbars when a GUI is running or `termguicolors` is set.
Must be between `0` (opaque) and `100` (transparent).
This option is ignored for scrollview windows whose highlight group has `reverse` or `inverse`
specified as a gui attribute; see `|attr-list|`.
Such windows will have no transparency, as a workaround for Neovim #24159.
This option is ignored for scrollview windows shown for floating windows; see
`|scrollview_floating_windows|`.
Such windows will have no transparency, as a workaround for Neovim #14624.
This option can interact with highlight settings (`|scrollview-color-customization|`); careful
adjustment of the winblend setting and highlighting may be necessary to achieve the desired
result.
'';
zindex = defaultNullOpts.mkUnsignedInt 40 ''
The z-index for scrollbars and signs.
Must be larger than zero.
'';
signs_hidden_for_insert = defaultNullOpts.mkListOf types.str [ ] ''
The sign groups to hide in the current window for insert mode.
Set to `[ "all" ]` to hide all sign groups.
See `|scrollview_hide_bar_for_insert|` for hiding the scrollbar.
'';
signs_max_per_row = defaultNullOpts.mkInt (-1) ''
The maximum number of signs per row.
Set to `-1` to have no limit.
'';
signs_on_startup =
defaultNullOpts.mkListOf types.str
[
"diagnostics"
"marks"
"search"
]
''
The built-in sign groups to enable on startup.
Set to `{__empty = null;}` to disable all built-in sign groups on startup.
Set to `['all']` to enable all sign groups.
Considered only when the plugin is loaded.
'';
signs_overflow =
defaultNullOpts.mkEnumFirstDefault
[
"left"
"right"
]
''
The sign overflow direction (to avoid overlapping the scrollbar or other signs).
'';
signs_show_in_folds = defaultNullOpts.mkBool false ''
Whether signs on lines within hidden folds should be shown.
Sign groups can override this setting (e.g., the built-in cursor sign group does).
'';
changelist_previous_priority = mkPriorityOption "the previous item changelist sign" 15;
changelist_previous_symbol = mkNullOrStr ''
The symbol for the previous item changelist sign.
Defaults to an upwards arrow with tip leftwards.
'';
changelist_current_priority = mkPriorityOption "the current changelist sign" 10;
changelist_current_symbol = defaultNullOpts.mkStr "@" ''
The symbol for the current item changelist sign.
'';
changelist_next_priority = mkPriorityOption "the next item changelist sign" 5;
changelist_next_symbol = mkNullOrStr ''
The symbol for the next item changelist sign.
Defaults to a downwards arrow with tip rightwards.
'';
conflicts_bottom_priority = mkPriorityOption "conflict bottom signs" 80;
conflicts_bottom_symbol = defaultNullOpts.mkNullable symbolType ">" ''
The symbol for conflict bottom signs.
${symbolCommonDesc}
'';
conflicts_middle_priority = mkPriorityOption "conflict middle signs" 75;
conflicts_middle_symbol = defaultNullOpts.mkNullable symbolType "=" ''
The symbol for conflict middle signs.
${symbolCommonDesc}
'';
conflicts_top_priority = mkPriorityOption "conflict top signs" 70;
conflicts_top_symbol = defaultNullOpts.mkNullable symbolType "<" ''
The symbol for conflict top signs.
${symbolCommonDesc}
'';
cursor_priority = mkPriorityOption "cursor signs" 0;
cursor_symbol = mkNullOrStr ''
The symbol for cursor signs.
Defaults to a small square, resembling a block cursor.
'';
diagnostics_error_priority = mkPriorityOption "cursor diagnostic error signs" 60;
diagnostics_error_symbol = mkNullOrOption symbolType ''
The symbol for diagnostic error signs.
Defaults to the trimmed sign text for `DiagnosticSignError` if defined, or `"E"` otherwise.
${symbolCommonDesc}
'';
diagnostics_hint_priority = mkPriorityOption "the diagnostic hint signs" 30;
diagnostics_hint_symbol = mkNullOrOption symbolType ''
The symbol for diagnostic hint signs.
Defaults to the trimmed sign text for `DiagnosticSignHint` if defined, or `"H"` otherwise.
${symbolCommonDesc}
'';
diagnostics_info_priority = mkPriorityOption "the diagnostic info signs" 40;
diagnostics_info_symbol = mkNullOrOption symbolType ''
The symbol for diagnostic info signs.
Defaults to the trimmed sign text for `DiagnosticSignInfo` if defined, or `"I"` otherwise.
${symbolCommonDesc}
'';
diagnostics_severities =
mkNullOrOption (with types; maybeRaw (either ints.unsigned (listOf (maybeRaw ints.unsigned))))
''
List of numbers specifying the diagnostic severities for which signs will be shown.
The default includes `vim.diagnostic.severity.ERROR`, `vim.diagnostic.severity.HINT`,
`"vim.diagnostic.severity.INFO"`, and `vim.diagnostic.severity.WARN`.
Considered only when the plugin is loaded.
'';
diagnostics_warn_priority = mkPriorityOption "the diagnostic warn signs" 50;
diagnostics_warn_symbol = mkNullOrOption symbolType ''
The symbol for diagnostic warn signs.
Defaults to the trimmed sign text for `DiagnosticSignWarn` if defined, or `"W"` otherwise.
${symbolCommonDesc}
'';
folds_priority = mkPriorityOption "fold signs" 30;
folds_symbol = mkNullOrOption symbolType ''
The symbol for fold signs.
Defaults to a right-pointing triangle.
${symbolCommonDesc}
'';
latestchange_priority = mkPriorityOption "latestchange signs" 10;
latestchange_symbol = mkNullOrStr ''
The symbol for latestchange signs.
Defaults to a Greek uppercase delta.
'';
loclist_priority = mkPriorityOption "loclist signs" 45;
loclist_symbol = mkNullOrOption symbolType ''
The symbol for loclist signs.
Defaults to a small circle.
${symbolCommonDesc}
'';
marks_characters = defaultNullOpts.mkListOf' {
type = types.str;
description = ''
List of strings specifying characters for which mark signs will be shown.
Defaults to characters `a-z` and `A-Z`.
Considered only when the plugin is loaded.
'';
};
marks_priority = mkPriorityOption "mark signs" 50;
quickfix_priority = mkPriorityOption "quickfix signs" 45;
quickfix_symbol = mkNullOrOption symbolType ''
The symbol for quickfix signs.
Defaults to a small circle.
${symbolCommonDesc}
'';
search_priority = mkPriorityOption "search signs" 70;
search_symbol = mkNullOrOption symbolType ''
The symbol for search signs.
Defaults to `["=" "=" {__raw = "vim.fn.nr2char(0x2261)";}]` where the third element is the triple
bar.
${symbolCommonDesc}
'';
spell_priority = mkPriorityOption "spell signs" 20;
spell_symbol = defaultNullOpts.mkNullable symbolType "~" ''
The symbol for spell signs.
${symbolCommonDesc}
'';
textwidth_priority = mkPriorityOption "textwidth signs" 20;
textwidth_symbol = mkNullOrOption symbolType ''
The symbol for textwidth signs.
Defaults to a right-pointing double angle quotation mark.
${symbolCommonDesc}
'';
trail_priority = mkPriorityOption "trail signs" 50;
trail_symbol = mkNullOrOption symbolType ''
The symbol for trail signs.
Defaults to an outlined square.
${symbolCommonDesc}
'';
};
settingsExample = {
excluded_filetypes = [ "nerdtree" ];
current_only = true;
base = "buffer";
column = 80;
signs_on_startup = [ "all" ];
diagnostics_severities = [ { __raw = "vim.diagnostic.severity.ERROR"; } ];
};
}

View file

@ -0,0 +1,104 @@
{
empty = {
plugins.scrollview.enable = true;
};
defaults = {
plugins.scrollview = {
enable = true;
settings = {
always_show = false;
base = "right";
byte_limit = 1000000;
character = "";
column = 1;
consider_border = false;
current_only = false;
excluded_filetypes = [ ];
floating_windows = false;
hide_bar_for_insert = false;
hide_on_intersect = false;
hover = true;
include_end_region = false;
line_limit = -1;
mode = "auto";
mouse_primary = "left";
mouse_secondary = "right";
on_startup = true;
winblend = 50;
winblend_gui = 0;
zindex = 40;
signs_hidden_for_insert = [ ];
signs_max_per_row = -1;
signs_on_startup = [
"diagnostics"
"marks"
"search"
];
signs_overflow = "left";
signs_show_in_folds = false;
changelist_previous_priority = 15;
changelist_previous_symbol = null;
changelist_current_priority = 10;
changelist_current_symbol = "@";
changelist_next_priority = 5;
changelist_next_symbol = null;
conflicts_bottom_priority = 80;
conflicts_bottom_symbol = ">";
conflicts_middle_priority = 75;
conflicts_middle_symbol = "=";
conflicts_top_priority = 70;
conflicts_top_symbol = "<";
cursor_priority = 0;
cursor_symbol = null;
diagnostics_error_priority = 60;
diagnostics_error_symbol = "E";
diagnostics_hint_priority = 30;
diagnostics_hint_symbol = "H";
diagnostics_info_priority = 40;
diagnostics_info_symbol.__raw = "'I'"; # test rawLua support
diagnostics_severities = null;
diagnostics_warn_priority = 50;
diagnostics_warn_symbol = "W";
folds_priority = 30;
folds_symbol = null;
latestchange_priority = 10;
latestchange_symbol = null;
loclist_priority = 45;
loclist_symbol = null;
marks_characters = null;
marks_priority = 50;
quickfix_priority = 45;
quickfix_symbol = null;
search_priority = 70;
search_symbol = [
"="
"="
{ __raw = "vim.fn.nr2char(0x2261)"; }
];
spell_priority = 20;
spell_symbol = "~";
textwidth_priority = 20;
textwidth_symbol = null;
trail_priority = 50;
trail_symbol = null;
};
};
};
example = {
plugins.scrollview = {
enable = true;
settings = {
excluded_filetypes = [ "nerdtree" ];
current_only = true;
base = "buffer";
column = 80;
signs_on_startup = [ "all" ];
diagnostics_severities = [ { __raw = "vim.diagnostic.severity.ERROR"; } ];
};
};
};
}