Skip to main content
Module

x/ctrlc/mod.ts

Cross platform handling of Ctrl-C signals.
Latest
File
/** * Object that releases resources when "dispose" is invoked. */export interface Disposable { /** * Releases any resources held by the implementing object. */ dispose(): void;}
function fnExit() { Deno.exit();}
let disposed = false;
export function setHandler(onCtrlC: () => void = fnExit): Disposable { if (!Deno.isatty(Deno.stdin.rid)) { return { dispose: () => {}, }; }
Deno.stdin.setRaw(true); disposed = false;
function recursiveListen() { const data: Uint8Array = new Uint8Array(1); Deno.stdin.read(data).then(() => { if (disposed) return; if (data[0] === 0x03) { onCtrlC(); } recursiveListen(); }); } recursiveListen();
return { dispose: () => { disposed = true; Deno.stdin.setRaw(false); // pause }, };}