From: William Morgan Date: Wed, 9 Sep 2009 14:03:08 +0000 (-0400) Subject: protect getch from ctrl-c's outside of the main event loop X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=8039b8594c5246338406b284ab9b2c4974b77937;hp=8903cdedc810b5570b5d2cfb35d60683782aa84a;p=sup protect getch from ctrl-c's outside of the main event loop The main event loop was interpreting ctrl-c's correctly, but other getch callers (like asking for input) were not. This change will treat ctrl-c as ctrl-g in those cases. --- diff --git a/bin/sup b/bin/sup index e72dba5..6a35cfd 100755 --- a/bin/sup +++ b/bin/sup @@ -210,7 +210,7 @@ begin until Redwood::exceptions.nonempty? || $die c = begin Ncurses.nonblocking_getch - rescue Interrupt => e + rescue Interrupt raise if BufferManager.ask_yes_or_no "Die ungracefully now?" BufferManager.draw_screen nil diff --git a/lib/sup/buffer.rb b/lib/sup/buffer.rb index d85090a..df5d23c 100644 --- a/lib/sup/buffer.rb +++ b/lib/sup/buffer.rb @@ -35,7 +35,14 @@ module Ncurses end end - module_function :rows, :cols, :curx, :nonblocking_getch, :mutex, :sync + ## pretends ctrl-c's are ctrl-g's + def safe_nonblocking_getch + nonblocking_getch + rescue Interrupt + KEY_CANCEL + end + + module_function :rows, :cols, :curx, :nonblocking_getch, :safe_nonblocking_getch, :mutex, :sync remove_const :KEY_ENTER remove_const :KEY_CANCEL @@ -383,7 +390,7 @@ EOS draw_screen until mode.done? - c = Ncurses.nonblocking_getch + c = Ncurses.safe_nonblocking_getch next unless c # getch timeout break if c == Ncurses::KEY_CANCEL begin @@ -559,7 +566,7 @@ EOS end while true - c = Ncurses.nonblocking_getch + c = Ncurses.safe_nonblocking_getch next unless c # getch timeout break unless tf.handle_input c # process keystroke @@ -612,7 +619,7 @@ EOS ret = nil done = false until done - key = Ncurses.nonblocking_getch or next + key = Ncurses.safe_nonblocking_getch or next if key == Ncurses::KEY_CANCEL done = true elsif accept.nil? || accept.empty? || accept.member?(key)