X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=lib%2Fsup%2Ftextfield.rb;h=479c609e146913c4e1391ef13740ef50a779f8da;hb=95e1f7e3fb05db7f313c49e82040eb6b626fb10d;hp=8fafa2ac24aa5d17e1579db49c53494c045e31e9;hpb=464b1aeb0148fd15751e1103434a8f96628fe98c;p=sup diff --git a/lib/sup/textfield.rb b/lib/sup/textfield.rb index 8fafa2a..479c609 100644 --- a/lib/sup/textfield.rb +++ b/lib/sup/textfield.rb @@ -1,5 +1,3 @@ -require 'curses' - module Redwood ## a fully-functional text field supporting completions, expansions, @@ -18,9 +16,7 @@ module Redwood ## in sup, completion support is implemented through BufferManager#ask ## and CompletionMode. class TextField - def initialize window, y, x, width - @w, @x, @y = window, x, y - @width = width + def initialize @i = nil @history = [] @@ -33,13 +29,13 @@ class TextField def value; @value || get_cursed_value end - def activate question, default=nil, &block + def activate window, y, x, width, question, default=nil, &block + @w, @y, @x, @width = window, y, x, width @question = question @completion_block = block - @field = Ncurses::Form.new_field 1, @width - question.length, - @y, @x + question.length, 0, 0 + @field = Ncurses::Form.new_field 1, @width - question.length, @y, @x + question.length, 0, 0 @form = Ncurses::Form.new_form [@field] - @value = nil + @value = default Ncurses::Form.post_form @form set_cursed_value default if default end @@ -49,7 +45,7 @@ class TextField @w.mvaddstr @y, 0, @question Ncurses.curs_set 1 Ncurses::Form.form_driver @form, Ncurses::Form::REQ_END_FIELD - Ncurses::Form.form_driver @form, Ncurses::Form::REQ_NEXT_CHAR if @value && @value =~ / $/ # fucking RETARDED!!!! + Ncurses::Form.form_driver @form, Ncurses::Form::REQ_NEXT_CHAR if @value && @value =~ / $/ # fucking RETARDED end def deactivate @@ -66,7 +62,7 @@ class TextField case c when Ncurses::KEY_ENTER # submit! @value = get_cursed_value - @history.push @value + @history.push @value unless @value =~ /^\s*$/ return false when Ncurses::KEY_CANCEL # cancel @value = nil @@ -102,7 +98,9 @@ class TextField Ncurses::Form::REQ_PREV_CHAR when Ncurses::KEY_RIGHT Ncurses::Form::REQ_NEXT_CHAR - when Ncurses::KEY_BACKSPACE + when Ncurses::KEY_DC + Ncurses::Form::REQ_DEL_CHAR + when Ncurses::KEY_BACKSPACE, 127 # 127 is also a backspace keysym Ncurses::Form::REQ_DEL_PREV when 1 #ctrl-a Ncurses::Form::REQ_BEG_FIELD @@ -110,23 +108,23 @@ class TextField Ncurses::Form::REQ_END_FIELD when 11 # ctrl-k Ncurses::Form::REQ_CLR_EOF - when Ncurses::KEY_UP - @i ||= @history.size - @history[@i] = get_cursed_value - @i = (@i - 1) % @history.size - @value = @history[@i] - set_cursed_value @value - when Ncurses::KEY_DOWN - @i ||= @history.size - @history[@i] = get_cursed_value - @i = (@i + 1) % @history.size - @value = @history[@i] - set_cursed_value @value + when Ncurses::KEY_UP, Ncurses::KEY_DOWN + unless @history.empty? + value = get_cursed_value + @i ||= @history.size + #Redwood::log "history before #{@history.inspect}" + @history[@i] = value #unless value =~ /^\s*$/ + @i = (@i + (c == Ncurses::KEY_UP ? -1 : 1)) % @history.size + @value = @history[@i] + #Redwood::log "history after #{@history.inspect}" + set_cursed_value @value + Ncurses::Form::REQ_END_FIELD + end else c end - Ncurses::Form.form_driver @form, d + Ncurses::Form.form_driver @form, d if d true end