diff --git a/src/packages/archive-view/lib/archive-view.coffee b/src/packages/archive-view/lib/archive-view.coffee index efe710702..23bb1709a 100644 --- a/src/packages/archive-view/lib/archive-view.coffee +++ b/src/packages/archive-view/lib/archive-view.coffee @@ -37,6 +37,13 @@ class ArchiveView extends ScrollView @tree.append(new FileView(@path, entry)) @tree.show() + @tree.find('.file').view()?.select() + + focusSelectedFile: -> + @tree.find('.selected').view()?.focus() + + focus: -> + @focusSelectedFile() setModel: (editSession) -> @setPath(editSession?.getPath()) diff --git a/src/packages/archive-view/lib/file-view.coffee b/src/packages/archive-view/lib/file-view.coffee index 00d290e00..770e5258f 100644 --- a/src/packages/archive-view/lib/file-view.coffee +++ b/src/packages/archive-view/lib/file-view.coffee @@ -1,4 +1,5 @@ {View} = require 'space-pen' +$ = require 'jquery' fsUtils = require 'fs-utils' path = require 'path' temp = require 'temp' @@ -7,26 +8,51 @@ archive = require 'ls-archive' module.exports = class FileView extends View @content: (archivePath, entry) -> - @div class: 'entry', => + @div class: 'entry', tabindex: -1, => @span entry.getName(), class: 'file', outlet: 'name' - initialize: (archivePath, entry) -> - @name.addClass('symlink') if entry.isSymbolicLink() + initialize: (@archivePath, @entry) -> + @name.addClass('symlink') if @entry.isSymbolicLink() @on 'click', => - @closest('.archive-view').find('.selected').removeClass('selected') - @name.addClass('selected') - archive.readFile archivePath, entry.getPath(), (error, contents) -> - if error? - console.error("Error reading: #{entry.getPath()} from #{archivePath}", error.stack ? error) - else - temp.mkdir 'atom-', (error, tempDirPath) -> - if error? - console.error("Error creating temp directory: #{tempDirPath}", error.stack ? error) - else - tempFilePath = path.join(tempDirPath, path.basename(archivePath), entry.getName()) - fsUtils.writeAsync tempFilePath, contents, (error) -> - if error? - console.error("Error writing to #{tempFilePath}", error.stack ? error) - else - rootView.open(tempFilePath) + @select() + @openFile() + + @on 'core:confirm', => + @openFile() if @isSelected() + + @on 'core:move-down', => + if @isSelected() + files = @closest('.archive-view').find('.file') + $(files[files.index(@name) + 1]).view()?.select() + + @on 'core:move-up', => + if @isSelected() + files = @closest('.archive-view').find('.file') + $(files[files.index(@name) - 1]).view()?.select() + + isSelected: -> @name.hasClass('selected') + + logError: (message, error) -> + console.error(message, error.stack ? error) + + openFile: -> + archive.readFile @archivePath, @entry.getPath(), (error, contents) => + if error? + @logError("Error reading: #{@entry.getPath()} from #{@archivePath}", error) + else + temp.mkdir 'atom-', (error, tempDirPath) => + if error? + @logError("Error creating temp directory: #{tempDirPath}", error) + else + tempFilePath = path.join(tempDirPath, path.basename(@archivePath), @entry.getName()) + fsUtils.writeAsync tempFilePath, contents, (error) -> + if error? + @logError("Error writing to #{tempFilePath}", error) + else + rootView.open(tempFilePath) + + select: -> + @closest('.archive-view').find('.selected').view()?.name.removeClass('selected') + @name.addClass('selected') + @focus()