From 5a1700a456fbd778e54826227e47340eafaea330 Mon Sep 17 00:00:00 2001 From: CogentRedTester Date: Fri, 20 Feb 2026 14:27:41 +1030 Subject: [PATCH] mp.input: avoid displaying outdated completions from the same client Previously, completion responses from the same client would be displayed even if the user had since changed the input, as long as a newer complete event had already been sent. This meant that, if clients took a sufficiently long time to return completions, then console.lua would display completions for previous versions of the line which were no longer valid. This commit has the client send back the version of the line their completions apply to, ensuring that `console.lua` displays the correct completions. --- player/javascript/defaults.js | 1 + player/lua/console.lua | 6 +----- player/lua/input.lua | 1 + 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/player/javascript/defaults.js b/player/javascript/defaults.js index 0d1c520ed1..a5a383a506 100644 --- a/player/javascript/defaults.js +++ b/player/javascript/defaults.js @@ -678,6 +678,7 @@ function register_event_handler(t) { mp.commandv("script-message-to", "console", "complete", JSON.stringify({ client_name: mp.script_name, handler_id: handler_id, + original_line: args[0], list: completions, start_pos: completion_pos, append: completion_append || "", diff --git a/player/lua/console.lua b/player/lua/console.lua index e07e407961..df2085def8 100644 --- a/player/lua/console.lua +++ b/player/lua/console.lua @@ -102,8 +102,6 @@ local completion_buffer = {} local selected_completion_index local completion_pos local completion_append -local completion_old_line -local completion_old_cursor local autoselect_completion local has_completions @@ -1480,8 +1478,6 @@ end -- Show autocompletions. complete = function () - completion_old_line = line - completion_old_cursor = cursor mp.commandv("script-message-to", input_caller, input_caller_handler, "complete", utils.format_json({line:sub(1, cursor - 1)})) render() @@ -1802,7 +1798,7 @@ mp.register_script_message("complete", function (message) message = utils.parse_json(message) if message.client_name ~= input_caller or message.handler_id ~= input_caller_handler - or line ~= completion_old_line or cursor ~= completion_old_cursor then + or line:sub(1, cursor - 1) ~= message.original_line then return end diff --git a/player/lua/input.lua b/player/lua/input.lua index eb93fbb7b5..c99422a184 100644 --- a/player/lua/input.lua +++ b/player/lua/input.lua @@ -60,6 +60,7 @@ local function register_event_handler(t) mp.commandv("script-message-to", "console", "complete", utils.format_json({ client_name = mp.get_script_name(), handler_id = handler_id, + original_line = args[1], list = completions, start_pos = completion_pos, append = completion_append or "",