From ca004728498a71afd401cf6b8cdc949742b7ea0f Mon Sep 17 00:00:00 2001 From: David Vazgenovich Shakaryan Date: Wed, 4 Feb 2026 23:06:15 -0800 Subject: allow filtering search results by type --- osd.lua | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) (limited to 'osd.lua') diff --git a/osd.lua b/osd.lua index a793286..348f0d2 100644 --- a/osd.lua +++ b/osd.lua @@ -159,18 +159,38 @@ function mt:menu_title(menu) local col = menu.search_active and colour.selected or colour.title if menu.type == 'search' then - str = str:gsub('', asscape(menu.search_text)) + local start = #menu.search_text - #menu.search_term + local prefix = menu.search_text:sub(1, start) + local term = menu.search_text:sub(start + 1) + + if str:find('', 1, true) then + str = str:gsub('', function() + return colour.search_prefix .. + asscape(prefix) .. col .. asscape(term) + end) + end if str:find('', 1, true) then - str = str:gsub('', - asscape(menu.search_text:sub( - 1, menu.search_cursor - 1)) .. - cursor_glyph .. - asscape(menu.search_text:sub( - menu.search_cursor))) + local idx = menu.search_cursor + if idx <= start then + prefix = asscape(prefix:sub(1, idx - 1)) .. + col .. cursor_glyph .. + colour.search_prefix .. + asscape(prefix:sub(idx)) + term = asscape(term) + else + idx = idx - start + prefix = asscape(prefix) + term = asscape(term:sub(1, idx - 1)) .. + cursor_glyph .. asscape(term:sub(idx)) + end + str = str:gsub('', function() + return colour.search_prefix .. prefix .. col .. + term + end) end - str = str:gsub('', colour.info) + str = str:gsub('', colour.info) str = str:gsub('', #menu.options) str = str:gsub('', #menu.search_options) end -- cgit v1.2.3-70-g09d2