meant to be spawned via spawn_modal!
# File lib/sup/modes/file-browser-mode.rb, line 19 def initialize dir="." @dirs = [Pathname.new(dir).realpath] @done = false @value = nil regen_text super :skip_top_rows => RESERVED_ROWS end
# File lib/sup/modes/file-browser-mode.rb, line 29 def [] i; @text[i]; end
# File lib/sup/modes/file-browser-mode.rb, line 27 def cwd; @dirs.last end
# File lib/sup/modes/file-browser-mode.rb, line 28 def lines; @text.length; end
# File lib/sup/modes/file-browser-mode.rb, line 33 def back return if @dirs.size == 1 @dirs.pop reload end
# File lib/sup/modes/file-browser-mode.rb, line 77 def regen_text @files = begin cwd.entries.sort_by do |f| [f.directory? ? 0 : 1, f.basename.to_s] end rescue SystemCallError => e BufferManager.flash "Error: #{e.message}" [Pathname.new("."), Pathname.new("..")] end.map do |f| real_f = cwd + f name = f.basename.to_s + case when real_f.symlink? "@" when real_f.directory? "/" else "" end [name, real_f] end size_width = @files.max_of { |name, f| f.human_size.length } time_width = @files.max_of { |name, f| f.human_time.length } @text = ["#{cwd}:"] + @files.map do |name, f| sprintf "%#{time_width}s %#{size_width}s %s", f.human_time, f.human_size, name end end
# File lib/sup/modes/file-browser-mode.rb, line 39 def reload regen_text jump_to_start buffer.mark_dirty end
# File lib/sup/modes/file-browser-mode.rb, line 56 def select_file_or_follow_directory name, f = @files[curpos - RESERVED_ROWS] return unless f if f.directory? && f.to_s != "." if f.readable? @dirs.push f reload else BufferManager.flash "Permission denied - #{f.realpath}" end else begin @value = f.realpath.to_s @done = true rescue SystemCallError => e BufferManager.flash e.message end end end
# File lib/sup/modes/file-browser-mode.rb, line 45 def view name, f = @files[curpos - RESERVED_ROWS] return unless f && f.file? begin BufferManager.spawn f.to_s, TextMode.new(f.read.ascii) rescue SystemCallError => e BufferManager.flash e.message end end