Add an InsertCompletionSelect hook

InsertCompletionSelect will be called whenever the selected insert
completion changes. If the original text is selected back, the hook
parameter will be empty. If another candidate is selected, the hook
parameter will be its text content.

Fixes #1676
This commit is contained in:
Maxime Coste 2017-11-25 13:47:04 +08:00
parent 1ae96c977c
commit ec6ecd5772
3 changed files with 13 additions and 1 deletions

View File

@ -151,6 +151,11 @@ of the given *group*.
*InsertCompletionHide*:: *InsertCompletionHide*::
Triggered when the insert completion menu gets hidden Triggered when the insert completion menu gets hidden
*InsertCompletionSelect*::
Triggered when an entry is selected in the insert completion
menu. The filtering text is the selected completion text or
the empty string if the original text was selected back.
*RawKey*:: *RawKey*::
Triggered whenever a key is pressed by the user, the key is Triggered whenever a key is pressed by the user, the key is
used for filtering. used for filtering.

View File

@ -752,7 +752,7 @@ static constexpr auto hooks = {
"BufCreate", "BufNewFile", "BufOpenFile", "BufClose", "BufWritePost", "BufCreate", "BufNewFile", "BufOpenFile", "BufClose", "BufWritePost",
"BufWritePre", "BufOpenFifo", "BufCloseFifo", "BufReadFifo", "BufSetOption", "BufWritePre", "BufOpenFifo", "BufCloseFifo", "BufReadFifo", "BufSetOption",
"InsertBegin", "InsertChar", "InsertDelete", "InsertEnd", "InsertIdle", "InsertKey", "InsertBegin", "InsertChar", "InsertDelete", "InsertEnd", "InsertIdle", "InsertKey",
"InsertMove", "InsertCompletionHide", "InsertCompletionShow", "InsertMove", "InsertCompletionHide", "InsertCompletionShow", "InsertCompletionSelect",
"KakBegin", "KakEnd", "FocusIn", "FocusOut", "RuntimeError", "PromptIdle", "KakBegin", "KakEnd", "FocusIn", "FocusOut", "RuntimeError", "PromptIdle",
"NormalBegin", "NormalEnd", "NormalIdle", "NormalKey", "RawKey", "NormalBegin", "NormalEnd", "NormalIdle", "NormalKey", "RawKey",
"WinClose", "WinCreate", "WinDisplay", "WinResize", "WinSetOption", "WinClose", "WinCreate", "WinDisplay", "WinResize", "WinSetOption",

View File

@ -425,6 +425,13 @@ void InsertCompleter::select(int offset, Vector<Key>& keystrokes)
keystrokes.emplace_back(Key::Delete); keystrokes.emplace_back(Key::Delete);
for (auto& c : candidate.completion) for (auto& c : candidate.completion)
keystrokes.emplace_back(c); keystrokes.emplace_back(c);
if (m_context.has_client())
{
const auto param = (m_current_candidate == m_completions.candidates.size() - 1) ?
StringView{} : candidate.completion;
m_context.hooks().run_hook("InsertCompletionSelect", param, m_context);
}
} }
void InsertCompleter::update() void InsertCompleter::update()