def delete_line line=real_index()
      #return -1 unless @editable
      if !$multiplier || $multiplier == 0 
        @delete_buffer = @list.delete_at line
      else
        @delete_buffer = @list.slice!(line, $multiplier)
      end
      @curpos ||= 0 # rlist has no such var
      $multiplier = 0
      #add_to_kill_ring @delete_buffer
      @buffer = @list[@current_index]
      if @buffer.nil?
        up
        setrowcol @row + 1, nil # @form.col
      end
      # warning: delete buffer can now be an array
      #fire_handler :CHANGE, InputDataEvent.new(@curpos,@curpos+@delete_buffer.length, self, :DELETE_LINE, line, @delete_buffer)     #  2008-12-24 18:34 
      set_modified 
      #@widget_scrolled = true
      @repaint_required = true
    end
def delete_line line=real_index()
      #return -1 unless @editable
      if !$multiplier || $multiplier == 0 
        @delete_buffer = @list.delete_at line
      else
        @delete_buffer = @list.slice!(line, $multiplier)
      end
      @curpos ||= 0 # rlist has no such var
      $multiplier = 0
      #add_to_kill_ring @delete_buffer
      @buffer = @list[@current_index]
      if @buffer.nil?
        up
        setrowcol @row + 1, nil # @form.col
      end
      # warning: delete buffer can now be an array
      #fire_handler :CHANGE, InputDataEvent.new(@curpos,@curpos+@delete_buffer.length, self, :DELETE_LINE, line, @delete_buffer)     #  2008-12-24 18:34 
      set_modified 
      #@widget_scrolled = true
      @repaint_required = true
    end
delete current line or lines
 Should be using listeditable except for _header_adjustment
 NOTE: user has to map this to some key such as 'dd'
  tw.bind_key([?\d,?\d]) { tw.delete_line }