Question:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --Codespaces Visual Studio Code - Insiders Version: 1.78.0-insider Commit: Date: 2023-05-02T11:17:01.989Z (10 hrs ago) Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.68 Steps to Reproduce: a GitHub Codespace from an existing repo the "Developer: Set Log Level..." command and set it to "Trace" there's no "Telemetry" channel there, only Extension Telemetry: !
Do you have any ideas I assume there would be nothing special needing to be done for codespaces, I register this output channel the same as the extension one and the same as the other output channels.
Where do you register Telemetry logger in codespaces, is it in server or on client side?
It's registered client side.
May I know where it is registered in sources?
Can you please check if this code is being executed in the codespace?
It seems to be missing from web too. I can confirm when debugging the web bits locally it is called and registered, but nothing shows up in the output channel list.
Can you please provide me steps to enable this locally from sources?
Sent instructions offline
Still not seeing the telemetry output channel in Codespaces (on desktop if it matters)
Actually this is a bug in web, but I can confirm that this is working for me in both web and desktop. Wondering if you have any additional steps to repro.

const environmentService = new BrowserWorkbenchEnvironmentService(workspace.id, logsPath, this.configuration, productService); serviceCollection.set(IBrowserWorkbenchEnvironmentService, environmentService); <del> // Log const logLevel = getLogLevel(environmentService); const bufferLogger = new BufferLogger(logLevel); const otherLoggers: ILogger[] = [new ConsoleLogger(logLevel)]; </del> <ins> // Files const fileLogger = new BufferLogger(); const fileService = this._register(new FileService(fileLogger)); serviceCollection.set(IWorkbenchFileService, fileService); // Logger const loggerService = new FileLoggerService(getLogLevel(environmentService), logsPath, fileService); serviceCollection.set(ILoggerService, loggerService); // Log Service const otherLoggers: ILogger[] = [new ConsoleLogger(loggerService.getLogLevel())]; </ins> if (environmentService.isExtensionDevelopment && !!environmentService.extensionTestsLocationURI) { <del> otherLoggers.push(new ConsoleLogInAutomationLogger(logLevel)); </del> <ins> otherLoggers.push(new ConsoleLogInAutomationLogger(loggerService.getLogLevel())); </ins> } <del> const logService = new LogService(bufferLogger, otherLoggers); </del> <ins> const logger = loggerService.createLogger(environmentService.logFile, { id: windowLogId, name: localize('rendererLog', "Window") }); const logService = new LogService(logger, otherLoggers); </ins> serviceCollection.set(ILogService, logService); <ins> // Set the logger of the fileLogger after the log service is ready. // This is to avoid cyclic dependency fileLogger.logger = logService; // Register File System Providers depending on IndexedDB support // Register them early because they are needed for the profiles initialization await this.registerIndexedDBFileSystemProviders(environmentService, fileService, logService, loggerService, logsPath); </ins> // Remote const connectionToken = environmentService.options.connectionToken || getCookieValue(connectionTokenCookieName); const remoteAuthorityResolverService = new RemoteAuthorityResolverService(!environmentService.expectsResolverExtension, connectionToken, this.configuration.resourceUriProvider, productService, logService);


Question:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --Codespaces Visual Studio Code - Insiders Version: 1.78.0-insider Commit: Date: 2023-05-02T11:17:01.989Z (10 hrs ago) Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.68 Steps to Reproduce: a GitHub Codespace from an existing repo the "Developer: Set Log Level..." command and set it to "Trace" there's no "Telemetry" channel there, only Extension Telemetry: !
Do you have any ideas I assume there would be nothing special needing to be done for codespaces, I register this output channel the same as the extension one and the same as the other output channels.
Where do you register Telemetry logger in codespaces, is it in server or on client side?
It's registered client side.
May I know where it is registered in sources?
Can you please check if this code is being executed in the codespace?
It seems to be missing from web too. I can confirm when debugging the web bits locally it is called and registered, but nothing shows up in the output channel list.
Can you please provide me steps to enable this locally from sources?
Sent instructions offline
Still not seeing the telemetry output channel in Codespaces (on desktop if it matters)
Actually this is a bug in web, but I can confirm that this is working for me in both web and desktop. Wondering if you have any additional steps to repro.

// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! <del> // Files const fileService = this._register(new FileService(logService)); serviceCollection.set(IWorkbenchFileService, fileService); // Logger const loggerService = new FileLoggerService(logLevel, logsPath, fileService); serviceCollection.set(ILoggerService, loggerService); // Register File System Providers depending on IndexedDB support // Register them early because they are needed for the profiles initialization await this.registerIndexedDBFileSystemProviders(environmentService, fileService, bufferLogger, logService, loggerService, logsPath); </del> // URI Identity const uriIdentityService = new UriIdentityService(fileService); serviceCollection.set(IUriIdentityService, uriIdentityService);


Question:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --Codespaces Visual Studio Code - Insiders Version: 1.78.0-insider Commit: Date: 2023-05-02T11:17:01.989Z (10 hrs ago) Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.68 Steps to Reproduce: a GitHub Codespace from an existing repo the "Developer: Set Log Level..." command and set it to "Trace" there's no "Telemetry" channel there, only Extension Telemetry: !
Do you have any ideas I assume there would be nothing special needing to be done for codespaces, I register this output channel the same as the extension one and the same as the other output channels.
Where do you register Telemetry logger in codespaces, is it in server or on client side?
It's registered client side.
May I know where it is registered in sources?
Can you please check if this code is being executed in the codespace?
It seems to be missing from web too. I can confirm when debugging the web bits locally it is called and registered, but nothing shows up in the output channel list.
Can you please provide me steps to enable this locally from sources?
Sent instructions offline
Still not seeing the telemetry output channel in Codespaces (on desktop if it matters)
Actually this is a bug in web, but I can confirm that this is working for me in both web and desktop. Wondering if you have any additional steps to repro.

} } <del> private async registerIndexedDBFileSystemProviders(environmentService: IWorkbenchEnvironmentService, fileService: IWorkbenchFileService, bufferLogger: BufferLogger, logService: ILogService, loggerService: ILoggerService, logsPath: URI): Promise<void> { </del> <ins> private async registerIndexedDBFileSystemProviders(environmentService: IWorkbenchEnvironmentService, fileService: IWorkbenchFileService, logService: ILogService, loggerService: ILoggerService, logsPath: URI): Promise<void> { </ins> // IndexedDB is used for logging and user data let indexedDB: IndexedDB | undefined; const userDataStore = 'vscode-userdata-store';


Question:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --Codespaces Visual Studio Code - Insiders Version: 1.78.0-insider Commit: Date: 2023-05-02T11:17:01.989Z (10 hrs ago) Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.68 Steps to Reproduce: a GitHub Codespace from an existing repo the "Developer: Set Log Level..." command and set it to "Trace" there's no "Telemetry" channel there, only Extension Telemetry: !
Do you have any ideas I assume there would be nothing special needing to be done for codespaces, I register this output channel the same as the extension one and the same as the other output channels.
Where do you register Telemetry logger in codespaces, is it in server or on client side?
It's registered client side.
May I know where it is registered in sources?
Can you please check if this code is being executed in the codespace?
It seems to be missing from web too. I can confirm when debugging the web bits locally it is called and registered, but nothing shows up in the output channel list.
Can you please provide me steps to enable this locally from sources?
Sent instructions offline
Still not seeing the telemetry output channel in Codespaces (on desktop if it matters)
Actually this is a bug in web, but I can confirm that this is working for me in both web and desktop. Wondering if you have any additional steps to repro.

fileService.registerProvider(logsPath.scheme, new InMemoryFileSystemProvider()); } <del> bufferLogger.logger = loggerService.createLogger(environmentService.logFile, { id: windowLogId, name: localize('rendererLog', "Window") }); </del> // User data let userDataProvider; if (indexedDB) {


Question:
Type a multiline commit message Scroll away Scroll back When the row gets rerendered (I assume) it is sized to one line. If I type a newline in this box, the size gets fixed !
Possibly a regression introduced with

const inputWidget = this.instantiationService.createInstance(SCMInputWidget, inputElement, this.overflowWidgetsDomNode); templateDisposable.add(inputWidget); <del> return { inputWidget, elementDisposables: templateDisposable.add(new DisposableStore()), templateDisposable }; </del> <ins> return { inputWidget, elementDisposables: new DisposableStore(), templateDisposable }; </ins> } renderElement(node: ITreeNode<ISCMInput, FuzzyScore>, index: number, templateData: InputTemplate): void {


Question:
Type a multiline commit message Scroll away Scroll back When the row gets rerendered (I assume) it is sized to one line. If I type a newline in this box, the size gets fixed !
Possibly a regression introduced with

// Remember widget this.inputWidgets.set(input, templateData.inputWidget); <del> templateData.elementDisposables.add({ dispose: () => this.inputWidgets.delete(input) }); </del> <ins> templateData.elementDisposables.add({ dispose: () => { this.inputWidgets.delete(input); this.contentHeights.delete(input); } }); </ins> // Widget cursor selections const selections = this.editorSelections.get(input);


Question:
Just saw , this goes against the design. It's meant to only add the status if it doesn't already exist, if the status changed then it should use a different id and/or remove the old status first.
I'm not clear on the solution. There're a limited number of Terminal Status IDs: In this case status ID hasn't changed, it's still , only the description which comes with it has updated.
working on it, I'll send a PR to you in a bit
Validate still doesn't happen.

/** * Adds a status to the list. <ins> * @param status The status object. Ideally a single status object that does not change will be * shared as this call will no-op if the status is already set (checked by by object reference). </ins> * @param duration An optional duration in milliseconds of the status, when specified the status * will remove itself when the duration elapses unless the status gets re-added. */


Question:
Just saw , this goes against the design. It's meant to only add the status if it doesn't already exist, if the status changed then it should use a different id and/or remove the old status first.
I'm not clear on the solution. There're a limited number of Terminal Status IDs: In this case status ID hasn't changed, it's still , only the description which comes with it has updated.
working on it, I'll send a PR to you in a bit
Validate still doesn't happen.

const timeout = window.setTimeout(() => this.remove(status), duration); this._statusTimeouts.set(status.id, timeout); } <ins> const existingStatus = this._statuses.get(status.id); if (existingStatus && existingStatus !== status) { this._onDidRemoveStatus.fire(existingStatus); this._statuses.delete(existingStatus.id); } </ins> if (!this._statuses.has(status.id)) { const oldPrimary = this.primary; this._statuses.set(status.id, status);


Question:
Just saw , this goes against the design. It's meant to only add the status if it doesn't already exist, if the status changed then it should use a different id and/or remove the old status first.
I'm not clear on the solution. There're a limited number of Terminal Status IDs: In this case status ID hasn't changed, it's still , only the description which comes with it has updated.
working on it, I'll send a PR to you in a bit
Validate still doesn't happen.

if (oldPrimary !== newPrimary) { this._onDidChangePrimaryStatus.fire(newPrimary); } <del> } else { this._statuses.set(status.id, status); // It maybe the case that status hasn't changed, there isn't a good way to check this based on // `ITerminalStatus`, so just fire the event anyway. this._onDidAddStatus.fire(status); </del> } }


Question:
Just saw , this goes against the design. It's meant to only add the status if it doesn't already exist, if the status changed then it should use a different id and/or remove the old status first.
I'm not clear on the solution. There're a limited number of Terminal Status IDs: In this case status ID hasn't changed, it's still , only the description which comes with it has updated.
working on it, I'll send a PR to you in a bit
Validate still doesn't happen.

strictEqual(list.statuses[1].icon!.id, Codicon.zap.id, 'zap~spin should have animation removed only'); }); <ins> test('add should fire onDidRemoveStatus if same status id with a different object reference was added', () => { const eventCalls: string[] = []; list.onDidAddStatus(() => eventCalls.push('add')); list.onDidRemoveStatus(() => eventCalls.push('remove')); list.add({ id: 'test', severity: Severity.Info }); list.add({ id: 'test', severity: Severity.Info }); deepStrictEqual(eventCalls, [ 'add', 'remove', 'add' ]); }); </ins> test('remove', () => { list.add({ id: 'info', severity: Severity.Info }); list.add({ id: 'warning', severity: Severity.Warning });


Question:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --Version: 1.78.1 (system setup) Commit: Date: 2023-05-04T09:48:08.683Z Electron: 22.5.1 Chromium: 108.0.5359.215 16.17.1 V8: 10.8.168.25-electron.0 OS: WindowsNT x64 10.0. Sandboxed: No Steps to Reproduce: a workspace at a UNC path that isn't set in security.allowedUNCHosts. "Yes" when prompted to temporarily allow working from that host. changes to one or more files without_ saving them. VSCode without closing the workspace (may require specific settings to automatically re-open the previous workspace). time, click the "Learn More" button when prompted to allow working from that host. Note that any unsaved editors remain, but the rest of the workspace is not loaded as though the user clicked the "No" button. I'd argue that "Learn More" doesn't constitute a decision from the user and shouldn't proceed as though it was. Depending on the nature of the changes, this may cause a problem for safely saving those changes because if the user tries to re-open the workspace, they are asked to either save or close these orphaned editors. Perhaps a link among the text in the dialogue box would be more appropriate than a button which closes the box.
I agree that the dialog should not close and/or make a decision when you click "Learn More". Unfortunately the dialog closes when you press that button, so best I can do is to open it again asking the same question.

if (response === 2) { shell.openExternal('https://aka.ms/vscode-windows-unc'); <ins> return this.onUNCHostNotAllowed(path, options); // keep showing the dialog until decision (https://github.com/microsoft/vscode/issues/181956) </ins> } return undefined;


Question:
Run the command . Nothing happens Can we show the dev tools or open an output view that gets focus? From describing a user how to help us debugging an issue with storage:
The action also runs in browsers where we cannot open devtools automatically. We cannot use the output view because we actually show a real table: <img width="1394" alt="image" src=""But we can inform the user via dialog.
For the other action "Log working copies" I will reveal the window log where it is logged to.

import { Categories } from 'vs/platform/action/common/actionCommonCategories'; import { IWorkingCopyBackupService } from 'vs/workbench/services/workingCopy/common/workingCopyBackup'; import { ResolutionResult, ResultKind } from 'vs/platform/keybinding/common/keybindingResolver'; <ins> import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; import { IOutputService } from 'vs/workbench/services/output/common/output'; import { windowLogId } from 'vs/workbench/services/log/common/logConstants'; </ins> class InspectContextKeysAction extends Action2 {


Question:
Run the command . Nothing happens Can we show the dev tools or open an output view that gets focus? From describing a user how to help us debugging an issue with storage:
The action also runs in browsers where we cannot open devtools automatically. We cannot use the output view because we actually show a real table: <img width="1394" alt="image" src=""But we can inform the user via dialog.
For the other action "Log working copies" I will reveal the window log where it is logged to.

} run(accessor: ServicesAccessor): void { <del> accessor.get(IStorageService).log(); </del> <ins> const storageService = accessor.get(IStorageService); const dialogService = accessor.get(IDialogService); storageService.log(); dialogService.info(localize('storageLogDialogMessage', "The storage database contents have been logged to the developer tools."), localize('storageLogDialogDetails', "Open developer tools from the menu and select the Console tab.")); </ins> } }


Question:
Run the command . Nothing happens Can we show the dev tools or open an output view that gets focus? From describing a user how to help us debugging an issue with storage:
The action also runs in browsers where we cannot open devtools automatically. We cannot use the output view because we actually show a real table: <img width="1394" alt="image" src=""But we can inform the user via dialog.
For the other action "Log working copies" I will reveal the window log where it is logged to.

const workingCopyService = accessor.get(IWorkingCopyService); const workingCopyBackupService = accessor.get(IWorkingCopyBackupService); const logService = accessor.get(ILogService); <ins> const outputService = accessor.get(IOutputService); </ins> const backups = await workingCopyBackupService.getBackups();


Question:
Run the command . Nothing happens Can we show the dev tools or open an output view that gets focus? From describing a user how to help us debugging an issue with storage:
The action also runs in browsers where we cannot open devtools automatically. We cannot use the output view because we actually show a real table: <img width="1394" alt="image" src=""But we can inform the user via dialog.
For the other action "Log working copies" I will reveal the window log where it is logged to.

]; logService.info(msg.join('n')); <ins> outputService.showChannel(windowLogId, true); </ins> } }


Question:
Type: <bFeature Request</bDepending on the extension we are using, when code suggestion information appears, it is not read by screen readers. Steps to reproduce. Install the codeium extension. Open any project, and start typing or commenting the code; You will hear a sound when a hint appears, but this hint is not read by screen readers like nvda. I suggest that it is possible to activate a configuration in vscode, so that this type of information can be transmitted to screen readers. VS Code version: Code - Insiders 1.79.0-insider (, 2023-05-20T01:18:53.811Z) OS version: Windows_NT x64 10.0. Modes: Remote OS version: Linux x64 5.15.90.1-microsoft-standard-WSL2 <!-- generated by issue reporter --
I can reproduce. We must not be getting the line content here
I would like to inform you that I also tested it with the copilot and when listening to the sound that a suggestion was given, the screen readers also do not read.
You need to set to and it will work for copilot
do you think we should now set that to by default?
Nice defined it and it actually worked for the copilot. My suggestion is that it would not be possible for these settings to go to the accessibility feature? I know that it makes sense to stay where they are because it has to do with the editor, but they are difficult to find, or maybe we have some dock where all the accessibility features are and their respective paths where they should be activated, you get the idea.
Yes, we actually have help menus now for the copilot chat view / interactive editor session. When you focus those inputs, using reveals/focuses the help menu for each. I think for this case, we should enable inline suggestion by default
Sorry, just found out that by enabling the setting, it also worked for codeium. Should I then close this issue?
I think we should enable this by default, so will use this issue to track that
I agree with the idea setting the inline suggestion announcement to TRUE by default as it is now stable.
Verified the setting default is flipped

EditorOption.ariaLabel, 'ariaLabel', nls.localize('editorViewAccessibleLabel', "Editor content") )), screenReaderAnnounceInlineSuggestion: register(new EditorBooleanOption( <del> EditorOption.screenReaderAnnounceInlineSuggestion, 'screenReaderAnnounceInlineSuggestion', false, </del> <ins> EditorOption.screenReaderAnnounceInlineSuggestion, 'screenReaderAnnounceInlineSuggestion', true, </ins> { description: nls.localize('screenReaderAnnounceInlineSuggestion', "Control whether inline suggestions are announced by a screen reader."), tags: ['accessibility']


Question:
Type: <bBug</bOpen terminal Use Terminal Copy Selecton as HTML command () after selecting text in terminal Expected: Selected text in the terminal is copied as html, so formatting (such as color) is kept. I am then able to paste this text elsewhere, outside of VS Code. Actual: [object event] notifcation] & text isn't copied to clipboard at all, clipboard contents remain unchanged VS Code version: Code 1.78.2 (, 2023-05-10T14:39:26.248Z) OS version: WindowsNT x64 10.0. Modes: Sandboxed: Yes <details<summarySystem Info</summary </details<details<summaryExtensions (16)</summaryExtensionVersion ------ npm-intellisense1.4.4 vscode-eslint2.4.0 vscode-npm-script0.3.29 prettier-vscode9.12.0 npm1.3.0 vscode-ansi1.1.6 python2023.8.0 vscode-pylance2023.5.30 jupyter2023.4. jupyter-keymap1.1.0 jupyter-renderers1.0.15 vscode-jupyter-cell-tags0.1.8 vscode-jupyter-slideshow0.1.5 vscode-react-native1.11.0 vscode-react-native-preview2023.5.821 es7-react-js-snippets1.9.3 </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --
This was working at some pt, not sure why it doesn't anymore
Can reproduce: ! It's also a little weird having in the precondition as that makes it never show up in the command palette (I'm guessing that's set to false when the terminal is blurred?)
Something's wrong with getting the serialize addon: !

'xterm-addon-canvas': `${baseNodeModulesPath}/xterm-addon-canvas/lib/xterm-addon-canvas.js`, 'xterm-addon-image': `${baseNodeModulesPath}/xterm-addon-image/lib/xterm-addon-image.js`, 'xterm-addon-search': `${baseNodeModulesPath}/xterm-addon-search/lib/xterm-addon-search.js`, <ins> 'xterm-addon-serialize': `${baseNodeModulesPath}/xterm-addon-serialize/lib/xterm-addon-serialize.js`, </ins> 'xterm-addon-unicode11': `${baseNodeModulesPath}/xterm-addon-unicode11/lib/xterm-addon-unicode11.js`, 'xterm-addon-webgl': `${baseNodeModulesPath}/xterm-addon-webgl/lib/xterm-addon-webgl.js`, '@vscode/iconv-lite-umd': `${baseNodeModulesPath}/@vscode/iconv-lite-umd/lib/iconv-lite-umd.js`,


Question:
Testing I might be doing something wrong, my contribution: I see no status entry that I can click on. I also tried with an existing command such as . ! Extension code is a hello world: Full :
not implemented

entryId, name: item.entry.name, text: item.entry.text, <del> command: typeof item.entry.command === 'string' ? item.entry.command : undefined, </del> <ins> command: typeof item.entry.command === 'string' ? item.entry.command : typeof item.entry.command === 'object' ? item.entry.command.id : undefined, </ins> priority: item.priority, alignLeft: item.alignment === StatusbarAlignment.LEFT };


Question:
Testing I might be doing something wrong, my contribution: I see no status entry that I can click on. I also tried with an existing command such as . ! Extension code is a hello world: Full :
not implemented

ExtensionIdentifier.toKey(entry.description.identifier), candidate.name ?? entry.description.displayName ?? entry.description.name, candidate.text, <del> undefined, undefined, undefined, undefined, </del> <ins> undefined, candidate.command ? { id: candidate.command, title: candidate.name } : undefined, undefined, undefined, </ins> candidate.alignment === 'left', candidate.priority, undefined


throw e; } <del> let label; if (claims.name && claims.email) { label = `${claims.name} - ${claims.email}`; } else { label = claims.email ?? claims.unique_name ?? claims.preferred_username ?? 'user@example.com'; } </del> const id = `${claims.tid}/${(claims.oid ?? (claims.altsecid ?? '' + claims.ipd ?? ''))}`; const sessionId = existingId || `${id}/${randomUUID()}`; this._logger.trace(`[${scopeData.scopeStr}] '${sessionId}' Token response parsed successfully.`);


scope: scopeData.scopeStr, sessionId, account: { <del> label, </del> <ins> label: claims.email ?? claims.preferred_username ?? claims.unique_name ?? 'user@example.com', </ins> id, type: claims.tid === MSA_TID || claims.tid === MSA_PASSTHRU_TID ? MicrosoftAccountType.MSA : MicrosoftAccountType.AAD }


if (account.canSignOut) { const signOutAction = disposables.add(new Action('signOut', localize('signOut', "Sign Out"), undefined, true, async () => { const allSessions = await this.authenticationService.getSessions(providerId); <del> const sessionsForAccount = allSessions.filter(s => s.account.id === account.id); </del> <ins> const sessionsForAccount = allSessions.filter(s => s.account.label === account.label); </ins> return await this.authenticationService.removeAccountSessions(providerId, account.label, sessionsForAccount); })); providerSubMenuActions.push(signOutAction);


private async addOrUpdateAccount(providerId: string, account: AuthenticationSessionAccount): Promise<void> { let accounts = this.groupedAccounts.get(providerId); <del> if (accounts) { const existingAccount = accounts.find(a => a.id === account.id); if (existingAccount) { // Update the label if it has changed if (existingAccount.label !== account.label) { existingAccount.label = account.label; } return; } } else { </del> <ins> if (!accounts) { </ins> accounts = []; this.groupedAccounts.set(providerId, accounts); } const sessionFromEmbedder = await this.sessionFromEmbedder.value; <del> // If the session stored from the embedder allows sign out, then we can treat it and all others as sign out-able let canSignOut = !!sessionFromEmbedder?.canSignOut; if (!canSignOut) { if (sessionFromEmbedder?.id) { const sessions = (await this.authenticationService.getSessions(providerId)).filter(s => s.account.id === account.id); canSignOut = !sessions.some(s => s.id === sessionFromEmbedder.id); } else { // The default if we don't have a session from the embedder is to allow sign out canSignOut = true; } </del> <ins> let canSignOut = true; if ( sessionFromEmbedder												// if we have a session from the embedder && !sessionFromEmbedder.canSignOut								// and that session says we can't sign out && (await this.authenticationService.getSessions(providerId))	// and that session is associated with the account we are adding/updating .some(s => s.id === sessionFromEmbedder.id && s.account.id === account.id ) ) { canSignOut = false; </ins> } <del> accounts.push({ ...account, canSignOut }); </del> <ins> const existingAccount = accounts.find(a => a.label === account.label); if (existingAccount) { // if we have an existing account and we discover that we // can't sign out of it, update the account to mark it as "can't sign out" if (!canSignOut) { existingAccount.canSignOut = canSignOut; } } else { accounts.push({ ...account, canSignOut }); } </ins> } private removeAccount(providerId: string, account: AuthenticationSessionAccount): void {


Question: <!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --

"ts-loader": "^9.4.2", "ts-node": "^10.9.1", "tsec": "0.1.4", <del> "typescript": "^5.2.0-dev.20230524", </del> <ins> "typescript": "^5.2.0-dev.20230602", </ins> "typescript-formatter": "7.1.0", "underscore": "^1.12.1", "util": "^0.12.4",


Question: <!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --

resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== <del> typescript@^5.2.0-dev.20230524: version "5.2.0-dev.20230524" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.0-dev.20230524.tgz#c2714b82f5ef8c63328a253692ae0b8c244c86d6" integrity sha512-1XzSUJCt31jm7jIZ3vBKzK46ZxnmqX2VdVg/dur9AIaz9WmidrABs7F8H8d4onpIV8RYD/L6xW6MXR5EHjl+LA== </del> <ins> typescript@^5.2.0-dev.20230602: version "5.2.0-dev.20230602" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.0-dev.20230602.tgz#01e2055aa8d8bde4431947c0c048c07c23cc6027" integrity sha512-LenKdxmkwzZRmEKzShAq83TvEuvCGR8pCYBe0VpUTuJ7NMSK4r2yV2GTmJrSqtk8IoJAmc+PfymMQIfwX1JGQQ== </ins> typical@^4.0.0: version "4.0.0"


Question: <!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --

})); } <ins> stopWebviewFind() { this._notebookEditor.findStop(); } </ins> override dispose() { this.clearDecorations(); super.dispose();


Question: <!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --

this._notebookUpdateScheduler.schedule(); }) ?? null; <ins> this._findMatchDecorationModel?.stopWebviewFind(); </ins> this._findMatchDecorationModel?.dispose(); this._findMatchDecorationModel = new FindMatchDecorationModel(this._notebookEditorWidget); }


Question: <!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --

} if (this._findMatchDecorationModel) { <ins> this._findMatchDecorationModel?.stopWebviewFind(); </ins> this._findMatchDecorationModel?.dispose(); this._findMatchDecorationModel = undefined; }


Question: <!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --

get title(): string { const firstRequestMessage = this._requests[0]?.message; <del> if (typeof firstRequestMessage === 'string') { return firstRequestMessage; } else if (firstRequestMessage) { return firstRequestMessage.message; } else { return ''; } </del> <ins> const message = typeof firstRequestMessage === 'string' ? firstRequestMessage : firstRequestMessage?.message ?? ''; return message.split('n')[0].substring(0, 50); </ins> } constructor(


Question:
Type: <bBug</bIn previous VS Code version 1.78 when I pressed if inline suggest was visible with suggest widget it hides only inline suggest, if I press again same shortcut it then hides suggest widget. Now with 1.79 it hides both inline suggest and suggest widget. KeybindingService logs: My custom shortcuts to hide inline suggest & suggest widget: I even tried to add to clause and still it hides both. VS Code version: Code 1.79.0 (, 2023-06-07T14:31:03.317Z) OS version: Darwin arm64 22.5.0 Modes: <details<summarySystem Info</summary </details<details<summaryExtensions (12)</summaryExtensionVersion ------ vscode-eslint2.4.0 gitlens13.6.0 prettier-vscode9.13.0 copilot1.88.132 vscode-graphql0.8.13 vscode-graphql-syntax1.2.0 symbols0.0.11 vscode-react-native1.11.0 vscode-thunder-client2.7.6 vscode-fileutils3.10.1 vim1.25.2 quokka-vscode1.0.543 (1 theme extensions excluded) </details<!-- generated by issue reporter --
full text search doesn't reveal the context key anymore. Has that been removed/renamed?
It is
sorry I was writing that instead of copy-pasting. Already updated the issue.
Does it work when you swap the keybinding configurations? (Like literally exchange the positions in the file)
Still the same issue even if I swap places :(
So, its either the or context key. Can you investigate with the F1 Inspect Context Key Tools to see if those context keys are set. Note that it will print context keys on the console of DevTools
<details<summaryContext keys</summary</details
as you can see is and is , but even though inline suggest was visible it returned false.
Same in the monaco, if the suggest widget is visible, the inlineSuggestWidgetVisible will always be false no matter there is any ghost text or not
<!-- AUTHORVERIFICATIONREQUEST --This bug has been fixed in the latest release of ! you can help us out by commenting if things are now working as expected. If things still don't seem right, please ensure you're on version of Insiders (today's or later - you can use in the command palette to check), and leave a comment letting us know what isn't working as expected. Happy Coding!
Now I see us hiding the suggest widget first and the inline suggest second, is that expected? This is true regardless of what order I declare the keybindings in (I do have the Vim extension installed)
It should hide first inline suggestions and second time you press it, it should hide suggest widget. Try to swap places of keybindings to see if it fixes it (order maybe matters?). Because previously this is how it worked (in 1.78, but regression was introduced in 1.79). EDIT: Oh I see you mentioned that order doesn't matter. Try to add in clause for command (I hope it works).
is it fixed for you on the latest insider builds The following does not work for me either
It works! !
Great, thanks for confirming!

const model = this.model.read(reader); const suggestion = model?.selectedInlineCompletion.read(reader); const ghostText = model?.ghostText.read(reader); <del> const selectedSuggestItem = model?.selectedSuggestItem.read(reader); this.inlineCompletionVisible.set(selectedSuggestItem === undefined && ghostText !== undefined && !ghostText.isEmpty()); </del> <ins> this.inlineCompletionVisible.set(ghostText !== undefined && !ghostText.isEmpty()); </ins> if (ghostText && suggestion) { this.suppressSuggestions.set(suggestion.inlineCompletion.source.inlineCompletions.suppressSuggestions);


Question:
Steps to Reproduce: Copilot Chat the file in VS Code +i It takes like 2s for the UI to show up. One time when I was doing a lot with VS Code it took so long (like 10s) that I thought I didn't have the extension installed. Not sure if this is on the UI side or the extension side, but even still, I think the UI should be instant (even if it's perceived fastness) since all I'm seeing is an input box that I will type in.
I have done a bunch of tricks, most importantly to showing the UI while asking the extension to create a session. Also the UI is more lazily created which helps. However, once there are changes the bottleneck is setting up the embedded diff editor. There isn't much I can do about it <img width="726" alt="Screenshot 2023-06-15 at 16 10 35" src=""

*--------------------------------------------------------------------------------------------*/ import { Event } from 'vs/base/common/event'; <ins> import { Lazy } from 'vs/base/common/lazy'; </ins> import { IDisposable } from 'vs/base/common/lifecycle'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { IBulkEditService } from 'vs/editor/browser/services/bulkEditService';


Question:
Steps to Reproduce: Copilot Chat the file in VS Code +i It takes like 2s for the UI to show up. One time when I was doing a lot with VS Code it took so long (like 10s) that I thought I didn't have the extension installed. Not sure if this is on the UI side or the extension side, but even still, I think the UI should be instant (even if it's perceived fastness) since all I'm seeing is an input box that I will type in.
I have done a bunch of tricks, most importantly to showing the UI while asking the extension to create a session. Also the UI is more lazily created which helps. However, once there are changes the bottleneck is setting up the embedded diff editor. There isn't much I can do about it <img width="726" alt="Screenshot 2023-06-15 at 16 10 35" src=""

export class LivePreviewStrategy extends LiveStrategy { <del> private readonly _diffZone: InlineChatLivePreviewWidget; private readonly _previewZone: InlineChatFileCreatePreviewWidget; </del> <ins> private readonly _diffZone: Lazy<InlineChatLivePreviewWidget>; private readonly _previewZone: Lazy<InlineChatFileCreatePreviewWidget>; </ins> constructor( session: Session,


Question:
Steps to Reproduce: Copilot Chat the file in VS Code +i It takes like 2s for the UI to show up. One time when I was doing a lot with VS Code it took so long (like 10s) that I thought I didn't have the extension installed. Not sure if this is on the UI side or the extension side, but even still, I think the UI should be instant (even if it's perceived fastness) since all I'm seeing is an input box that I will type in.
I have done a bunch of tricks, most importantly to showing the UI while asking the extension to create a session. Also the UI is more lazily created which helps. However, once there are changes the bottleneck is setting up the embedded diff editor. There isn't much I can do about it <img width="726" alt="Screenshot 2023-06-15 at 16 10 35" src=""

) { super(session, editor, widget, contextKeyService, storageService, bulkEditService, editorWorkerService, instaService); <del> this._diffZone = instaService.createInstance(InlineChatLivePreviewWidget, editor, session); this._previewZone = instaService.createInstance(InlineChatFileCreatePreviewWidget, editor); </del> <ins> this._diffZone = new Lazy(() => instaService.createInstance(InlineChatLivePreviewWidget, editor, session)); this._previewZone = new Lazy(() => instaService.createInstance(InlineChatFileCreatePreviewWidget, editor)); </ins> } override dispose(): void { <del> this._diffZone.hide(); this._diffZone.dispose(); this._previewZone.hide(); this._previewZone.dispose(); </del> <ins> this._diffZone.rawValue?.hide(); this._diffZone.rawValue?.dispose(); this._previewZone.rawValue?.hide(); this._previewZone.rawValue?.dispose(); </ins> super.dispose(); }


Question:
Steps to Reproduce: Copilot Chat the file in VS Code +i It takes like 2s for the UI to show up. One time when I was doing a lot with VS Code it took so long (like 10s) that I thought I didn't have the extension installed. Not sure if this is on the UI side or the extension side, but even still, I think the UI should be instant (even if it's perceived fastness) since all I'm seeing is an input box that I will type in.
I have done a bunch of tricks, most importantly to showing the UI while asking the extension to create a session. Also the UI is more lazily created which helps. However, once there are changes the bottleneck is setting up the embedded diff editor. There isn't much I can do about it <img width="726" alt="Screenshot 2023-06-15 at 16 10 35" src=""

this._updateSummaryMessage(); if (this._diffEnabled) { <del> this._diffZone.show(); </del> <ins> this._diffZone.value.show(); </ins> } if (response.singleCreateFileEdit) { <del> this._previewZone.showCreation(this._session.wholeRange.value, response.singleCreateFileEdit.uri, await Promise.all(response.singleCreateFileEdit.edits)); </del> <ins> this._previewZone.value.showCreation(this._session.wholeRange.value, response.singleCreateFileEdit.uri, await Promise.all(response.singleCreateFileEdit.edits)); </ins> } else { <del> this._previewZone.hide(); </del> <ins> this._previewZone.value.hide(); </ins> } } override async undoChanges(response: EditResponse): Promise<void> { <del> this._diffZone.lockToDiff(); </del> <ins> this._diffZone.value.lockToDiff(); </ins> super.undoChanges(response); } protected override _doToggleDiff(): void { const scrollState = StableEditorScrollState.capture(this._editor); if (this._diffEnabled) { <del> this._diffZone.show(); </del> <ins> this._diffZone.value.show(); </ins> } else { <del> this._diffZone.hide(); </del> <ins> this._diffZone.value.hide(); </ins> } scrollState.restore(this._editor); } override hasFocus(): boolean { <del> return super.hasFocus() || this._diffZone.hasFocus() || this._previewZone.hasFocus(); </del> <ins> return super.hasFocus() || this._diffZone.value.hasFocus() || this._previewZone.value.hasFocus(); </ins> } }


Question:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes, actually this issue has nothing to do with extensions <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --- Version: 1.79.1 (user setup) Commit: Date: 2023-06-12T16:14:05.102Z Electron: 22.5.7 Chromium: 108.0.5359.215 16.17.1 V8: 10.8.168.25-electron.0 OS: Windows_NT x64 10.0. Steps to Reproduce: Connect to WSL(Ubuntu ) Profiles =Show Contents... <img width="286" alt="image" src=""As you can see, the extensions of the profile are duplicated. The reason I found is I installed the extensions in WSL again. Maybe It's not a bug. But, the profile should distinguish between extensions installed in the host and WSL. Maybe like this: ESLint - host Disabled ESLint - WSL So that I know which place I install the extension and its enabled/disabled status. When I open the detail page of the duplicated extensions, both of them display an "Extension is enabled on 'WSL: Ubuntu-22.04'" message. What I expect is: The extension is installed and enabled on the host, the message should be "Extension is enabled". The extension is installed and enabled on the WSL, the message should be "Extension is enabled on 'WSL: Ubuntu-22.04'". Does it make sense?
Related on Stack Overflow: . Let me know if there's any debugging steps or details you'd like be to solicit from people in my answer there.
/duplicate
Thanks for creating this issue! We figured it's covering the same as another one we already have. Thus, we closed this one as a duplicate. You can search for . See also our . Happy Coding!
what's it a duplicate of?
I am sorry, I remembered this bug and thought there is an issue already, but there is not. Reopened it.
I guess duplicate only shows for extensions installed in both local VS Code and remote hosts. !
Fixed: Contents show only one instance of the extension

async getLocalExtensions(profile: IUserDataProfile): Promise<IProfileExtension[]> { return this.withProfileScopedServices(profile, async (extensionEnablementService) => { <del> const result: Array<IProfileExtension & { displayName?: string }> = []; </del> <ins> const result = new Map<string, IProfileExtension & { displayName?: string }>(); </ins> const installedExtensions = await this.extensionManagementService.getInstalled(undefined, profile.extensionsResource); const disabledExtensions = extensionEnablementService.getDisabledExtensions(); for (const extension of installedExtensions) {


Question:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes, actually this issue has nothing to do with extensions <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --- Version: 1.79.1 (user setup) Commit: Date: 2023-06-12T16:14:05.102Z Electron: 22.5.7 Chromium: 108.0.5359.215 16.17.1 V8: 10.8.168.25-electron.0 OS: Windows_NT x64 10.0. Steps to Reproduce: Connect to WSL(Ubuntu ) Profiles =Show Contents... <img width="286" alt="image" src=""As you can see, the extensions of the profile are duplicated. The reason I found is I installed the extensions in WSL again. Maybe It's not a bug. But, the profile should distinguish between extensions installed in the host and WSL. Maybe like this: ESLint - host Disabled ESLint - WSL So that I know which place I install the extension and its enabled/disabled status. When I open the detail page of the duplicated extensions, both of them display an "Extension is enabled on 'WSL: Ubuntu-22.04'" message. What I expect is: The extension is installed and enabled on the host, the message should be "Extension is enabled". The extension is installed and enabled on the WSL, the message should be "Extension is enabled on 'WSL: Ubuntu-22.04'". Does it make sense?
Related on Stack Overflow: . Let me know if there's any debugging steps or details you'd like be to solicit from people in my answer there.
/duplicate
Thanks for creating this issue! We figured it's covering the same as another one we already have. Thus, we closed this one as a duplicate. You can search for . See also our . Happy Coding!
what's it a duplicate of?
I am sorry, I remembered this bug and thought there is an issue already, but there is not. Reopened it.
I guess duplicate only shows for extensions installed in both local VS Code and remote hosts. !
Fixed: Contents show only one instance of the extension

continue; } } <ins> const existing = result.get(identifier.id.toLowerCase()); if (existing?.disabled) { // Remove the duplicate disabled extension result.delete(identifier.id.toLowerCase()); } </ins> const profileExtension: IProfileExtension = { identifier, displayName: extension.manifest.displayName }; if (disabled) { profileExtension.disabled = true;


Question:
<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Read our guide about submitting issues: --<!-- Search existing issues to avoid creating duplicates. --<!-- Test using the latest Insiders build to see if your issue has already been fixed: --<!-- Instead of creating your report here, use 'Report Issue' from the 'Help' menu in VS Code to pre-fill useful information. --<!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes, actually this issue has nothing to do with extensions <!-- If you answered No above, use 'Help: Start Extension Bisect' from Command Palette to try to identify the cause. --<!-- Issues caused by an extension need to be reported directly to the extension publisher. The 'Help Report Issue' dialog can assist with this. --- Version: 1.79.1 (user setup) Commit: Date: 2023-06-12T16:14:05.102Z Electron: 22.5.7 Chromium: 108.0.5359.215 16.17.1 V8: 10.8.168.25-electron.0 OS: Windows_NT x64 10.0. Steps to Reproduce: Connect to WSL(Ubuntu ) Profiles =Show Contents... <img width="286" alt="image" src=""As you can see, the extensions of the profile are duplicated. The reason I found is I installed the extensions in WSL again. Maybe It's not a bug. But, the profile should distinguish between extensions installed in the host and WSL. Maybe like this: ESLint - host Disabled ESLint - WSL So that I know which place I install the extension and its enabled/disabled status. When I open the detail page of the duplicated extensions, both of them display an "Extension is enabled on 'WSL: Ubuntu-22.04'" message. What I expect is: The extension is installed and enabled on the host, the message should be "Extension is enabled". The extension is installed and enabled on the WSL, the message should be "Extension is enabled on 'WSL: Ubuntu-22.04'". Does it make sense?
Related on Stack Overflow: . Let me know if there's any debugging steps or details you'd like be to solicit from people in my answer there.
/duplicate
Thanks for creating this issue! We figured it's covering the same as another one we already have. Thus, we closed this one as a duplicate. You can search for . See also our . Happy Coding!
what's it a duplicate of?
I am sorry, I remembered this bug and thought there is an issue already, but there is not. Reopened it.
I guess duplicate only shows for extensions installed in both local VS Code and remote hosts. !
Fixed: Contents show only one instance of the extension

if (!profileExtension.version && preRelease) { profileExtension.preRelease = true; } <del> result.push(profileExtension); </del> <ins> result.set(profileExtension.identifier.id.toLowerCase(), profileExtension); </ins> } <del> return result; </del> <ins> return [...result.values()]; </ins> }); }


Question:
Add the possibility to persist the content hover sizes
To test, please read the following. Currently the implementation of the persistance mechanism of the content hover works as follows: The content hover has a default maximum size which is defined as follows: const defaultMaxHeight = (().height / 4, 250); const defaultMaxWidth = (().width 0.66, 500); Whenever the content hover is resized, the last hover dimensions are stored. Next time the content hover is shown, the maximum dimensions are updated as follows: const currentMaxHeight = (().height / 4, 250, lastHeight); const currentMaxWidth = (().width 0.66, 500, lastWidth); The content hover is rendered naturally within these constraints. If the lastHeight and lastWidth are smaller than the default max dimensions, then the current max dimensions are unchanged. Therefore the next rendering of the content hover will be the same as the initial rendering. Test that the content hover works according to these constraints. There is some discussion going on about how to better implement a persistance mechanism. We could also persist the size for example on a per-token basis in the editor. Let me know what you think is best!
Do you have an example of how it should work? Regardless of how I resize it, it is not remembered.
You may see an example of how it works here. The content hover is resized to a bigger size in the gif. The current max width is increased to a higher value and at the next rendering of the content hover, the widget takes on a bigger size. To see this behavior you should choose a content hover where the content does not fit in the visible widget, where there is a horizontal scrollbar. I opened an issue for persisting the content hover on a per-token basis here: as an alternative idea.

export class ContentHoverWidget extends ResizableContentWidget { public static ID = 'editor.contrib.resizableContentHoverWidget'; <ins> private static _lastDimensions: dom.Dimension = new dom.Dimension(0, 0); </ins> private _visibleData: ContentHoverVisibleData | undefined; private _positionPreference: ContentWidgetPositionPreference | undefined;


Question:
Add the possibility to persist the content hover sizes
To test, please read the following. Currently the implementation of the persistance mechanism of the content hover works as follows: The content hover has a default maximum size which is defined as follows: const defaultMaxHeight = (().height / 4, 250); const defaultMaxWidth = (().width 0.66, 500); Whenever the content hover is resized, the last hover dimensions are stored. Next time the content hover is shown, the maximum dimensions are updated as follows: const currentMaxHeight = (().height / 4, 250, lastHeight); const currentMaxWidth = (().width 0.66, 500, lastWidth); The content hover is rendered naturally within these constraints. If the lastHeight and lastWidth are smaller than the default max dimensions, then the current max dimensions are unchanged. Therefore the next rendering of the content hover will be the same as the initial rendering. Test that the content hover works according to these constraints. There is some discussion going on about how to better implement a persistance mechanism. We could also persist the size for example on a per-token basis in the editor. Let me know what you think is best!
Do you have an example of how it should work? Regardless of how I resize it, it is not remembered.
You may see an example of how it works here. The content hover is resized to a bigger size in the gif. The current max width is increased to a higher value and at the next rendering of the content hover, the widget takes on a bigger size. To see this behavior you should choose a content hover where the content does not fit in the visible widget, where there is a horizontal scrollbar. I opened an issue for persisting the content hover on a per-token basis here: as an alternative idea.

} protected override _resize(size: dom.Dimension): void { <ins> ContentHoverWidget._lastDimensions = new dom.Dimension(size.width, size.height); </ins> this._setAdjustedHoverWidgetDimensions(size); this._resizableNode.layout(size.height, size.width); this._setResizableNodeMaxDimensions();


Question:
Add the possibility to persist the content hover sizes
To test, please read the following. Currently the implementation of the persistance mechanism of the content hover works as follows: The content hover has a default maximum size which is defined as follows: const defaultMaxHeight = (().height / 4, 250); const defaultMaxWidth = (().width 0.66, 500); Whenever the content hover is resized, the last hover dimensions are stored. Next time the content hover is shown, the maximum dimensions are updated as follows: const currentMaxHeight = (().height / 4, 250, lastHeight); const currentMaxWidth = (().width 0.66, 500, lastWidth); The content hover is rendered naturally within these constraints. If the lastHeight and lastWidth are smaller than the default max dimensions, then the current max dimensions are unchanged. Therefore the next rendering of the content hover will be the same as the initial rendering. Test that the content hover works according to these constraints. There is some discussion going on about how to better implement a persistance mechanism. We could also persist the size for example on a per-token basis in the editor. Let me know what you think is best!
Do you have an example of how it should work? Regardless of how I resize it, it is not remembered.
You may see an example of how it works here. The content hover is resized to a bigger size in the gif. The current max width is increased to a higher value and at the next rendering of the content hover, the widget takes on a bigger size. To see this behavior you should choose a content hover where the content does not fit in the visible widget, where there is a horizontal scrollbar. I opened an issue for persisting the content hover on a per-token basis here: as an alternative idea.

} private _layout(): void { <del> const height = Math.max(this._editor.getLayoutInfo().height / 4, 250); </del> <ins> const height = Math.max(this._editor.getLayoutInfo().height / 4, 250, ContentHoverWidget._lastDimensions.height); const width = Math.max(this._editor.getLayoutInfo().width * 0.66, 500, ContentHoverWidget._lastDimensions.width); </ins> const { fontSize, lineHeight } = this._editor.getOption(EditorOption.fontInfo); const contentsDomNode = this._hover.contentsDomNode; contentsDomNode.style.fontSize = `${fontSize}px`; contentsDomNode.style.lineHeight = `${lineHeight / fontSize}`; <del> this._setContentsDomNodeMaxDimensions(Math.max(this._editor.getLayoutInfo().width * 0.66, 500), height); </del> <ins> this._setContentsDomNodeMaxDimensions(width, height); </ins> } private _updateFont(): void {


Question:
Add the possibility to persist the content hover sizes
To test, please read the following. Currently the implementation of the persistance mechanism of the content hover works as follows: The content hover has a default maximum size which is defined as follows: const defaultMaxHeight = (().height / 4, 250); const defaultMaxWidth = (().width 0.66, 500); Whenever the content hover is resized, the last hover dimensions are stored. Next time the content hover is shown, the maximum dimensions are updated as follows: const currentMaxHeight = (().height / 4, 250, lastHeight); const currentMaxWidth = (().width 0.66, 500, lastWidth); The content hover is rendered naturally within these constraints. If the lastHeight and lastWidth are smaller than the default max dimensions, then the current max dimensions are unchanged. Therefore the next rendering of the content hover will be the same as the initial rendering. Test that the content hover works according to these constraints. There is some discussion going on about how to better implement a persistance mechanism. We could also persist the size for example on a per-token basis in the editor. Let me know what you think is best!
Do you have an example of how it should work? Regardless of how I resize it, it is not remembered.
You may see an example of how it works here. The content hover is resized to a bigger size in the gif. The current max width is increased to a higher value and at the next rendering of the content hover, the widget takes on a bigger size. To see this behavior you should choose a content hover where the content does not fit in the visible widget, where there is a horizontal scrollbar. I opened an issue for persisting the content hover on a per-token basis here: as an alternative idea.

} private _updateContentsDomNodeMaxDimensions() { <del> const width = Math.max(this._editor.getLayoutInfo().width * 0.66, 500); const height = Math.max(this._editor.getLayoutInfo().height / 4, 250); </del> <ins> const height = Math.max(this._editor.getLayoutInfo().height / 4, 250, ContentHoverWidget._lastDimensions.height); const width = Math.max(this._editor.getLayoutInfo().width * 0.66, 500, ContentHoverWidget._lastDimensions.width); </ins> this._setContentsDomNodeMaxDimensions(width, height); }


Question:
Testing I started the Troubleshoot issue flow and it took a long time to create my initial profile. All I had was a status bar item which took me a while to discover (I actually thought something else went wrong). I would love to see and editor / web view better guiding me through that process by: listing the steps and adding check marks when done showing me the number of bisects still necessary giving me a final report.
<img width="258" alt="capture" src=""
We should also have a UI to always stop the process (see ) for a situation where this is useful
I now see that there is a notification for each step. This makes it better, so may be a simple thing to do is to show a notificatio with progress when the profile is created instead of a simple status bar item.
Actually, setting up the trouble shooting profile should be fast and instant.
Was not for me :-(
Following notification is shown now !

} const originalProfile = this.userDataProfileService.currentProfile; <del> await this.userDataProfileImportExportService.createTemporaryProfile(this.userDataProfileService.currentProfile, localize('troubleshoot issue', "Troubleshoot Issue"), true); </del> <ins> await this.userDataProfileImportExportService.createTroubleshootProfile(); </ins> this.state = new TroubleShootState(TroubleshootStage.EXTENSIONS, originalProfile.id); await this.resume(); }


Question:
Testing I started the Troubleshoot issue flow and it took a long time to create my initial profile. All I had was a status bar item which took me a while to discover (I actually thought something else went wrong). I would love to see and editor / web view better guiding me through that process by: listing the steps and adding check marks when done showing me the number of bisects still necessary giving me a final report.
<img width="258" alt="capture" src=""
We should also have a UI to always stop the process (see ) for a situation where this is useful
I now see that there is a notification for each step. This makes it better, so may be a simple thing to do is to show a notificatio with progress when the profile is created instead of a simple status bar item.
Actually, setting up the trouble shooting profile should be fast and instant.
Was not for me :-(
Following notification is shown now !

} } <del> async createTemporaryProfile(profile: IUserDataProfile, name: string, extensionsDisabled: boolean): Promise<void> { const userDataProfilesExportState = this.instantiationService.createInstance(UserDataProfileExportState, profile, extensionsDisabled); </del> <ins> async createTroubleshootProfile(): Promise<void> { const userDataProfilesExportState = this.instantiationService.createInstance(UserDataProfileExportState, this.userDataProfileService.currentProfile, true); </ins> try { <del> const profileTemplate = await userDataProfilesExportState.getProfileTemplate(name, undefined); await this.importAndSwitch(profileTemplate, true, true, extensionsDisabled, localize('import', "Create Profile")); </del> <ins> const profileTemplate = await userDataProfilesExportState.getProfileTemplate(localize('troubleshoot issue', "Troubleshoot Issue"), undefined); await this.progressService.withProgress({ location: ProgressLocation.Notification, delay: 1000, sticky: true, }, progress => this.importAndSwitchWithProgress(profileTemplate, true, true, true, message => progress.report({ message: localize('troubleshoot profile progress', "Setting up Troubleshoot Profile: {0}", message) }))); </ins> } finally { userDataProfilesExportState.dispose(); }


Question:
Testing I started the Troubleshoot issue flow and it took a long time to create my initial profile. All I had was a status bar item which took me a while to discover (I actually thought something else went wrong). I would love to see and editor / web view better guiding me through that process by: listing the steps and adding check marks when done showing me the number of bisects still necessary giving me a final report.
<img width="258" alt="capture" src=""
We should also have a UI to always stop the process (see ) for a situation where this is useful
I now see that there is a notification for each step. This makes it better, so may be a simple thing to do is to show a notificatio with progress when the profile is created instead of a simple status bar item.
Actually, setting up the trouble shooting profile should be fast and instant.
Was not for me :-(
Following notification is shown now !

command: showWindowLogActionId, }, async (progress) => { progress.report({ message: localize('Importing profile', "{0} ({1})...", title, profileTemplate.name) }); <del> const profile = await this.getProfileToImport(profileTemplate, temporaryProfile); if (!profile) { return undefined; } </del> <ins> return this.importAndSwitchWithProgress(profileTemplate, temporaryProfile, extensions, extensionsDisabled, message => progress.report({ message: `${title} (${profileTemplate.name}): ${message}` })); }); } </ins> <del> if (profileTemplate.settings) { progress.report({ message: localize('progress settings', "{0} ({1}): Applying Settings...", title, profileTemplate.name) }); await this.instantiationService.createInstance(SettingsResource).apply(profileTemplate.settings, profile); } if (profileTemplate.keybindings) { progress.report({ message: localize('progress keybindings', "{0} ({1}): Applying Keyboard Shortcuts...", title, profileTemplate.name) }); await this.instantiationService.createInstance(KeybindingsResource).apply(profileTemplate.keybindings, profile); } if (profileTemplate.tasks) { progress.report({ message: localize('progress tasks', "{0} ({1}): Applying Tasks...", title, profileTemplate.name) }); await this.instantiationService.createInstance(TasksResource).apply(profileTemplate.tasks, profile); } if (profileTemplate.snippets) { progress.report({ message: localize('progress snippets', "{0} ({1}): Applying Snippets...", title, profileTemplate.name) }); await this.instantiationService.createInstance(SnippetsResource).apply(profileTemplate.snippets, profile); } if (profileTemplate.globalState) { progress.report({ message: localize('progress global state', "{0} ({1}): Applying State...", title, profileTemplate.name) }); await this.instantiationService.createInstance(GlobalStateResource).apply(profileTemplate.globalState, profile); } if (profileTemplate.extensions && extensions) { progress.report({ message: localize('progress extensions', "{0} ({1}): Applying Extensions...", title, profileTemplate.name) }); await this.instantiationService.createInstance(ExtensionsResource, extensionsDisabled).apply(profileTemplate.extensions, profile); } </del> <ins> private async importAndSwitchWithProgress(profileTemplate: IUserDataProfileTemplate, temporaryProfile: boolean, extensions: boolean, extensionsDisabled: boolean, progress: (message: string) => void): Promise<IUserDataProfile | undefined> { const profile = await this.getProfileToImport(profileTemplate, temporaryProfile); if (!profile) { return undefined; } </ins> <del> progress.report({ message: localize('switching profile', "{0} ({1}): Applying...", title, profileTemplate.name) }); await this.userDataProfileManagementService.switchProfile(profile); return profile; }); </del> <ins> if (profileTemplate.settings) { progress(localize('progress settings', "Applying Settings...")); await this.instantiationService.createInstance(SettingsResource).apply(profileTemplate.settings, profile); } if (profileTemplate.keybindings) { progress(localize('progress keybindings', "{0}ying Keyboard Shortcuts...")); await this.instantiationService.createInstance(KeybindingsResource).apply(profileTemplate.keybindings, profile); } if (profileTemplate.tasks) { progress(localize('progress tasks', "Applying Tasks...")); await this.instantiationService.createInstance(TasksResource).apply(profileTemplate.tasks, profile); } if (profileTemplate.snippets) { progress(localize('progress snippets', "Applying Snippets...")); await this.instantiationService.createInstance(SnippetsResource).apply(profileTemplate.snippets, profile); } if (profileTemplate.globalState) { progress(localize('progress global state', "Applying State...")); await this.instantiationService.createInstance(GlobalStateResource).apply(profileTemplate.globalState, profile); } if (profileTemplate.extensions && extensions) { progress(localize('progress extensions', "Applying Extensions...")); await this.instantiationService.createInstance(ExtensionsResource, extensionsDisabled).apply(profileTemplate.extensions, profile); } progress(localize('switching profile', " Applying...")); await this.userDataProfileManagementService.switchProfile(profile); return profile; </ins> } private async resolveProfileContent(resource: URI): Promise<string | null> {


Question:
Testing I started the Troubleshoot issue flow and it took a long time to create my initial profile. All I had was a status bar item which took me a while to discover (I actually thought something else went wrong). I would love to see and editor / web view better guiding me through that process by: listing the steps and adding check marks when done showing me the number of bisects still necessary giving me a final report.
<img width="258" alt="capture" src=""
We should also have a UI to always stop the process (see ) for a situation where this is useful
I now see that there is a notification for each step. This makes it better, so may be a simple thing to do is to show a notificatio with progress when the profile is created instead of a simple status bar item.
Actually, setting up the trouble shooting profile should be fast and instant.
Was not for me :-(
Following notification is shown now !

importProfile(uri: URI, options?: IProfileImportOptions): Promise<void>; showProfileContents(): Promise<void>; createFromCurrentProfile(name: string): Promise<void>; <del> createTemporaryProfile(from: IUserDataProfile, name: string, extensionsDisabled: boolean): Promise<void>; </del> <ins> createTroubleshootProfile(): Promise<void>; </ins> setProfile(profile: IUserDataProfileTemplate): Promise<void>; }


Question: Testing After clicking the "Install" entry in the quick pick, there's progress for a few moments, then the quick pick flashes back to showing all the previous entries again, before finally landing on the setup options for the remote extension. !

return markdownTooltip; } <del> private async installAndRunStartCommand(metadata: RemoteExtensionMetadata) { const extensionId = metadata.id; </del> <ins> private async installExtension(extensionId: string) { </ins> const galleryExtension = (await this.extensionGalleryService.getExtensions([{ id: extensionId }], CancellationToken.None))[0]; await this.extensionManagementService.installFromGallery(galleryExtension, {


Question: Testing After clicking the "Install" entry in the quick pick, there's progress for a few moments, then the quick pick flashes back to showing all the previous entries again, before finally landing on the setup options for the remote extension. !

donotIncludePackAndDependencies: false, context: { [EXTENSION_INSTALL_SKIP_WALKTHROUGH_CONTEXT]: true } }); <ins> } private async runRemoteStartCommand(extensionId: string, startCommand: string) { // check to ensure the extension is installed </ins> await retry(async () => { <del> const ext = await this.extensionService.getExtension(metadata.id); </del> <ins> const ext = await this.extensionService.getExtension(extensionId); </ins> if (!ext) { throw Error('Failed to find installed remote extension'); } return ext; }, 300, 10); <del> this.commandService.executeCommand(metadata.startCommand); </del> <ins> this.commandService.executeCommand(startCommand); </ins> this.telemetryService.publicLog2<WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification>('workbenchActionExecuted', { id: 'remoteInstallAndRun', detail: extensionId,


Question: Testing After clicking the "Install" entry in the quick pick, there's progress for a few moments, then the quick pick flashes back to showing all the previous entries again, before finally landing on the setup options for the remote extension. !

quickPick.items = []; quickPick.busy = true; quickPick.placeholder = nls.localize('remote.startActions.installingExtension', 'Installing extension... '); <del> await this.installAndRunStartCommand(remoteExtension); </del> <ins> await this.installExtension(remoteExtension.id); quickPick.hide(); await this.runRemoteStartCommand(remoteExtension.id, remoteExtension.startCommand); </ins> } else { this.telemetryService.publicLog2<WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification>('workbenchActionExecuted', {


Question: Testing After clicking the "Install" entry in the quick pick, there's progress for a few moments, then the quick pick flashes back to showing all the previous entries again, before finally landing on the setup options for the remote extension. !

from: 'remote indicator' }); this.commandService.executeCommand(commandId); <ins> quickPick.hide(); </ins> } <del> quickPick.hide(); </del> } }));


Question:
Testing Format of keybindings is particularly ugly ! !
Does this question accept PR from outsiders?
yes. VS Code does accept PRs!
Thanks!, and I'm going to refer to styles for other widgets, or if we already have styles we like?
It's more complicated than just styles, sadly. We need to use our rich hovers instead of the native hovers... thankfully we did some work recently to plumb a all the way down to the QuickPick. To fix the title bar buttons, you can probably add the hover delegate in into the options of these s: The list will be harder has the buttons get created here: but we can be iterative here and focus on the title bar buttons first. the other issue that has to be addressed is that Monaco: currently doesn't have a HoverDelegate implementation here: so either we need to implement a HoverDelegate in the "standalone" code (aka Monaco) or we need to pass in the right value to tell quick pick to not use a hover delegate and use native hovers instead. So yeah... it's a bit more complicated than styles unfortunately
Sorry to reply late, thank you for your help! I will start learning the relevant code here over the weekend, hope it goes well!
It is very convenient to create rich hover based on the clues you provide!(Please ignore his style and content) I'm using method for the time being to set the style: I would like to ask for help, is it the right choice to use this method? If yes, I will continue to improve ps:For Monaco, I haven't started looking at the relevant code, but I will as soon as possible !
On the VS Code (non-Monaco side) we already pass a hover delegate in here: So you should be able to just reuse that instead of
I adapted the title bar, but the buttons in the menu options cannot be easily adapted because they are not available e.g. 'Learn More' in screenshot, next I'm going to learn monaco-related code, for monaco's tabbar, do you know which pages can be easily called show?
we can start with just fixing the title bar buttons if you'd like and then fix the Learn More ones later. We can be iterative :) We still for sure need this before that PR of yours comes in: from
Thanks for your help, I'll go investigate the monaco related code, but it may be later, I'm also stuck with this issue
If you use Node 18, you shouldn't see that issue.
It works for me, I would also like to ask for a simple question: In addition to calling api, is there any scenario in vscode that directly runs monaco? I'm trying to find a link to a monaco input call, but failing
Good question. Here are the steps for running Monaco: What I would recommend is maybe temporarily adding a button to an existing quick pick like the command palette: add a line like: and don't forget to import it:
Thank you for your patience! I will start learning the code
I investigated the existing code and found some problem if I wanted to implement a HoverDelegate in the "standalone" code: We need to use related code, but they are in the , and should not be import this layer, do we need to re-implement a standalone with hover? or lower the code hierarchy to the level, I'm not sure if the conclusion I got is correct, so I still need to ask you for help, thanks!
so before, I provided a default implementation of the here that does nothing: I think what we should do is remove that and allow to be /optional. If it's don't pass it in to the s so that the native hover is used as fallback.
It's better to handle it this way, otherwise it's really difficult to achieve the current situation (especially for me), I'll submit the PR later
I submitted an initial PR, but I'm not sure if I missed some details, and found that one of the tests timed out
Verification on macOS would be easiest I think: Open up a few pickers Hover over different components: description detail quick pick buttons quick pick item buttons None of them should be using native hovers. They should all be using custom hovers.
Is there anything I can do to help? Do we need to replace everything that needs to be replaced with a custom hover,I'm willing to submit a PR to modify these if I can
It's already done! Now we verify everything is working as expected before :)
Are these the old tooltips or the new ones? <img width="275" alt="image" src=""<img width="306" alt="image" src=""This is what I'm seeing.
Yes those look like custom
Actually, the keybinding one isn't... let me capture this in another issue as the class doesn't actually support a hover delegate.

import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; import { AriaRole } from 'vs/base/browser/ui/aria/aria'; import { HoverPosition } from 'vs/base/browser/ui/hover/hoverWidget'; <del> import { IHoverWidget } from 'vs/base/browser/ui/iconLabel/iconHoverDelegate'; </del> <ins> import { IHoverDelegate, IHoverWidget } from 'vs/base/browser/ui/iconLabel/iconHoverDelegate'; </ins> import { IconLabel, IIconLabelValueOptions } from 'vs/base/browser/ui/iconLabel/iconLabel'; import { KeybindingLabel } from 'vs/base/browser/ui/keybindingLabel/keybindingLabel'; import { IListRenderer, IListVirtualDelegate } from 'vs/base/browser/ui/list/list';


Question:
Testing Format of keybindings is particularly ugly ! !
Does this question accept PR from outsiders?
yes. VS Code does accept PRs!
Thanks!, and I'm going to refer to styles for other widgets, or if we already have styles we like?
It's more complicated than just styles, sadly. We need to use our rich hovers instead of the native hovers... thankfully we did some work recently to plumb a all the way down to the QuickPick. To fix the title bar buttons, you can probably add the hover delegate in into the options of these s: The list will be harder has the buttons get created here: but we can be iterative here and focus on the title bar buttons first. the other issue that has to be addressed is that Monaco: currently doesn't have a HoverDelegate implementation here: so either we need to implement a HoverDelegate in the "standalone" code (aka Monaco) or we need to pass in the right value to tell quick pick to not use a hover delegate and use native hovers instead. So yeah... it's a bit more complicated than styles unfortunately
Sorry to reply late, thank you for your help! I will start learning the relevant code here over the weekend, hope it goes well!
It is very convenient to create rich hover based on the clues you provide!(Please ignore his style and content) I'm using method for the time being to set the style: I would like to ask for help, is it the right choice to use this method? If yes, I will continue to improve ps:For Monaco, I haven't started looking at the relevant code, but I will as soon as possible !
On the VS Code (non-Monaco side) we already pass a hover delegate in here: So you should be able to just reuse that instead of
I adapted the title bar, but the buttons in the menu options cannot be easily adapted because they are not available e.g. 'Learn More' in screenshot, next I'm going to learn monaco-related code, for monaco's tabbar, do you know which pages can be easily called show?
we can start with just fixing the title bar buttons if you'd like and then fix the Learn More ones later. We can be iterative :) We still for sure need this before that PR of yours comes in: from
Thanks for your help, I'll go investigate the monaco related code, but it may be later, I'm also stuck with this issue
If you use Node 18, you shouldn't see that issue.
It works for me, I would also like to ask for a simple question: In addition to calling api, is there any scenario in vscode that directly runs monaco? I'm trying to find a link to a monaco input call, but failing
Good question. Here are the steps for running Monaco: What I would recommend is maybe temporarily adding a button to an existing quick pick like the command palette: add a line like: and don't forget to import it:
Thank you for your patience! I will start learning the code
I investigated the existing code and found some problem if I wanted to implement a HoverDelegate in the "standalone" code: We need to use related code, but they are in the , and should not be import this layer, do we need to re-implement a standalone with hover? or lower the code hierarchy to the level, I'm not sure if the conclusion I got is correct, so I still need to ask you for help, thanks!
so before, I provided a default implementation of the here that does nothing: I think what we should do is remove that and allow to be /optional. If it's don't pass it in to the s so that the native hover is used as fallback.
It's better to handle it this way, otherwise it's really difficult to achieve the current situation (especially for me), I'll submit the PR later
I submitted an initial PR, but I'm not sure if I missed some details, and found that one of the tests timed out
Verification on macOS would be easiest I think: Open up a few pickers Hover over different components: description detail quick pick buttons quick pick item buttons None of them should be using native hovers. They should all be using custom hovers.
Is there anything I can do to help? Do we need to replace everything that needs to be replaced with a custom hover,I'm willing to submit a PR to modify these if I can
It's already done! Now we verify everything is working as expected before :)
Are these the old tooltips or the new ones? <img width="275" alt="image" src=""<img width="306" alt="image" src=""This is what I'm seeing.
Yes those look like custom
Actually, the keybinding one isn't... let me capture this in another issue as the class doesn't actually support a hover delegate.

static readonly ID = 'listelement'; <del> constructor(private readonly themeService: IThemeService) { } </del> <ins> constructor( private readonly themeService: IThemeService, private readonly hoverDelegate: IHoverDelegate | undefined, ) { } </ins> get templateId() { return ListElementRenderer.ID;


Question:
Testing Format of keybindings is particularly ugly ! !
Does this question accept PR from outsiders?
yes. VS Code does accept PRs!
Thanks!, and I'm going to refer to styles for other widgets, or if we already have styles we like?
It's more complicated than just styles, sadly. We need to use our rich hovers instead of the native hovers... thankfully we did some work recently to plumb a all the way down to the QuickPick. To fix the title bar buttons, you can probably add the hover delegate in into the options of these s: The list will be harder has the buttons get created here: but we can be iterative here and focus on the title bar buttons first. the other issue that has to be addressed is that Monaco: currently doesn't have a HoverDelegate implementation here: so either we need to implement a HoverDelegate in the "standalone" code (aka Monaco) or we need to pass in the right value to tell quick pick to not use a hover delegate and use native hovers instead. So yeah... it's a bit more complicated than styles unfortunately
Sorry to reply late, thank you for your help! I will start learning the relevant code here over the weekend, hope it goes well!
It is very convenient to create rich hover based on the clues you provide!(Please ignore his style and content) I'm using method for the time being to set the style: I would like to ask for help, is it the right choice to use this method? If yes, I will continue to improve ps:For Monaco, I haven't started looking at the relevant code, but I will as soon as possible !
On the VS Code (non-Monaco side) we already pass a hover delegate in here: So you should be able to just reuse that instead of
I adapted the title bar, but the buttons in the menu options cannot be easily adapted because they are not available e.g. 'Learn More' in screenshot, next I'm going to learn monaco-related code, for monaco's tabbar, do you know which pages can be easily called show?
we can start with just fixing the title bar buttons if you'd like and then fix the Learn More ones later. We can be iterative :) We still for sure need this before that PR of yours comes in: from
Thanks for your help, I'll go investigate the monaco related code, but it may be later, I'm also stuck with this issue
If you use Node 18, you shouldn't see that issue.
It works for me, I would also like to ask for a simple question: In addition to calling api, is there any scenario in vscode that directly runs monaco? I'm trying to find a link to a monaco input call, but failing
Good question. Here are the steps for running Monaco: What I would recommend is maybe temporarily adding a button to an existing quick pick like the command palette: add a line like: and don't forget to import it:
Thank you for your patience! I will start learning the code
I investigated the existing code and found some problem if I wanted to implement a HoverDelegate in the "standalone" code: We need to use related code, but they are in the , and should not be import this layer, do we need to re-implement a standalone with hover? or lower the code hierarchy to the level, I'm not sure if the conclusion I got is correct, so I still need to ask you for help, thanks!
so before, I provided a default implementation of the here that does nothing: I think what we should do is remove that and allow to be /optional. If it's don't pass it in to the s so that the native hover is used as fallback.
It's better to handle it this way, otherwise it's really difficult to achieve the current situation (especially for me), I'll submit the PR later
I submitted an initial PR, but I'm not sure if I missed some details, and found that one of the tests timed out
Verification on macOS would be easiest I think: Open up a few pickers Hover over different components: description detail quick pick buttons quick pick item buttons None of them should be using native hovers. They should all be using custom hovers.
Is there anything I can do to help? Do we need to replace everything that needs to be replaced with a custom hover,I'm willing to submit a PR to modify these if I can
It's already done! Now we verify everything is working as expected before :)
Are these the old tooltips or the new ones? <img width="275" alt="image" src=""<img width="306" alt="image" src=""This is what I'm seeing.
Yes those look like custom
Actually, the keybinding one isn't... let me capture this in another issue as the class doesn't actually support a hover delegate.

const row2 = dom.append(rows, $('.quick-input-list-row')); // Label <del> data.label = new IconLabel(row1, { supportHighlights: true, supportDescriptionHighlights: true, supportIcons: true }); </del> <ins> data.label = new IconLabel(row1, { supportHighlights: true, supportDescriptionHighlights: true, supportIcons: true, hoverDelegate: this.hoverDelegate }); </ins> data.toDisposeTemplate.push(data.label); data.icon = <HTMLInputElement>dom.prepend(data.label.element, $('.quick-input-list-icon'));


Question:
Testing Format of keybindings is particularly ugly ! !
Does this question accept PR from outsiders?
yes. VS Code does accept PRs!
Thanks!, and I'm going to refer to styles for other widgets, or if we already have styles we like?
It's more complicated than just styles, sadly. We need to use our rich hovers instead of the native hovers... thankfully we did some work recently to plumb a all the way down to the QuickPick. To fix the title bar buttons, you can probably add the hover delegate in into the options of these s: The list will be harder has the buttons get created here: but we can be iterative here and focus on the title bar buttons first. the other issue that has to be addressed is that Monaco: currently doesn't have a HoverDelegate implementation here: so either we need to implement a HoverDelegate in the "standalone" code (aka Monaco) or we need to pass in the right value to tell quick pick to not use a hover delegate and use native hovers instead. So yeah... it's a bit more complicated than styles unfortunately
Sorry to reply late, thank you for your help! I will start learning the relevant code here over the weekend, hope it goes well!
It is very convenient to create rich hover based on the clues you provide!(Please ignore his style and content) I'm using method for the time being to set the style: I would like to ask for help, is it the right choice to use this method? If yes, I will continue to improve ps:For Monaco, I haven't started looking at the relevant code, but I will as soon as possible !
On the VS Code (non-Monaco side) we already pass a hover delegate in here: So you should be able to just reuse that instead of
I adapted the title bar, but the buttons in the menu options cannot be easily adapted because they are not available e.g. 'Learn More' in screenshot, next I'm going to learn monaco-related code, for monaco's tabbar, do you know which pages can be easily called show?
we can start with just fixing the title bar buttons if you'd like and then fix the Learn More ones later. We can be iterative :) We still for sure need this before that PR of yours comes in: from
Thanks for your help, I'll go investigate the monaco related code, but it may be later, I'm also stuck with this issue
If you use Node 18, you shouldn't see that issue.
It works for me, I would also like to ask for a simple question: In addition to calling api, is there any scenario in vscode that directly runs monaco? I'm trying to find a link to a monaco input call, but failing
Good question. Here are the steps for running Monaco: What I would recommend is maybe temporarily adding a button to an existing quick pick like the command palette: add a line like: and don't forget to import it:
Thank you for your patience! I will start learning the code
I investigated the existing code and found some problem if I wanted to implement a HoverDelegate in the "standalone" code: We need to use related code, but they are in the , and should not be import this layer, do we need to re-implement a standalone with hover? or lower the code hierarchy to the level, I'm not sure if the conclusion I got is correct, so I still need to ask you for help, thanks!
so before, I provided a default implementation of the here that does nothing: I think what we should do is remove that and allow to be /optional. If it's don't pass it in to the s so that the native hover is used as fallback.
It's better to handle it this way, otherwise it's really difficult to achieve the current situation (especially for me), I'll submit the PR later
I submitted an initial PR, but I'm not sure if I missed some details, and found that one of the tests timed out
Verification on macOS would be easiest I think: Open up a few pickers Hover over different components: description detail quick pick buttons quick pick item buttons None of them should be using native hovers. They should all be using custom hovers.
Is there anything I can do to help? Do we need to replace everything that needs to be replaced with a custom hover,I'm willing to submit a PR to modify these if I can
It's already done! Now we verify everything is working as expected before :)
Are these the old tooltips or the new ones? <img width="275" alt="image" src=""<img width="306" alt="image" src=""This is what I'm seeing.
Yes those look like custom
Actually, the keybinding one isn't... let me capture this in another issue as the class doesn't actually support a hover delegate.

// Detail const detailContainer = dom.append(row2, $('.quick-input-list-label-meta')); <del> data.detail = new IconLabel(detailContainer, { supportHighlights: true, supportIcons: true }); </del> <ins> data.detail = new IconLabel(detailContainer, { supportHighlights: true, supportIcons: true, hoverDelegate: this.hoverDelegate }); </ins> data.toDisposeTemplate.push(data.detail); // Separator data.separator = dom.append(data.entry, $('.quick-input-list-separator')); // Actions <del> data.actionBar = new ActionBar(data.entry); </del> <ins> data.actionBar = new ActionBar(data.entry, this.hoverDelegate ? { hoverDelegate: this.hoverDelegate } : undefined); </ins> data.actionBar.domNode.classList.add('quick-input-list-entry-action-bar'); data.toDisposeTemplate.push(data.actionBar);