feat: support ctrl+c dismissal in ask flow
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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":
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user