]> git.cworth.org Git - sup/blobdiff - lib/sup/modes/text-mode.rb
remove use of Object#tap
[sup] / lib / sup / modes / text-mode.rb
index bc5be8c225292b7aa913788c9ddb9070d3ffd967..273c02850f9cbc331d51dfb62a00ca05fbe9703d 100644 (file)
@@ -4,20 +4,37 @@ class TextMode < ScrollMode
   attr_reader :text
   register_keymap do |k|
     k.add :save_to_disk, "Save to disk", 's'
+    k.add :pipe, "Pipe to process", '|'
   end
 
-  def initialize text=""
-    @text = text.normalize_whitespace
+  def initialize text="", filename=nil
+    @text = text
+    @filename = filename
     update_lines
     buffer.mark_dirty if buffer
     super()
   end
   
   def save_to_disk
-    fn = BufferManager.ask_for_filename :filename, "Save to file: "
+    fn = BufferManager.ask_for_filename :filename, "Save to file: ", @filename
     save_to_file(fn) { |f| f.puts text } if fn
   end
 
+  def pipe
+    command = BufferManager.ask(:shell, "pipe command: ")
+    return if command.nil? || command.empty?
+
+    output = pipe_to_process(command) do |stream|
+      @text.each { |l| stream.puts l }
+    end
+
+    if output
+      BufferManager.spawn "Output of '#{command}'", TextMode.new(output)
+    else
+      BufferManager.flash "'#{command}' done!"
+    end
+  end
+
   def text= t
     @text = t
     update_lines
@@ -43,7 +60,7 @@ class TextMode < ScrollMode
 
   def [] i
     return nil unless i < @lines.length
-    @text[@lines[i] ... (i + 1 < @lines.length ? @lines[i + 1] - 1 : @text.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