def << data
      # if width if nil, either set it, or add this to a container that sets it before calling this method
      _maxlen = @maxlen || @width - @internal_width
      if data.length > _maxlen
        #$log.debug "wrapped append for #{data}"
        data = wrap_text data
        #$log.debug "after wrap text for :#{data}"
        data = data.split("\n")
        # 2009-01-01 22:24 the \n was needed so we would put a space at time of writing.
        # we need a soft return so a space can be added when pushing down.
        # commented off 2008-12-28 21:59 
        #data.each {|line| @list << line+"\n"}
        data.each {|line| @list << line}
         @list[-1] << "\r" #XXXX
      else
        #$log.debug "normal append for #{data}"
        data << "\r" if data[-1,1] != "\r" #XXXX
        @list << data
      end
      set_modified  # added 2009-03-07 18:29 
      goto_end if @auto_scroll 
      self
    end
def << data
      # if width if nil, either set it, or add this to a container that sets it before calling this method
      _maxlen = @maxlen || @width - @internal_width
      if data.length > _maxlen
        #$log.debug "wrapped append for #{data}"
        data = wrap_text data
        #$log.debug "after wrap text for :#{data}"
        data = data.split("\n")
        # 2009-01-01 22:24 the \n was needed so we would put a space at time of writing.
        # we need a soft return so a space can be added when pushing down.
        # commented off 2008-12-28 21:59 
        #data.each {|line| @list << line+"\n"}
        data.each {|line| @list << line}
         @list[-1] << "\r" #XXXX
      else
        #$log.debug "normal append for #{data}"
        data << "\r" if data[-1,1] != "\r" #XXXX
        @list << data
      end
      set_modified  # added 2009-03-07 18:29 
      goto_end if @auto_scroll 
      self
    end
wraps line sent in if longer than _maxlen
 Typically a line is sent in. We wrap and put a hard return at end.