php-school / cli-menu

🖥 Build beautiful PHP CLI menus. Simple yet Powerful. Expressive DSL.
http://www.phpschool.io
MIT License
1.94k stars 106 forks source link

How do I capture CTRL+C event? #278

Open temuri416 opened 11 months ago

temuri416 commented 11 months ago

You can exit the menu by pressing CTRL+C. But in that case the following code does not get called:

protected function tearDownTerminal() : void
{
    ...
    $this->terminal->enableCursor();
}

And as a result, there's no cursor in the shell.

How can I enable cursor if user presses CTRL+C?

AydinHassan commented 11 months ago

It's not possible currently. There was some work on it a long time ago but it was never finished: https://github.com/php-school/terminal/pull/12

senyahnoj commented 5 months ago

I am currently working around this issue by disabling Ctrl+C altogether. Here's my code in case it's helpful to anyone

$builder = new CliMenuBuilder();

// build the menu items, etc.

// Prevent Ctl+C doing anything so that we are not affected by losing
// the cursor https://github.com/php-school/cli-menu/issues/278
pcntl_signal(SIGINT, function ($signal) {
});

$builder->build()->open();

(PHP needs to be compiled with --enable-pcntl for this to work)