]> git.cworth.org Git - sup/blobdiff - lib/sup/textfield.rb
bugfix: keystroke 'n' duplicated in scroll-mode
[sup] / lib / sup / textfield.rb
index 8fafa2ac24aa5d17e1579db49c53494c045e31e9..e569ea8fc4a106b790582dedc6a9b9e455c03f0a 100644 (file)
@@ -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,14 @@ 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
     @form = Ncurses::Form.new_form [@field]
-    @value = nil
+    @value = default
     Ncurses::Form.post_form @form
     set_cursed_value default if default
   end
@@ -66,7 +63,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
@@ -110,23 +107,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