Module: Canopus::Workspace::FilePreviewable
- Defined in:
- lib/canopus/workspace/file_previewable.rb
Instance Method Summary collapse
-
#file_preview(path) ⇒ Object
A preview never creates a tab, loads a complete file, or changes selections.
Instance Method Details
#file_preview(path) ⇒ Object
A preview never creates a tab, loads a complete file, or changes selections.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/canopus/workspace/file_previewable.rb', line 6 def file_preview(path) absolute = canonical_path(path) buffer = @buffers[absolute] stamp = buffer ? buffer.version : [File.mtime(absolute), File.size(absolute)] key = [absolute, stamp] @file_previews ||= {} return @file_previews[key] if @file_previews.key?(key) source = if buffer ending = [16_384, buffer.rope.bytesize].min begin buffer.rope.byteslice(0, ending).to_s rescue RangeError ending -= 1 retry end else File.binread(absolute, 16_384).force_encoding(Encoding::UTF_8).scrub end rows = source.include?("\0") ? ["Binary / UTF-16 preview unavailable"] : source.lines.first(40).map { |line| line.chomp[0, 300] } @file_previews.shift if @file_previews.length >= 16 @file_previews[key] = rows.freeze rescue SystemCallError, Error => error ["Preview unavailable: #{error.}"] end |