X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=lib%2Fsup%2Fmodes%2Ftext-mode.rb;h=273c02850f9cbc331d51dfb62a00ca05fbe9703d;hb=2f4d892aaa51da20df9ebaaea24401e71d826321;hp=bc5be8c225292b7aa913788c9ddb9070d3ffd967;hpb=393c45b68ba6f62b892b8bebc6376866856ed433;p=sup diff --git a/lib/sup/modes/text-mode.rb b/lib/sup/modes/text-mode.rb index bc5be8c..273c028 100644 --- a/lib/sup/modes/text-mode.rb +++ b/lib/sup/modes/text-mode.rb @@ -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