Skip to content

Commit d6eea3d

Browse files
committed
file editors - use a custom language when opening binary files as text (fix #131076)
1 parent 827cc52 commit d6eea3d

File tree

3 files changed

+18
-11
lines changed

3 files changed

+18
-11
lines changed

src/vs/workbench/contrib/files/browser/editors/binaryFileEditor.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
99
import { IThemeService } from 'vs/platform/theme/common/themeService';
1010
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
1111
import { FileEditorInput } from 'vs/workbench/contrib/files/browser/editors/fileEditorInput';
12-
import { BINARY_FILE_EDITOR_ID } from 'vs/workbench/contrib/files/common/files';
12+
import { BINARY_FILE_EDITOR_ID, BINARY_TEXT_FILE_MODE } from 'vs/workbench/contrib/files/common/files';
1313
import { IStorageService } from 'vs/platform/storage/common/storage';
1414
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
1515
import { EditorResolution, IEditorOptions } from 'vs/platform/editor/common/editor';
@@ -78,15 +78,10 @@ export class BinaryFileEditor extends BaseBinaryResourceEditor {
7878
// If the result if a file editor, the user indicated to open
7979
// the binary file as text. As such we adjust the input for that.
8080
if (isEditorInputWithOptions(resolvedEditor)) {
81-
if (resolvedEditor.editor instanceof FileEditorInput) {
82-
resolvedEditor.editor.setForceOpenAsText();
83-
} else if (resolvedEditor.editor instanceof DiffEditorInput) {
84-
if (resolvedEditor.editor.original instanceof FileEditorInput) {
85-
resolvedEditor.editor.original.setForceOpenAsText();
86-
}
87-
88-
if (resolvedEditor.editor.modified instanceof FileEditorInput) {
89-
resolvedEditor.editor.modified.setForceOpenAsText();
81+
for (const editor of resolvedEditor.editor instanceof DiffEditorInput ? [resolvedEditor.editor.original, resolvedEditor.editor.modified] : [resolvedEditor.editor]) {
82+
if (editor instanceof FileEditorInput) {
83+
editor.setForceOpenAsText();
84+
editor.setPreferredMode(BINARY_TEXT_FILE_MODE); // https://github.com/microsoft/vscode/issues/131076
9085
}
9186
}
9287
}

src/vs/workbench/contrib/files/browser/files.contribution.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { IConfigurationRegistry, Extensions as ConfigurationExtensions, Configur
1010
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions, IWorkbenchContribution } from 'vs/workbench/common/contributions';
1111
import { IFileEditorInput, IEditorFactoryRegistry, EditorExtensions } from 'vs/workbench/common/editor';
1212
import { AutoSaveConfiguration, HotExitConfiguration, FILES_EXCLUDE_CONFIG, FILES_ASSOCIATIONS_CONFIG } from 'vs/platform/files/common/files';
13-
import { SortOrder, LexicographicOptions, FILE_EDITOR_INPUT_ID } from 'vs/workbench/contrib/files/common/files';
13+
import { SortOrder, LexicographicOptions, FILE_EDITOR_INPUT_ID, BINARY_TEXT_FILE_MODE } from 'vs/workbench/contrib/files/common/files';
1414
import { TextFileEditorTracker } from 'vs/workbench/contrib/files/browser/editors/textFileEditorTracker';
1515
import { TextFileSaveErrorHandler } from 'vs/workbench/contrib/files/browser/editors/textFileSaveErrorHandler';
1616
import { FileEditorInput } from 'vs/workbench/contrib/files/browser/editors/fileEditorInput';
@@ -33,6 +33,7 @@ import { UndoCommand, RedoCommand } from 'vs/editor/browser/editorExtensions';
3333
import { IUndoRedoService } from 'vs/platform/undoRedo/common/undoRedo';
3434
import { IExplorerService } from 'vs/workbench/contrib/files/browser/files';
3535
import { FileEditorInputSerializer, FileEditorWorkingCopyEditorHandler } from 'vs/workbench/contrib/files/browser/editors/fileEditorHandler';
36+
import { ModesRegistry } from 'vs/editor/common/modes/modesRegistry';
3637

3738
class FileUriLabelContribution implements IWorkbenchContribution {
3839

@@ -444,3 +445,9 @@ RedoCommand.addImplementation(110, 'explorer', (accessor: ServicesAccessor) => {
444445

445446
return false;
446447
});
448+
449+
ModesRegistry.registerLanguage({
450+
id: BINARY_TEXT_FILE_MODE,
451+
aliases: ['Binary'],
452+
mimetypes: ['text/x-code-binary']
453+
});

src/vs/workbench/contrib/files/common/files.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ export const FILE_EDITOR_INPUT_ID = 'workbench.editors.files.fileEditorInput';
7373
*/
7474
export const BINARY_FILE_EDITOR_ID = 'workbench.editors.files.binaryFileEditor';
7575

76+
/**
77+
* Language mode for binary files opened as text.
78+
*/
79+
export const BINARY_TEXT_FILE_MODE = 'code-text-binary';
80+
7681
export interface IFilesConfiguration extends PlatformIFilesConfiguration, IWorkbenchEditorConfiguration {
7782
explorer: {
7883
openEditors: {

0 commit comments

Comments
 (0)