From 347414f8d433d36a2bcfe4d4f37f76af5436d4ec Mon Sep 17 00:00:00 2001 From: Rachel Macfarlane Date: Wed, 2 May 2018 16:27:01 -0700 Subject: [PATCH] Add 'copy' and 'copyAll' commands to Process Explorer, fixes #48961 --- .../processExplorer/processExplorerMain.ts | 47 ++++++++++++++++--- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/src/vs/code/electron-browser/processExplorer/processExplorerMain.ts b/src/vs/code/electron-browser/processExplorer/processExplorerMain.ts index 44a876e22a7..9c491c0dd95 100644 --- a/src/vs/code/electron-browser/processExplorer/processExplorerMain.ts +++ b/src/vs/code/electron-browser/processExplorer/processExplorerMain.ts @@ -7,7 +7,7 @@ import 'vs/css!./media/processExplorer'; import { listProcesses, ProcessItem } from 'vs/base/node/ps'; -import { remote, webFrame, ipcRenderer } from 'electron'; +import { remote, webFrame, ipcRenderer, clipboard } from 'electron'; import { repeat } from 'vs/base/common/strings'; import { totalmem } from 'os'; import product from 'vs/platform/node/product'; @@ -137,27 +137,60 @@ function applyZoom(zoomLevel: number): void { function showContextMenu(e) { e.preventDefault(); + const menu = new remote.Menu(); + const pid = parseInt(e.currentTarget.id); if (pid && typeof pid === 'number') { - const menu = new remote.Menu(); menu.append(new remote.MenuItem({ label: localize('killProcess', "Kill Process"), click() { process.kill(pid, 'SIGTERM'); } - }) - ); + })); menu.append(new remote.MenuItem({ label: localize('forceKillProcess', "Force Kill Process"), click() { process.kill(pid, 'SIGKILL'); } - }) - ); + })); - menu.popup(remote.getCurrentWindow()); + menu.append(new remote.MenuItem({ + type: 'separator' + })); + + menu.append(new remote.MenuItem({ + label: localize('copy', "Copy"), + click() { + const row = document.getElementById(pid.toString()); + if (row) { + clipboard.writeText(row.innerText); + } + } + })); + + menu.append(new remote.MenuItem({ + label: localize('copyAll', "Copy All"), + click() { + const processList = document.getElementById('process-list'); + if (processList) { + clipboard.writeText(processList.innerText); + } + } + })); + } else { + menu.append(new remote.MenuItem({ + label: localize('copyAll', "Copy All"), + click() { + const processList = document.getElementById('process-list'); + if (processList) { + clipboard.writeText(processList.innerText); + } + } + })); } + + menu.popup(remote.getCurrentWindow()); } export function startup(data: ProcessExplorerData): void {