Skip to content

Commit ff8c8b7

Browse files
committed
Add a new option: scrollview_signs_max_per_row_by_group
1 parent dd797d9 commit ff8c8b7

4 files changed

Lines changed: 28 additions & 0 deletions

File tree

autoload/scrollview.vim

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ let g:scrollview_signs_info_excluded =
106106
" Set to 0 to disable signs.
107107
let g:scrollview_signs_max_per_row =
108108
\ get(g:, 'scrollview_signs_max_per_row', -1)
109+
" Specifies the maximum number of signs per row, by group. -1 and 0 have the
110+
" same meaning as for scrollview_signs_max_per_row.
111+
let g:scrollview_signs_max_per_row_by_group =
112+
\ get(g:, 'scrollview_signs_max_per_row_by_group', {})
109113
" Sign groups to enable on startup. If 'all' is included, it effectively
110114
" expands to all built-in plugins. If 'defaults' is included, it effectively
111115
" expands to built-in plugins that would ordinarily be enabled by default.

doc/scrollview.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,13 @@ scrollview_signs_max_per_row *scrollview_signs_max_per_row*
386386
|Number| specifying the maximum number of signs per row.
387387
Set to `-1` to have no limit. Defaults to `-1`.
388388

389+
scrollview_signs_max_per_row_by_group *scrollview_signs_max_per_row_by_group*
390+
|Dictionary| mapping sign groups (|String|) to maximum
391+
number of corresponding signs per row (|Number|). Groups
392+
not present in the dictionary, or that have a value of
393+
`-1`, have no group-specific limit. Defaults to `{}`.
394+
Example: `{'diagnostics': 1, 'keywords': 2}`.
395+
389396
scrollview_signs_on_startup *scrollview_signs_on_startup*
390397
|List| of |String|s specifying built-in sign groups to
391398
enable on startup. Set to `[]` to disable all built-in

doc/tags

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ scrollview_search_symbol scrollview.txt /*scrollview_search_symbol*
126126
scrollview_signs_hidden_for_insert scrollview.txt /*scrollview_signs_hidden_for_insert*
127127
scrollview_signs_info_excluded scrollview.txt /*scrollview_signs_info_excluded*
128128
scrollview_signs_max_per_row scrollview.txt /*scrollview_signs_max_per_row*
129+
scrollview_signs_max_per_row_by_group scrollview.txt /*scrollview_signs_max_per_row_by_group*
129130
scrollview_signs_on_startup scrollview.txt /*scrollview_signs_on_startup*
130131
scrollview_signs_overflow scrollview.txt /*scrollview_signs_overflow*
131132
scrollview_signs_scrollbar_overlap scrollview.txt /*scrollview_signs_scrollbar_overlap*

lua/scrollview.lua

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1868,6 +1868,22 @@ local show_signs = function(winid, sign_winids, bar_winid)
18681868
return a.sign_spec_id < b.sign_spec_id
18691869
end
18701870
end)
1871+
-- Apply max per row by group.
1872+
local max_signs_per_row_by_group = vim.g.scrollview_signs_max_per_row_by_group
1873+
if not vim.tbl_isempty(max_signs_per_row_by_group) then
1874+
local group_counts = {}
1875+
local filtered_list = {}
1876+
for _, props in ipairs(props_list) do
1877+
local group = sign_specs[props.sign_spec_id].group
1878+
local group_limit = max_signs_per_row_by_group[group] or -1
1879+
group_counts[group] = (group_counts[group] or 0) + 1
1880+
if group_limit < 0 or group_counts[group] <= group_limit then
1881+
table.insert(filtered_list, props)
1882+
end
1883+
end
1884+
props_list = filtered_list
1885+
end
1886+
-- Apply global max per row.
18711887
local max_signs_per_row = vim.g.scrollview_signs_max_per_row
18721888
if max_signs_per_row >= 0 then
18731889
props_list = vim.list_slice(props_list, 1, max_signs_per_row)

0 commit comments

Comments
 (0)