Unable to trap C-z, C-y, C-s and C-q


#1

I need to trap ^Y, ^Z, ^S, ^Q etc in my app. Have googled a lot but
unable to find anything.

Finally, I wrote a program and trapped all the signals.

  1. Both C-z and C-y are trapped by SIGTSTP, but there is no key in
    getch() that they seem to trigger. Regardless of whether I use “SIG_IGN”
    or print, my curses program aborts.

  2. I am still not getting C-s and C-q. They are not caught by any
    signal.

My code inside a ncurses program is like this:

%w[ TSTP CONT ABRT HUP STOP PIPE IO IOT CHLD CLD ILL INFO QUIT SYS TRAP
TTOU URG USR1 USR2 ].each { | alrm |
#Signal.trap(“SIG#{alrm}”) { stdscr.mvprintw(17, 2, “%-40s” % "#{alrm}
");

stdscr.refresh; } Signal.trap(“SIG#{alrm}”) { “SIG_IGN” }

}

The commented line prints TSTP for both C-y and c-z and exits.
The second exits.

Its not a terminal setting since I use Vim and alpine and they use these
keys.


#2

Nit K. wrote:

I need to trap ^Y, ^Z, ^S, ^Q etc in my app. Have googled a lot but
unable to find anything.

I finally found a workaround.
On unix prompt did:

stty dsusp undef
stty susp undef

Now my program catches c-y and c-z. However, is there are pure ruby way
of doing this. googling reveals examples where “system stty …” is
being used.


#3

Nit K. wrote:

Now my program catches c-y and c-z. However, is there are pure ruby way
of doing this. googling reveals examples where “system stty …” is
being used.

You can’t catch SIGKILL or SIGSTOP … has nothing to do with Ruby.


#4

probbably best to set the terminal to raw mode if this is unix as I
suspect. http://www.rubyquiz.com/quiz5.html
shows an example of this. Search for the read_char method or just
for the string ‘raw’.

Ron.


#5

Ron F. wrote:

probbably best to set the terminal to raw mode if this is unix as I
suspect. http://www.rubyquiz.com/quiz5.html
shows an example of this. Search for the read_char method or just
for the string ‘raw’.

Ron.

Thanks to your tip, I just checked curses.raw(), and there it is !!!
Just what I needed.

curses.raw()
Enter raw mode. In raw mode, normal line buffering and processing of
interrupt, quit, suspend, and flow control keys are turned off;
characters are presented to curses input functions one by one.