From f88e60c5717197bcb988622c4b60fea44105eccc Mon Sep 17 00:00:00 2001 From: SteVen Batten Date: Wed, 4 Mar 2020 11:49:02 -0800 Subject: [PATCH] fixes #89574 --- src/vs/base/browser/ui/menu/menu.ts | 3 ++- src/vs/base/common/codicons.ts | 5 +++++ .../contextmenu/electron-browser/contextmenuService.ts | 5 +++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/vs/base/browser/ui/menu/menu.ts b/src/vs/base/browser/ui/menu/menu.ts index 3c85a375813..90d828ba7c3 100644 --- a/src/vs/base/browser/ui/menu/menu.ts +++ b/src/vs/base/browser/ui/menu/menu.ts @@ -19,6 +19,7 @@ import { ScrollbarVisibility, ScrollEvent } from 'vs/base/common/scrollable'; import { Event } from 'vs/base/common/event'; import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview'; import { isLinux, isMacintosh } from 'vs/base/common/platform'; +import { stripCodicons } from 'vs/base/common/codicons'; export const MENU_MNEMONIC_REGEX = /\(&([^\s&])\)|(^|[^&])&([^\s&])/; export const MENU_ESCAPED_MNEMONIC_REGEX = /(&)?(&)([^\s&])/g; @@ -471,7 +472,7 @@ class BaseMenuActionViewItem extends BaseActionViewItem { if (this.options.label) { clearNode(this.label); - let label = this.getAction().label; + let label = stripCodicons(this.getAction().label); if (label) { const cleanLabel = cleanMnemonic(label); if (!this.options.enableMnemonics) { diff --git a/src/vs/base/common/codicons.ts b/src/vs/base/common/codicons.ts index 00b2f8b1c17..7830bc6d4e9 100644 --- a/src/vs/base/common/codicons.ts +++ b/src/vs/base/common/codicons.ts @@ -27,3 +27,8 @@ export function renderCodicons(text: string): string { : ``; }); } + +const stripCodiconsRegex = /(\s)?(\\)?\$\([a-z0-9\-]+?(?:~[a-z0-9\-]*?)?\)(\s)?/gi; +export function stripCodicons(text: string): string { + return text.replace(stripCodiconsRegex, (match, preWhitespace, escaped, postWhitespace) => escaped ? match : preWhitespace || postWhitespace || ''); +} diff --git a/src/vs/workbench/services/contextmenu/electron-browser/contextmenuService.ts b/src/vs/workbench/services/contextmenu/electron-browser/contextmenuService.ts index e607464f902..304c098c291 100644 --- a/src/vs/workbench/services/contextmenu/electron-browser/contextmenuService.ts +++ b/src/vs/workbench/services/contextmenu/electron-browser/contextmenuService.ts @@ -25,6 +25,7 @@ import { IEnvironmentService } from 'vs/platform/environment/common/environment' import { ContextMenuService as HTMLContextMenuService } from 'vs/platform/contextview/browser/contextMenuService'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; +import { stripCodicons } from 'vs/base/common/codicons'; export class ContextMenuService extends Disposable implements IContextMenuService { @@ -138,7 +139,7 @@ class NativeContextMenuService extends Disposable implements IContextMenuService // Submenu if (entry instanceof ContextSubMenu) { return { - label: unmnemonicLabel(entry.label), + label: unmnemonicLabel(stripCodicons(entry.label)).trim(), submenu: this.createMenu(delegate, entry.entries, onHide) }; } @@ -155,7 +156,7 @@ class NativeContextMenuService extends Disposable implements IContextMenuService } const item: IContextMenuItem = { - label: unmnemonicLabel(entry.label), + label: unmnemonicLabel(stripCodicons(entry.label)).trim(), checked: !!entry.checked, type, enabled: !!entry.enabled, -- GitLab