feat: support ctrl+c dismissal in ask flow

This commit is contained in:
Erik Kotsiuba
2026-04-19 16:32:27 +02:00
parent 0386239f5e
commit fcd1f1bce5
7 changed files with 72 additions and 0 deletions
+5
View File
@@ -241,6 +241,11 @@ export function cancelFlow(state: AskState): AskState {
};
}
export function dismissFlow(state: AskState): AskState {
const nextState = cancelFlow(state);
return nextState.completed ? nextState : cancelFlow(nextState);
}
function saveInputValue(
state: AskState,
rawValue: string,
+10
View File
@@ -14,6 +14,7 @@ import {
applyNumberShortcut,
cancelFlow,
confirmCurrentSelection,
dismissFlow,
enterInputMode,
enterOptionNoteMode,
enterQuestionNoteMode,
@@ -117,6 +118,11 @@ function handleEditingCommand(
command: AskInputCommand,
data: string
) {
if (command.kind === "dismiss") {
commitNavigation(controller, dismissFlow(controller.state));
maybeFinish(controller);
return;
}
if (command.kind === "editMoveTab") {
controller.state = saveEditorAndMoveTab(controller, command.delta);
syncInputModeWithSelection(controller);
@@ -176,6 +182,10 @@ function handleNavigationCommand(
applyNumberShortcut(controller.state, command.digit)
);
return;
case "dismiss":
commitNavigation(controller, dismissFlow(controller.state));
maybeFinish(controller);
return;
case "ignore":
case "editMoveTab":
case "editMoveOption":
+5
View File
@@ -11,6 +11,7 @@ export type AskInputCommand =
| { kind: "openOptionNote" }
| { kind: "confirm" }
| { kind: "cancel" }
| { kind: "dismiss" }
| { kind: "numberShortcut"; digit: number }
| { kind: "editMoveTab"; delta: 1 | -1 }
| { kind: "editMoveOption"; delta: 1 | -1 }
@@ -22,6 +23,10 @@ export function getInputCommand(
state: AskState,
data: string
): AskInputCommand {
if (matchesKey(data, Key.ctrl("c"))) {
return { kind: "dismiss" };
}
if (state.view.kind === "input" || state.view.kind === "note") {
return getEditingInputCommand(data);
}