()
| 17 | export const FOCUS_OUT = '\x1b[O'; |
| 18 | |
| 19 | export const useFocus = () => { |
| 20 | const { stdin } = useStdin(); |
| 21 | const { stdout } = useStdout(); |
| 22 | const [isFocused, setIsFocused] = useState(true); |
| 23 | |
| 24 | useEffect(() => { |
| 25 | const handleData = (data: Buffer) => { |
| 26 | const sequence = data.toString(); |
| 27 | const lastFocusIn = sequence.lastIndexOf(FOCUS_IN); |
| 28 | const lastFocusOut = sequence.lastIndexOf(FOCUS_OUT); |
| 29 | |
| 30 | if (lastFocusIn > lastFocusOut) { |
| 31 | setIsFocused(true); |
| 32 | } else if (lastFocusOut > lastFocusIn) { |
| 33 | setIsFocused(false); |
| 34 | } |
| 35 | }; |
| 36 | |
| 37 | // Enable focus reporting |
| 38 | stdout?.write(ENABLE_FOCUS_REPORTING); |
| 39 | stdin?.on('data', handleData); |
| 40 | |
| 41 | return () => { |
| 42 | // Disable focus reporting on cleanup |
| 43 | stdout?.write(DISABLE_FOCUS_REPORTING); |
| 44 | stdin?.removeListener('data', handleData); |
| 45 | }; |
| 46 | }, [stdin, stdout]); |
| 47 | |
| 48 | return isFocused; |
| 49 | }; |
no outgoing calls
no test coverage detected