From d3066f0e3b517b95f5e7f41d6471c69a7957fd92 Mon Sep 17 00:00:00 2001 From: Ian Olsen Date: Wed, 18 Jan 2017 16:36:41 -0800 Subject: [PATCH 1/3] Added option for closing deleted file tabs --- src/config-schema.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/config-schema.js b/src/config-schema.js index 1050fac9e..d13b14a1a 100644 --- a/src/config-schema.js +++ b/src/config-schema.js @@ -68,6 +68,12 @@ const configSchema = { default: true, description: 'Trigger the system\'s beep sound when certain actions cannot be executed or there are no results.' }, + closeDeletedFileTabs: { + type: 'boolean', + default: false, + title: 'Close Deleted File Tabs', + description: 'Close corresponding editors when a file is deleted outside Atom.' + }, destroyEmptyPanes: { type: 'boolean', default: true, From dcbd839059b3caeed5e1aa43fdf3dcf6f1ba95a8 Mon Sep 17 00:00:00 2001 From: Ian Olsen Date: Thu, 19 Jan 2017 14:11:41 -0800 Subject: [PATCH 2/3] Tell text-buffer to ask about destroying buffers for deleted files --- src/project.coffee | 5 +++++ src/text-editor-element.coffee | 4 +++- src/text-editor.coffee | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/project.coffee b/src/project.coffee index 522fbfbc7..0dbbecda5 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -360,9 +360,13 @@ class Project extends Model else @buildBuffer(absoluteFilePath) + shouldDestroyBufferOnFileDelete: -> + atom.config.get('core.closeDeletedFileTabs') + # Still needed when deserializing a tokenized buffer buildBufferSync: (absoluteFilePath) -> buffer = new TextBuffer({filePath: absoluteFilePath}) + buffer.setConfigCallbacks(@shouldDestroyBufferOnFileDelete) if buffer.setConfigCallbacks? @addBuffer(buffer) buffer.loadSync() buffer @@ -375,6 +379,7 @@ class Project extends Model # Returns a {Promise} that resolves to the {TextBuffer}. buildBuffer: (absoluteFilePath) -> buffer = new TextBuffer({filePath: absoluteFilePath}) + buffer.setConfigCallbacks(@shouldDestroyBufferOnFileDelete) if buffer.setConfigCallbacks? @addBuffer(buffer) buffer.load() .then((buffer) -> buffer) diff --git a/src/text-editor-element.coffee b/src/text-editor-element.coffee index 8c9792916..60286015b 100644 --- a/src/text-editor-element.coffee +++ b/src/text-editor-element.coffee @@ -107,8 +107,10 @@ class TextEditorElement extends HTMLElement @model ? @buildModel() buildModel: -> + newBuffer = new TextBuffer(@textContent) + newBuffer.setConfigCallbacks(-> atom.config.get('core.closeDeletedFileTabs')) if newBuffer.setConfigCallbacks? @setModel(@workspace.buildTextEditor( - buffer: new TextBuffer(@textContent) + buffer: newBuffer softWrapped: false tabLength: 2 softTabs: true diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 821322e22..5d55679d9 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -160,6 +160,7 @@ class TextEditor extends Model @preferredLineLength ?= 80 @buffer ?= new TextBuffer + @buffer.setConfigCallbacks(-> atom.config.get('core.closeDeletedFileTabs')) if @buffer.setConfigCallbacks? @tokenizedBuffer ?= new TokenizedBuffer({ grammar, tabLength, @buffer, @largeFileMode, @assert }) From 22a881323c37d179542616629a91bd566c12262a Mon Sep 17 00:00:00 2001 From: Ian Olsen Date: Fri, 20 Jan 2017 13:52:49 -0800 Subject: [PATCH 3/3] Move shouldDestroyBufferOnFileDelete callback to TextBuffer constructor Also add setting the callback to buffers created via deserialization. --- src/project.coffee | 13 +++++++++---- src/text-editor-element.coffee | 7 ++++--- src/text-editor.coffee | 4 ++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/project.coffee b/src/project.coffee index 0dbbecda5..272e69c03 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -62,6 +62,9 @@ class Project extends Model fs.closeSync(fs.openSync(bufferState.filePath, 'r')) catch error return unless error.code is 'ENOENT' + unless bufferState.shouldDestroyOnFileDelete? + bufferState.shouldDestroyOnFileDelete = + -> atom.config.get('core.closeDeletedFileTabs') TextBuffer.deserialize(bufferState) @subscribeToBuffer(buffer) for buffer in @buffers @@ -365,8 +368,9 @@ class Project extends Model # Still needed when deserializing a tokenized buffer buildBufferSync: (absoluteFilePath) -> - buffer = new TextBuffer({filePath: absoluteFilePath}) - buffer.setConfigCallbacks(@shouldDestroyBufferOnFileDelete) if buffer.setConfigCallbacks? + buffer = new TextBuffer({ + filePath: absoluteFilePath + shouldDestroyOnFileDelete: @shouldDestroyBufferOnFileDelete}) @addBuffer(buffer) buffer.loadSync() buffer @@ -378,8 +382,9 @@ class Project extends Model # # Returns a {Promise} that resolves to the {TextBuffer}. buildBuffer: (absoluteFilePath) -> - buffer = new TextBuffer({filePath: absoluteFilePath}) - buffer.setConfigCallbacks(@shouldDestroyBufferOnFileDelete) if buffer.setConfigCallbacks? + buffer = new TextBuffer({ + filePath: absoluteFilePath + shouldDestroyOnFileDelete: @shouldDestroyBufferOnFileDelete}) @addBuffer(buffer) buffer.load() .then((buffer) -> buffer) diff --git a/src/text-editor-element.coffee b/src/text-editor-element.coffee index 60286015b..26e3bae12 100644 --- a/src/text-editor-element.coffee +++ b/src/text-editor-element.coffee @@ -107,10 +107,11 @@ class TextEditorElement extends HTMLElement @model ? @buildModel() buildModel: -> - newBuffer = new TextBuffer(@textContent) - newBuffer.setConfigCallbacks(-> atom.config.get('core.closeDeletedFileTabs')) if newBuffer.setConfigCallbacks? @setModel(@workspace.buildTextEditor( - buffer: newBuffer + buffer: new TextBuffer({ + text: @textContent + shouldDestroyOnFileDelete: + -> atom.config.get('core.closeDeletedFileTabs')}) softWrapped: false tabLength: 2 softTabs: true diff --git a/src/text-editor.coffee b/src/text-editor.coffee index 5d55679d9..bc04c78de 100644 --- a/src/text-editor.coffee +++ b/src/text-editor.coffee @@ -159,8 +159,8 @@ class TextEditor extends Model @softWrapAtPreferredLineLength ?= false @preferredLineLength ?= 80 - @buffer ?= new TextBuffer - @buffer.setConfigCallbacks(-> atom.config.get('core.closeDeletedFileTabs')) if @buffer.setConfigCallbacks? + @buffer ?= new TextBuffer({shouldDestroyOnFileDelete: -> + atom.config.get('core.closeDeletedFileTabs')}) @tokenizedBuffer ?= new TokenizedBuffer({ grammar, tabLength, @buffer, @largeFileMode, @assert })