diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminal.ts b/src/vs/workbench/parts/terminal/electron-browser/terminal.ts index 4601182e9a7081958e32f2d0edcff502be83876c..e91d9b86fda1f2b0b0451392c12bc0b9081ac835 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminal.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminal.ts @@ -8,6 +8,7 @@ import * as cp from 'child_process'; import * as os from 'os'; import * as platform from 'vs/base/common/platform'; import * as processes from 'vs/base/node/processes'; +import { readFile, fileExists } from 'vs/base/node/pfs'; export const TERMINAL_DEFAULT_SHELL_LINUX = !platform.isWindows ? (process.env.SHELL || 'sh') : 'sh'; export const TERMINAL_DEFAULT_SHELL_OSX = !platform.isWindows ? (process.env.SHELL || 'sh') : 'sh'; @@ -21,3 +22,20 @@ export const TERMINAL_DEFAULT_SHELL_WINDOWS = isAtLeastWindows10 ? powerShellPat export interface ITerminalProcessFactory { create(env: { [key: string]: string }): cp.ChildProcess; } + +if (platform.isLinux) { + const file = '/etc/os-release'; + fileExists(file).then(exists => { + if (!exists) { + return; + } + readFile(file).then(b => { + const contents = b.toString(); + if (contents.indexOf('NAME=Fedora') >= 0) { + isFedora = true; + } + }); + }); +} + +export let isFedora = false; \ No newline at end of file diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalConfigHelper.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalConfigHelper.ts index 6507587aa97883fb602326ae3bbbe528ed3e9557..b1793339026f8f89e56b79bd229f8a6be0e4cfb2 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalConfigHelper.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalConfigHelper.ts @@ -14,6 +14,7 @@ import { IStorageService, StorageScope } from 'vs/platform/storage/common/storag import { ITerminalConfiguration, ITerminalConfigHelper, ITerminalFont, IShellLaunchConfig, IS_WORKSPACE_SHELL_ALLOWED_STORAGE_KEY } from 'vs/workbench/parts/terminal/common/terminal'; import { TPromise } from 'vs/base/common/winjs.base'; import Severity from 'vs/base/common/severity'; +import { isFedora } from 'vs/workbench/parts/terminal/electron-browser/terminal'; interface IEditorConfiguration { editor: IEditorOptions; @@ -89,7 +90,15 @@ export class TerminalConfigHelper implements ITerminalConfigHelper { const editorConfig = (config).editor; const terminalConfig = this.config; - const fontFamily = terminalConfig.fontFamily || editorConfig.fontFamily; + let fontFamily = terminalConfig.fontFamily || editorConfig.fontFamily; + + // Work around bad font on Fedora + if (!terminalConfig.fontFamily) { + if (isFedora) { + fontFamily = '\'DejaVu Sans Mono\''; + } + } + let fontSize = this._toInteger(terminalConfig.fontSize, 0); if (fontSize <= 0) { fontSize = EDITOR_FONT_DEFAULTS.fontSize; diff --git a/src/vs/workbench/parts/terminal/test/electron-browser/terminalConfigHelper.test.ts b/src/vs/workbench/parts/terminal/test/electron-browser/terminalConfigHelper.test.ts index e95533d078f2975f33b6cb243c65dee85edcbe4d..3eecd534b8c32d92f7dcad3d7a56c524102d8fd4 100644 --- a/src/vs/workbench/parts/terminal/test/electron-browser/terminalConfigHelper.test.ts +++ b/src/vs/workbench/parts/terminal/test/electron-browser/terminalConfigHelper.test.ts @@ -11,7 +11,7 @@ import { Platform } from 'vs/base/common/platform'; import { TPromise } from 'vs/base/common/winjs.base'; import { TerminalConfigHelper } from 'vs/workbench/parts/terminal/electron-browser/terminalConfigHelper'; import { EDITOR_FONT_DEFAULTS } from 'vs/editor/common/config/editorOptions'; - +import { isFedora } from 'vs/workbench/parts/terminal/electron-browser/terminal'; class MockConfigurationService implements IConfigurationService { public _serviceBrand: any; @@ -63,7 +63,11 @@ suite('Workbench - TerminalConfigHelper', () => { }); configHelper = new TerminalConfigHelper(Platform.Linux, configurationService, null, null, null); configHelper.panelContainer = fixture; - assert.equal(configHelper.getFont().fontFamily, 'foo', 'editor.fontFamily should be the fallback when terminal.integrated.fontFamily not set'); + if (isFedora) { + assert.equal(configHelper.getFont().fontFamily, '\'DejaVu Sans Mono\'', 'Fedora should have its font overridden when terminal.integrated.fontFamily not set'); + } else { + assert.equal(configHelper.getFont().fontFamily, 'foo', 'editor.fontFamily should be the fallback when terminal.integrated.fontFamily not set'); + } }); test('TerminalConfigHelper - getFont fontSize', function () {