diff options
Diffstat (limited to 'interface/ncurses.rb')
-rw-r--r-- | interface/ncurses.rb | 110 |
1 files changed, 27 insertions, 83 deletions
diff --git a/interface/ncurses.rb b/interface/ncurses.rb index a383a570..fe208e53 100644 --- a/interface/ncurses.rb +++ b/interface/ncurses.rb @@ -19,13 +19,16 @@ module Interface '<down>' when ?\e '<esc>' +# keep spaces as they are, makes more sense # when ?\s # '<space>' - when ?\t + when Ncurses::KEY_BTAB + '<s-tab>' + when 9 '<tab>' - when 32 - ' ' - when 0..127 + when 1..26 # CTRL + ... + "<c-#{(key+96).chr}>" + when 32..127 key.chr else log(key) @@ -33,62 +36,14 @@ module Interface end end -# def key c#{{{ -# case c -# when 12 -# :redraw -# when ?\n -# :enter -# when ?\b, Ncurses::KEY_BACKSPACE -# :backspace -# when 32 -# :space -# when ?\t -# :tab -# when Ncurses::KEY_BTAB -# :TAB -# when ?\e -# :escape -# when 0..127 -# c -# when Ncurses::KEY_F1..Ncurses::KEY_F30 -# ('F' + (c-Ncurses::KEY_F1+1).to_s).to_sym -# when Ncurses::KEY_HOME -# :home -# when Ncurses::KEY_END -# :end -# when Ncurses::KEY_RESIZE -# :resize -# when Ncurses::KEY_DC -# :delete -# when Ncurses::KEY_ENTER -# ?\n -# when Ncurses::KEY_RIGHT -# :right -# when Ncurses::KEY_LEFT -# :left -# when Ncurses::KEY_UP -# :up -# when Ncurses::KEY_DOWN -# :down -# when Ncurses::KEY_NPAGE -# :pagedown -# when Ncurses::KEY_PPAGE -# :pageup -# when Ncurses::KEY_IC -# :insert -# else -## c -# :error -# end -# end#}}} - def self.included(this) @@window = Ncurses.initscr starti end + # (Re)Start the Interface def starti + @@running = true @@screen = Ncurses.stdscr @@screen.keypad(true) Ncurses.start_color @@ -96,17 +51,21 @@ module Interface Ncurses.noecho Ncurses.curs_set 0 - Ncurses.halfdelay(10000) + Ncurses.halfdelay(0) @@colortable = [] end + # Close the Interface def closei + @@running = false Ncurses.echo Ncurses.cbreak Ncurses.curs_set 1 Ncurses.endwin end + def running?() @@running end + def cleari Ncurses.mvaddstr(0, 0, ' ' * (lines * cols)) end @@ -116,7 +75,7 @@ module Interface end def set_title(x) - print "\e]2;#{x}\b" + print "\e]2;#{x}\007" end def lines @@ -151,48 +110,32 @@ module Interface end end - def color_at y, x=0, len=-1, fg=-1, bg=-1 + def color_at y, x=0, len=-1, fg=-1, bg=-1, attributes=0 if OPTIONS['color'] if y < 0 then y += Ncurses.LINES end - Ncurses.mvchgat(y, x, len, 0, get_color(fg, bg), nil) + Ncurses.mvchgat(y, x, len, attributes, get_color(fg, bg), nil) end end def color_bold_at y, x=0, len=-1, fg=-1, bg=-1 - if OPTIONS['color'] - if y < 0 then y += Ncurses.LINES end - Ncurses.mvchgat(y, x, len, Ncurses::A_BOLD, get_color(fg, bg), nil) - end + color_at(y, x, len, fg, bg, attributes = Ncurses::A_BOLD) end - def color_reverse_at y, x=0, len=-1, fg=-1, bg=-1 + def color_reverse_bold_at y, x=0, len=-1, fg=-1, bg=-1 if OPTIONS['color'] - if y < 0 then y += Ncurses.LINES end - Ncurses.mvchgat(y, x, len, Ncurses::A_REVERSE, get_color(fg, bg), nil) + color_at(y, x, len, fg, bg, Ncurses::A_REVERSE | Ncurses::A_BOLD) else - Ncurses.mvchgat(y, x, len, Ncurses::A_REVERSE, 0, nil) + Ncurses.mvchgat(y, x, len, Ncurses::A_REVERSE | Ncurses::A_BOLD, 0, nil) end end + alias color_bold_reverse_at color_reverse_bold_at -# runi(:command => String/Array, :wait=>false) -# runi('ä́', 'b', 'c') - def runi(hash, *args) - wait = false - if Array === hash - command = hash - elsif String === hash - command = [hash, *args] + def color_reverse_at y, x=0, len=-1, fg=-1, bg=-1 + if OPTIONS['color'] + color_at(y, x, len, fg, bg, Ncurses::A_REVERSE) else - command = hash[:command] or return false - wait = hash[:wait] if hash.has_key? :wait + Ncurses.mvchgat(y, x, len, Ncurses::A_REVERSE, 0, nil) end - - closei - - system(*command) - gets if wait - - starti end def get_color(fg, bg) @@ -214,6 +157,7 @@ module Interface Ncurses.attroff(Ncurses::A_BOLD) end end + def reverse(b = true) if b Ncurses.attron(Ncurses::A_REVERSE) |