Pass inserted text ranges in InsertCompletionHide hook parameter
Fixes #2898
This commit is contained in:
parent
4fdbf21ff8
commit
2623366514
|
@ -468,9 +468,24 @@ void InsertCompleter::reset()
|
||||||
{
|
{
|
||||||
if (m_explicit_completer or m_completions.is_valid())
|
if (m_explicit_completer or m_completions.is_valid())
|
||||||
{
|
{
|
||||||
String selected_item;
|
String hook_param;
|
||||||
if (m_current_candidate >= 0 and m_current_candidate < m_completions.candidates.size())
|
if (m_context.has_client() and m_current_candidate >= 0 and m_current_candidate < m_completions.candidates.size() - 1)
|
||||||
selected_item = std::move(m_completions.candidates[m_current_candidate].completion);
|
{
|
||||||
|
auto& buffer = m_context.buffer();
|
||||||
|
auto ref = buffer.string(m_completions.begin, m_completions.end);
|
||||||
|
const auto& cursor_pos = m_context.selections().main().cursor();
|
||||||
|
const auto prefix_len = buffer.distance(m_completions.begin, cursor_pos);
|
||||||
|
const auto suffix_len = std::max(0_byte, buffer.distance(cursor_pos, m_completions.end));
|
||||||
|
hook_param = join(m_context.selections() |
|
||||||
|
transform([&](const auto& sel) { return buffer.iterator_at(sel.cursor()); }) |
|
||||||
|
filter([&](const auto& pos) {
|
||||||
|
return pos.coord().column >= prefix_len and (pos + suffix_len) != buffer.end() and
|
||||||
|
std::equal(ref.begin(), ref.end(), pos - prefix_len);
|
||||||
|
}) |
|
||||||
|
transform([&](const auto& pos) {
|
||||||
|
return selection_to_string(ColumnType::Byte, buffer, {(pos - prefix_len).coord(), buffer.char_prev((pos + suffix_len).coord())});
|
||||||
|
}), ' ');
|
||||||
|
}
|
||||||
|
|
||||||
m_explicit_completer = nullptr;
|
m_explicit_completer = nullptr;
|
||||||
m_completions = InsertCompletion{};
|
m_completions = InsertCompletion{};
|
||||||
|
@ -478,7 +493,7 @@ void InsertCompleter::reset()
|
||||||
{
|
{
|
||||||
m_context.client().menu_hide();
|
m_context.client().menu_hide();
|
||||||
m_context.client().info_hide();
|
m_context.client().info_hide();
|
||||||
m_context.hooks().run_hook(Hook::InsertCompletionHide, selected_item, m_context);
|
m_context.hooks().run_hook(Hook::InsertCompletionHide, hook_param, m_context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user