[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

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

Nit Khair

10/13/2008 6:02:00 PM

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.
--
Posted via http://www.ruby-....

4 Answers

Nit Khair

10/13/2008 7:14:00 PM

0

Nit Khair 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.
--
Posted via http://www.ruby-....

Andrew Lee

10/13/2008 10:25:00 PM

0

Nit Khair wrote:
> Nit Khair 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.


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

Ron Fox

10/14/2008 11:23:00 AM

0

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

Ron.
Nit Khair wrote:
> 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.


--
Ron Fox
NSCL
Michigan State University
East Lansing, MI 48824-1321

Nit Khair

10/14/2008 11:40:00 AM

0

Ron Fox wrote:
> probbably best to set the terminal to raw mode if this is unix as I
> suspect. http://www.rubyquiz.com/...
> 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.
------
--
Posted via http://www.ruby-....