Skip to content

Commit dd4c171

Browse files
committed
pre_assign_chars and process_unknown_chars
s1n7ax#34
1 parent 3206f84 commit dd4c171

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

lua/window-picker/hints/floating-big-letter-hint.lua

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ end
4343
function M:set_config(config)
4444
self.chars = config.chars
4545
self.create_chars = config.create_chars
46+
self.pre_assign_chars = config.pre_assign_chars
4647
local font = config.picker_config.floating_big_letter.font
4748

4849
if type(font) == 'string' then
@@ -138,9 +139,20 @@ function M:_show_letter_in_window(window, char, position)
138139
end
139140

140141
function M:draw(windows, or_create)
141-
for index, window in ipairs(windows) do
142+
local windowlist = {}
143+
for _, win in ipairs(windows) do
144+
windowlist[win] = false
145+
end
146+
if self.pre_assign_chars then
147+
windowlist = self.pre_assign_chars(windowlist)
148+
end
149+
150+
local index = 1
151+
for window, char in pairs(windowlist) do
142152
do
143-
local char = self.chars[index]
153+
char = char or self.chars[index]
154+
windowlist[window] = char
155+
index = index + 1
144156
local big_char = self.big_chars[char:lower()]
145157
local window_id = self:_show_letter_in_window(window, big_char)
146158
table.insert(self.windows, window_id)
@@ -157,6 +169,8 @@ function M:draw(windows, or_create)
157169
end
158170
end
159171
end
172+
173+
return windowlist
160174
end
161175

162176
local function clear_list_of_windows(windows)

lua/window-picker/pickers/window-picker.lua

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ end
1515
function M:set_config(config)
1616
self.chars = config.chars
1717
self.create_chars = config.create_chars
18+
self.process_unknown_char = config.process_unknown_char
1819
self.show_prompt = config.show_prompt
1920
self.prompt_message = config.prompt_message
2021
self.autoselect_one = config.filter_rules.autoselect_one
@@ -73,7 +74,7 @@ function M:pick_window()
7374
return windows[1]
7475
end
7576

76-
self.hint:draw(windows, self.or_create)
77+
local windowlist = self.hint:draw(windows, self.or_create)
7778

7879
vim.cmd.redraw()
7980

@@ -107,6 +108,10 @@ function M:pick_window()
107108
window = self:_find_matching_win_for_char(char, windows, create_action)
108109
end
109110

111+
if not window and self.process_unknown_char then
112+
window = self.process_unknown_char(char, windowlist)
113+
end
114+
110115
return window
111116
end
112117

0 commit comments

Comments
 (0)