diff --git a/src/vs/workbench/contrib/backup/common/backupModelTracker.ts b/src/vs/workbench/contrib/backup/common/backupModelTracker.ts index e7dee7bcfbdf1adea9d430c0e492ea960d36e65c..bbc393aff32c1462aa2ee13c53f8fb3dc1cb855a 100644 --- a/src/vs/workbench/contrib/backup/common/backupModelTracker.ts +++ b/src/vs/workbench/contrib/backup/common/backupModelTracker.ts @@ -37,6 +37,7 @@ export class BackupModelTracker extends Disposable implements IWorkbenchContribu this._register(this.textFileService.models.onModelDisposed(e => this.discardBackup(e))); // Listen for untitled model changes + this._register(this.untitledTextEditorService.onDidCreate(e => this.onUntitledModelChanged(e))); this._register(this.untitledTextEditorService.onDidChangeContent(e => this.onUntitledModelChanged(e))); this._register(this.untitledTextEditorService.onDidDisposeModel(e => this.discardBackup(e))); diff --git a/src/vs/workbench/services/untitled/common/untitledTextEditorService.ts b/src/vs/workbench/services/untitled/common/untitledTextEditorService.ts index 32af9851cea27c6f929739199d1561d61e312ebe..7d8d31497aeada98c13028ad1314b09a22951d87 100644 --- a/src/vs/workbench/services/untitled/common/untitledTextEditorService.ts +++ b/src/vs/workbench/services/untitled/common/untitledTextEditorService.ts @@ -31,6 +31,11 @@ export interface IUntitledTextEditorService { _serviceBrand: undefined; + /** + * Events for when untitled text editors are created. + */ + readonly onDidCreate: Event; + /** * Events for when untitled text editors content changes (e.g. any keystroke). */ @@ -117,6 +122,9 @@ export class UntitledTextEditorService extends Disposable implements IUntitledTe private mapResourceToInput = new ResourceMap(); private mapResourceToAssociatedFilePath = new ResourceMap(); + private readonly _onDidCreate = this._register(new Emitter()); + readonly onDidCreate = this._onDidCreate.event; + private readonly _onDidChangeContent = this._register(new Emitter()); readonly onDidChangeContent = this._onDidChangeContent.event; @@ -263,6 +271,9 @@ export class UntitledTextEditorService extends Disposable implements IUntitledTe // Add to cache this.mapResourceToInput.set(untitledResource, input); + // Signal new untitled as event + this._onDidCreate.fire(untitledResource); + return input; } diff --git a/src/vs/workbench/test/common/editor/untitledTextEditor.test.ts b/src/vs/workbench/test/common/editor/untitledTextEditor.test.ts index f9f9f5eb20e329f904cd6f67cf18c745de715c7e..0233c240144dfc3ed1f91b1b7199174c861b8434 100644 --- a/src/vs/workbench/test/common/editor/untitledTextEditor.test.ts +++ b/src/vs/workbench/test/common/editor/untitledTextEditor.test.ts @@ -54,11 +54,20 @@ suite('Workbench untitled text editors', () => { assert.equal(service.getAll().length, 0); + let createdResources: URI[] = []; + const createListener = service.onDidCreate(resource => { + createdResources.push(resource); + }); + const input1 = service.createOrGet(); assert.equal(input1, service.createOrGet(input1.getResource())); assert.ok(service.exists(input1.getResource())); assert.ok(!service.exists(URI.file('testing'))); + assert.equal(createdResources.length, 1); + assert.equal(createdResources[0].toString(), input1.getResource()); + + createListener.dispose(); const input2 = service.createOrGet();