Remove update-right-status defer hack, call PromptInputLine directly

The real bug was the invalid initial_value field (fixed previously),
not Enter bleed-through from InputSelector. The defer-via-status-tick
workaround left a gap (up to the status update interval) between the
InputSelector closing and the PromptInputLine actually capturing
keyboard input -- during that gap the underlying shell was visible
(the reported flash) and any keystrokes typed during it went to the
shell instead of the field. This is especially damaging for the
3-step SSH domain flow, where hitting the gap on any step submits an
empty line and the whole entry is silently cancelled without saving.
Calling perform_action synchronously, as before the call_after/defer
detour, removes the gap entirely.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-18 00:41:44 +09:00
parent 387c9d7397
commit 9c36a97dd2

View File

@@ -94,23 +94,7 @@ end)
-- ------------------------------------------------------------ -- ------------------------------------------------------------
local pane_start_times = {} local pane_start_times = {}
-- InputSelector 선택 콜백 안에서 바로 PromptInputLine을 열면, 선택을 확정한 Enter가
-- 새 입력창에도 흘러들어가 즉시 닫혀버린다 (wezterm.time.call_after가 없는 버전에서는
-- 그 호출 자체가 에러로 죽어서 아예 아무것도 안 뜨고 밑에 있던 셸이 그대로 보인다).
-- 어느 wezterm 버전에서도 이미 동작 중인 update-right-status 틱에 실행을 미뤄서 우회한다.
local pending_action = nil
local function defer(fn)
pending_action = fn
end
wezterm.on("update-right-status", function(window, pane) wezterm.on("update-right-status", function(window, pane)
if pending_action then
local fn = pending_action
pending_action = nil
fn(window, pane)
end
window:set_left_status(wezterm.format({ window:set_left_status(wezterm.format({
{ Background = { Color = "#89b4fa" } }, { Background = { Color = "#89b4fa" } },
{ Foreground = { Color = "#1e1e2e" } }, { Foreground = { Color = "#1e1e2e" } },
@@ -222,8 +206,7 @@ local function set_config_value(window, pane, key, value)
end end
local function prompt_config_value(window, pane, title, key, initial_value, quote_string) local function prompt_config_value(window, pane, title, key, initial_value, quote_string)
defer(function(inner_window, inner_pane) window:perform_action(
inner_window:perform_action(
act.PromptInputLine({ act.PromptInputLine({
description = title .. " (현재: " .. tostring(initial_value) .. ")", description = title .. " (현재: " .. tostring(initial_value) .. ")",
action = wezterm.action_callback(function(cb_window, cb_pane, line) action = wezterm.action_callback(function(cb_window, cb_pane, line)
@@ -234,9 +217,8 @@ local function prompt_config_value(window, pane, title, key, initial_value, quot
set_config_value(cb_window, cb_pane, key, value) set_config_value(cb_window, cb_pane, key, value)
end), end),
}), }),
inner_pane pane
) )
end)
end end
local function show_font_settings(window, pane) local function show_font_settings(window, pane)
@@ -303,8 +285,7 @@ local ssh_domain_steps = {
local function prompt_ssh_domain_step(window, pane, step_index, data) local function prompt_ssh_domain_step(window, pane, step_index, data)
local step = ssh_domain_steps[step_index] local step = ssh_domain_steps[step_index]
defer(function(inner_window, inner_pane) window:perform_action(
inner_window:perform_action(
act.PromptInputLine({ act.PromptInputLine({
description = step.title, description = step.title,
action = wezterm.action_callback(function(cb_window, cb_pane, line) action = wezterm.action_callback(function(cb_window, cb_pane, line)
@@ -322,9 +303,8 @@ local function prompt_ssh_domain_step(window, pane, step_index, data)
end end
end), end),
}), }),
inner_pane pane
) )
end)
end end
local function prompt_ssh_domain(window, pane) local function prompt_ssh_domain(window, pane)