X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=lib%2Fsup%2Fbuffer.rb;h=df5d23c455fbaeb9fa53a5d9d66305249d9d6f17;hb=8039b8594c5246338406b284ab9b2c4974b77937;hp=d85090a6db57eab56a8e230a6aeb8e3a925e6339;hpb=8903cdedc810b5570b5d2cfb35d60683782aa84a;p=sup 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)