diff --git a/spec/pane-spec.coffee b/spec/pane-spec.coffee index 7d6410048..ba2f02802 100644 --- a/spec/pane-spec.coffee +++ b/spec/pane-spec.coffee @@ -414,7 +414,7 @@ describe "Pane", -> pane.getActiveItem().path = __filename pane.getActiveItem().saveAs = jasmine.createSpy("saveAs") pane.saveActiveItemAs() - expect(atom.showSaveDialogSync).toHaveBeenCalledWith(__filename) + expect(atom.showSaveDialogSync).toHaveBeenCalledWith(defaultPath: __filename) expect(pane.getActiveItem().saveAs).toHaveBeenCalledWith('/selected/path') describe "when the current item does not have a saveAs method", -> diff --git a/src/atom.coffee b/src/atom.coffee index 47014ff98..316c51e29 100644 --- a/src/atom.coffee +++ b/src/atom.coffee @@ -787,11 +787,16 @@ class Atom extends Model showSaveDialog: (callback) -> callback(showSaveDialogSync()) - showSaveDialogSync: (defaultPath) -> - defaultPath ?= @project?.getPaths()[0] + showSaveDialogSync: (options={}) -> + if _.isString(options) + options = defaultPath: options + else + options = _.clone(options) currentWindow = @getCurrentWindow() dialog = remote.require('dialog') - dialog.showSaveDialog currentWindow, {title: 'Save File', defaultPath} + options.title ?= 'Save File' + options.defaultPath ?= @project?.getPaths()[0] + dialog.showSaveDialog currentWindow, options saveSync: -> if storageKey = @constructor.getStateKey(@project?.getPaths(), @mode) diff --git a/src/pane.coffee b/src/pane.coffee index 38c8d9201..477239bdd 100644 --- a/src/pane.coffee +++ b/src/pane.coffee @@ -492,8 +492,9 @@ class Pane extends Model saveItemAs: (item, nextAction) -> return unless item?.saveAs? - itemPath = item.getPath?() - newItemPath = atom.showSaveDialogSync(itemPath) + saveOptions = item.getSaveDialogOptions?() ? {} + saveOptions.defaultPath ?= item.getPath() + newItemPath = atom.showSaveDialogSync(saveOptions) if newItemPath try item.saveAs(newItemPath) diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 977b94ed1..20ef23264 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -593,6 +593,16 @@ class TextEditor extends Model # Essential: Returns the {String} path of this editor's text buffer. getPath: -> @buffer.getPath() + # Private: Return [save options](http://electron.atom.io/docs/v0.27.0/api/di + # alog/#dialog.showsavedialog(%5Bbrowserwindow%5D,-%5Boptions%5D,-%5Bcallbac + # k%5D)) to be used when displaying the save dialog. + # + # Default empty options are returned now. In the future this would be the + # place to start implementing things like: https://discuss.atom.io/t + # /request-saving- file-with-correct-extension/17521 + getSaveDialogOptions: -> + {} + # Extended: Returns the {String} character set encoding of this editor's text # buffer. getEncoding: -> @buffer.getEncoding()