useExitOnCtrlCD.ts
1 import { useInput } from 'ink' 2 import { useDoublePress } from './useDoublePress.js' 3 import { useState } from 'react' 4 5 type ExitState = { 6 pending: boolean 7 keyName: 'Ctrl-C' | 'Ctrl-D' | null 8 } 9 10 export function useExitOnCtrlCD(onExit: () => void): ExitState { 11 const [exitState, setExitState] = useState<ExitState>({ 12 pending: false, 13 keyName: null, 14 }) 15 16 const handleCtrlC = useDoublePress( 17 pending => setExitState({ pending, keyName: 'Ctrl-C' }), 18 onExit, 19 ) 20 const handleCtrlD = useDoublePress( 21 pending => setExitState({ pending, keyName: 'Ctrl-D' }), 22 onExit, 23 ) 24 25 useInput((input, key) => { 26 if (key.ctrl && input === 'c') handleCtrlC() 27 if (key.ctrl && input === 'd') handleCtrlD() 28 }) 29 30 return exitState 31 }