From 9cd06acac056e521f73e00a0bafeec9f207a40dd Mon Sep 17 00:00:00 2001 From: Peng Lyu Date: Thu, 7 Nov 2019 12:11:16 -0800 Subject: [PATCH] Separate Copy and Paste feature detection. --- src/vs/base/browser/canIUse.ts | 14 ++++++++++---- .../terminal/browser/terminal.contribution.ts | 5 +++-- .../contrib/terminal/browser/terminalPanel.ts | 4 +++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/vs/base/browser/canIUse.ts b/src/vs/base/browser/canIUse.ts index 4a64f789f263..157ce940da50 100644 --- a/src/vs/base/browser/canIUse.ts +++ b/src/vs/base/browser/canIUse.ts @@ -4,16 +4,22 @@ *--------------------------------------------------------------------------------------------*/ import * as browser from 'vs/base/browser/browser'; +import * as platform from 'vs/base/common/platform'; /** * Browser feature we can support in current platform, browser and environment. */ export const BrowserFeatures = { clipboard: { - access: !!(navigator - && navigator.clipboard - && navigator.clipboard.readText - && navigator.clipboard.writeText), + writeText: ( + platform.isNative + || document.queryCommandSupported('copy') + || !!(navigator && navigator.clipboard && navigator.clipboard.writeText) + ), + readText: ( + platform.isNative + || !!(navigator && navigator.clipboard && navigator.clipboard.readText) + ), richText: (() => { if (browser.isIE) { return false; diff --git a/src/vs/workbench/contrib/terminal/browser/terminal.contribution.ts b/src/vs/workbench/contrib/terminal/browser/terminal.contribution.ts index 2acece94be4e..485539d452b9 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminal.contribution.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminal.contribution.ts @@ -553,12 +553,13 @@ actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FindPrevious, Fi }, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED), 'Terminal: Find previous', category); // Commands miht be affected by Web restrictons -if (BrowserFeatures.clipboard.access) { +if (BrowserFeatures.clipboard.writeText) { actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(CopyTerminalSelectionAction, CopyTerminalSelectionAction.ID, CopyTerminalSelectionAction.LABEL, { primary: KeyMod.CtrlCmd | KeyCode.KEY_C, linux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_C } }, ContextKeyExpr.and(KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, KEYBINDING_CONTEXT_TERMINAL_FOCUS)), 'Terminal: Copy Selection', category); - +} +if (BrowserFeatures.clipboard.readText) { actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(TerminalPasteAction, TerminalPasteAction.ID, TerminalPasteAction.LABEL, { primary: KeyMod.CtrlCmd | KeyCode.KEY_V, linux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_V } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalPanel.ts b/src/vs/workbench/contrib/terminal/browser/terminalPanel.ts index c1aa163fcd77..6baef8e33507 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalPanel.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalPanel.ts @@ -144,8 +144,10 @@ export class TerminalPanel extends Panel { this._copyContextMenuAction = this._instantiationService.createInstance(CopyTerminalSelectionAction, CopyTerminalSelectionAction.ID, CopyTerminalSelectionAction.SHORT_LABEL); const clipboardActions = []; - if (BrowserFeatures.clipboard.access) { + if (BrowserFeatures.clipboard.writeText) { clipboardActions.push(this._copyContextMenuAction); + } + if (BrowserFeatures.clipboard.readText) { clipboardActions.push(this._instantiationService.createInstance(TerminalPasteAction, TerminalPasteAction.ID, TerminalPasteAction.SHORT_LABEL)); }