@@ -59,8 +59,9 @@ export class FileEditorTracker extends Disposable implements IWorkbenchContribut
5959 // Update editors from disk changes
6060 this . _register ( this . fileService . onFileChanges ( e => this . onFileChanges ( e ) ) ) ;
6161
62- // Open editors from dirty text file models
63- this . _register ( this . textFileService . models . onModelsDirty ( e => this . onTextFilesDirty ( e ) ) ) ;
62+ // Ensure dirty text file models are always opened as editors
63+ this . _register ( this . textFileService . models . onModelsDirty ( e => this . ensureDirtyTextFilesAreOpened ( e ) ) ) ;
64+ this . _register ( this . textFileService . models . onModelsSaveError ( e => this . ensureDirtyTextFilesAreOpened ( e ) ) ) ;
6465
6566 // Out of workspace file watchers
6667 this . _register ( this . editorService . onDidVisibleEditorsChange ( ( ) => this . onDidVisibleEditorsChange ( ) ) ) ;
@@ -263,29 +264,19 @@ export class FileEditorTracker extends Disposable implements IWorkbenchContribut
263264
264265 //#endregion
265266
266- //#region Text File Dirty : Ensure every dirty text file is opened in an editor
267+ //#region Text File: Ensure every dirty text file is opened in an editor
267268
268- private onTextFilesDirty ( events : ReadonlyArray < TextFileModelChangeEvent > ) : void {
269-
270- // If files become dirty but are not opened, we open it in the background unless there are pending to be saved
271- this . doOpenDirtyResourcesInBackground ( distinct ( events . filter ( ( { resource } ) => {
272-
273- // Only dirty models that are not PENDING_SAVE
269+ private ensureDirtyTextFilesAreOpened ( events : ReadonlyArray < TextFileModelChangeEvent > ) : void {
270+ this . editorService . openEditors ( distinct ( events . filter ( ( { resource } ) => {
274271 const model = this . textFileService . models . get ( resource ) ;
275- const shouldOpen = model ?. isDirty ( ) && ! model . hasState ( ModelState . PENDING_SAVE ) ;
276-
277- // Only if not open already
278- return shouldOpen && ! this . editorService . isOpen ( { resource } ) ;
279- } ) . map ( event => event . resource ) , resource => resource . toString ( ) ) ) ;
280- }
281272
282- private doOpenDirtyResourcesInBackground ( resources : URI [ ] ) : void {
283- this . editorService . openEditors ( resources . map ( resource => {
284- return {
285- resource,
286- options : { inactive : true , pinned : true , preserveFocus : true }
287- } ;
288- } ) ) ;
273+ return model ?. hasState ( ModelState . DIRTY ) && // model must be dirty
274+ ! model . hasState ( ModelState . PENDING_SAVE ) && // model should not be saving currently
275+ ! this . editorService . isOpen ( { resource } ) ; // model is not currently opened as editor
276+ } ) . map ( event => event . resource ) , resource => resource . toString ( ) ) . map ( resource => ( {
277+ resource ,
278+ options : { inactive : true , pinned : true , preserveFocus : true }
279+ } ) ) ) ;
289280 }
290281
291282 //#endregion
0 commit comments