Sha256: 9738f29370642e03183afaeb82cd948a6ce386adcca66bc4456095e3381c62b8

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

module Redwood

class TextMode < ScrollMode
  attr_reader :text
  register_keymap do |k|
    k.add :save_to_disk, "Save to disk", 's'
  end

  def initialize text=""
    @text = text
    update_lines
    buffer.mark_dirty if buffer
    super()
  end
  
  def save_to_disk
    fn = BufferManager.ask_for_filename :filename, "Save to file: "
    save_to_file(fn) { |f| f.puts text } if fn
  end

  def text= t
    @text = t
    update_lines
    if buffer
      ensure_mode_validity
      buffer.mark_dirty 
    end
  end

  def << line
    @lines = [0] if @text.empty?
    @text << line
    @lines << @text.length
    if buffer
      ensure_mode_validity
      buffer.mark_dirty 
    end
  end

  def lines
    @lines.length - 1
  end

  def [] i
    return nil unless i < @lines.length
    @text[@lines[i] ... (i + 1 < @lines.length ? @lines[i + 1] - 1 : @text.length)].normalize_whitespace
#    (@lines[i] ... (i + 1 < @lines.length ? @lines[i + 1] - 1 : @text.length)).inspect
  end

private

  def update_lines
    pos = @text.find_all_positions("\n")
    pos.push @text.length unless pos.last == @text.length - 1
    @lines = [0] + pos.map { |x| x + 1 }
  end
end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sup-0.3 lib/sup/modes/text-mode.rb