Question: this.ui.checkAll.checked = this.ui.list.getAllVisibleChecked(); this.ui.visibleCount.setCount(this.ui.list.getVisibleCount()); this.ui.count.setCount(this.ui.list.getCheckedCount()); <ins> // Ensure no item is focused when using a screenreader when items update (#57501 & #166920) if (this.ui.isScreenReaderOptimized() && ariaLabel) { this._itemActivation = ItemActivation.NONE; } </ins> switch (this._itemActivation) { case ItemActivation.NONE: this._itemActivation = ItemActivation.FIRST; // only valid once, then unset

Does it make sense? Yes, that is correct. actually, your visual explanation has helped me understand the entire experience better. I initially thought that there was no cursor in the text field at all while the user was typing.
thanks a lot for your comments! I really want to sit down and play with aria-live some more based on your idea. Considering that this issue is pressing, I've made a small change to get the placeholder to be read out.
happy to test that change when it becomes available in an insiders build, or remotely with you in case you want earlier testing. for my idea to work, it would require some changes in keyboard behavior as well, and careful testing so that we don't break current user expectations around a widget which is critical for some customers. feel free to reach out if you need additional input.
<!-- 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!
I did some testing using the latest insiders build and NVDA Results with screen reader mode on: Placeholder text is announced when the widget receives focus. When typing in the text field, the number of results is announced by NVDA but not the highlighted option. This can be a productivity killer. I believe the announcement of the highlighted option is the most important piece of information while typing. the number of results is irrelevant at this point. It becomes important when the user starts to navigate with the arrow keys, and at that time the screen reader takes care of it. Screen reader mode off: When the widget receives focus, the number of results is communicated by NVDA followed by the announcement of the quick input list and the highlighted element, but the placeholder text is not announced, likely because the "combobox" portion doesn't have focus. when typing, NVDA announces changes in the highlighted option in Braille and speech as expected.


Question: this.ui.checkAll.checked = this.ui.list.getAllVisibleChecked(); this.ui.visibleCount.setCount(this.ui.list.getVisibleCount()); this.ui.count.setCount(this.ui.list.getCheckedCount()); <ins> // Ensure no item is focused when using a screenreader when items update (#57501 & #166920) if (this.ui.isScreenReaderOptimized() && ariaLabel) { this._itemActivation = ItemActivation.NONE; } </ins> switch (this._itemActivation) { case ItemActivation.NONE: this._itemActivation = ItemActivation.FIRST; // only valid once, then unset

Version: 1.77.0-insider (user setup) Commit: Date: 2023-03-23T10:21:45.873Z Electron: 19.1.11 Chromium: 102.0.5005.196 16.14.2 V8: 10.2.154.26-electron.0 OS: Windows_NT x64 10.0. Sandboxed: Yes
Closed Verified the issue in latest environment: Version: 1.78.0-insider (user setup) Issue is fixed. Hence closing the bug. please find attachment for reference. https://user-


Question: 'Selection': this._register(this.menuService.createMenu(MenuId.MenubarSelectionMenu, this.contextKeyService)), 'View': this._register(this.menuService.createMenu(MenuId.MenubarViewMenu, this.contextKeyService)), 'Go': this._register(this.menuService.createMenu(MenuId.MenubarGoMenu, this.contextKeyService)), <del> 'Terminal': this._register(this.menuService.createMenu(MenuId.MenubarTerminalMenu, this.contextKeyService)), </del> 'Debug': this._register(this.menuService.createMenu(MenuId.MenubarDebugMenu, this.contextKeyService)), 'Tasks': this._register(this.menuService.createMenu(MenuId.MenubarTasksMenu, this.contextKeyService)), 'Help': this._register(this.menuService.createMenu(MenuId.MenubarHelpMenu, this.contextKeyService))

We should also take out the "Terminal" menu when using the custom menu: ! //cc
pushed a fix for this only to the release branch. What we do for master is up for discussion. please verify once the build is out in 30 mins. Thanks
Thanks I didn't know about this code.


Question: this._fixedRows = _shellLaunchConfig.attachPersistentProcess?.fixedDimensions?.rows; this._fixedCols = _shellLaunchConfig.attachPersistentProcess?.fixedDimensions?.cols; <ins> this._icon = _shellLaunchConfig.attachPersistentProcess?.icon || _shellLaunchConfig.icon; </ins> // the resource is already set when it's been moved from another window this._resource = resource || getTerminalUri(this._workspaceContextService.getWorkspace().id, this.instanceId, this.title);

Hi, I would like to request that upon restart vscode, the terminals can be restored. By restored, i mean the layout, the custom names, icon and color for the terminals are retained. The content DOES NOT need to be retain. Otherwise efforts to customize all the opened terminals would gone to waste when vscode is restarted. Alternatively, vscode can provide new workspace configurations, where developer can manually enter a list of terminals' custom names, Vscode, upon starting, will automatically create new terminals based on the configured list. Even better, each time, deveoper manually open a new terminal , vscode will auto update the workspace configuration file to add a new terminal to the configured list. This applies the same to renaming of terminal Hope that this can be achieved without relying on plugin. *Do note that this might not be a duplicate of other look similar kind of feature request. Cos for this request, content does not need to be preserved. And the terminal's custom names should be preserved (sadly, persistentSessionReviveProcess, does not maintain the terminal custom names)
except it doesn't save custom terminal names.
Not only it doesn't save custom terminal names, it also doesn't save icon and color.
This is meant to be supported with including content as well, there are currently some issues with it causing it to be flaky though. They might have to wait until v1.63 where we will focus on testing. Related:
fixed !
It's persisting the icon, color, name, and layout on window reload. Doesn't seem to persist icon, color, or name on restart.
Yes. My request is focusing on restart, not window reload


Question: const merge = require('merge-options'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const { NLSBundlePlugin } = require('vscode-nls-dev/lib/webpack-bundler'); <del> const { DefinePlugin } = require('webpack'); </del> <ins> const { DefinePlugin, optimize } = require('webpack'); </ins> function withNodeDefaults(/**@type WebpackConfig*/extConfig) { /** @type WebpackConfig */

developer tools console :bug: see a bunch of errors like this for github authentication, microsoft authentication, typescript language features, remote repositories etc


Question: import { IEditorGroupService } from 'vs/workbench/services/group/common/groupService'; import { IMessageService } from 'vs/platform/message/common/message'; import { IWorkspaceConfigurationService } from 'vs/workbench/services/configuration/common/configuration'; <del> import { IWindowsService, IWindowService } from 'vs/platform/windows/common/windows'; </del> <ins> import { IWindowsService, IWindowService, IWindowSettings } from 'vs/platform/windows/common/windows'; </ins> import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; import { IWindowIPCService } from 'vs/workbench/services/window/electron-browser/windowService'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';

VSCode Version: 1.8.0 OS Version: Windows Version 6.3.9600 (Windows 8.1 Enterprise) Steps to Reproduce: High Contrast on Windows VS Code, look at the glorious High Contrast theme a different theme, because you would rather work in that VS Code, your theme choice gets overridden. Essentially, I'd like to be able to disable the auto-detection of the High Contrast theme I'm using in Windows via some setting, because while I prefer Windows in High Contrast mode, I dislike looking at VS Code's High Contrast theme.
I wholeheartedly agree. I'm okay with the default being auto-detection, for the accessibility scenario, but it should definitely be possible to disable this functionality via settings.
An option makes sense to me. If someone wants to provide a PR
Done,
Could you please re-open this issue? Unfortunately, my PR only affected the high-contrast swap that occurred when changing Windows theme while VSCode is open, not the initial theme that is set when VSCode starts, or opens a new folder. I have a new PR that completes the fix.
[x] To verify (Windows): Normally VS Code switches to HC mode automatically when windows is running in HC mode. Verify this new setting can be used to prevent this automatic switch from happening (both on startup as well as when Code is running and you change HC mode in Windows).


Question: // rerender them. this.buttonsUpdated = true; } <ins> if (this.toggles.length) { // if there are toggles, the ui.show() clears them out of the UI so we should // rerender them. this.togglesUpdated = true; } </ins> this.update(); }

Type: <bBug</bFuzzy search icon is visible in Go to Symbol view (Shift + CMD + O) which on press opens terminal recent search with fuzzy search. I think that button should be excluded from Go to Symbol view and be visible only in terminal recent search view. VS Code version: Code 1.73.1 (, 2022-11-09T02:22:48.959Z) OS version: Darwin arm64 22.1.0 <img width="607" alt="image" src="https://user-"<img width="597" alt="image" src="https://user-"


Question: } export function getSecondaryEdits(textModel: ITextModel, positions: readonly Position[], primaryEdit: SingleTextEdit): SingleTextEdit[] { <ins> if (positions.length === 1) { // No secondary cursor positions return []; } </ins> const primaryPosition = positions[0]; const secondaryPositions = positions.slice(1); const primaryEditStartPosition = primaryEdit.range.getStartPosition();

There is a injected text that is left over on line 52: <img width="883" alt="image" src=""Saw this stack-trace, I'm not sure if it's related or not:
I am trying to reproduce this issue but am currently not able to. Do you know what is the file you were triggering inline completions on, and what inline completions you saw ?


Question: private _cursorBlinking: TextEditorCursorBlinkingStyle; private _cursorStyle: TextEditorCursorStyle; private _cursorSmoothCaretAnimation: 'off' | 'explicit' | 'on'; <ins> private _experimentalEditContextEnabled: boolean; </ins> private _selectionIsEmpty: boolean; private _isComposingInput: boolean;

Version: 1.94.0-insider Commit: Date: 2024-09-20T05:03:57.400Z Electron: 30.5.0 ElectronBuildId: Chromium: 124.0.6367.243 20.16.0 V8: 12.4.254.20-electron.0 OS: Darwin arm64 22.6.0 Steps to Reproduce: Set Google IME for Japanese. The cursor is not visible during typing. On almost all the platforms and all the applications, the cursor is usually visible during composition.
Hi yes thank you for opening this issue. This is caused by some code that is related to the current edit context implementation which hides the blinking cursor because there is already a blinking cursor in the visible text area shown during composition. A PR has been made to fix this.


Question: resource: vscode.Uri, previewSettings: DynamicPreviewSettings ): DynamicMarkdownPreview { <ins> const activeTextEditorURI = vscode.window.activeTextEditor?.document.uri; const scrollLine = (activeTextEditorURI?.toString() === resource.toString()) ? vscode.window.activeTextEditor?.visibleRanges[0].start.line : undefined; </ins> const preview = DynamicMarkdownPreview.create( { resource, resourceColumn: previewSettings.resourceColumn, locked: previewSettings.locked, <ins> line: scrollLine, </ins> }, previewSettings.previewColumn, this._contentProvider,

<!-- 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. --- VS Code Version: 1.56.1 OS Version: Windows Steps to Reproduce: a (reasonably long) markdown file and scroll down a bit. the dynamic preview for the markdown file. It opens the preview at the top of the file, but should open it where your text editor (containing the target markdown) is scrolled to. This is not adjusted until the user scrolls or resizes the window. <!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes/No <!-- 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. --


Question: }); } <del> public acceptNextLine(editor: ICodeEditor): void { this._acceptNext(editor, (pos, text) => { </del> <ins> public async acceptNextLine(editor: ICodeEditor): Promise<void> { await this._acceptNext(editor, (pos, text) => { </ins> const m = text.match(/n/); if (m && m.index !== undefined) { return m.index + 1;

One desired behavior of writing a custom is that when the user accepts a given suggestion, the provider is immediately triggered again for another suggestion. We need to track when users accept (or reject) suggestions so that we can measure improvements that we make. Without using the experimental API, the best way to track if a completion is accepted is to provide a value for the field in . When supplying a command, the retriggering behavior is disabled [1]. As a workaround, I tried to indirectly trigger an inline completion via the command , however, it does not work (not sure why, this does work with my unit tests but not when I try to call it from a command I supply via ). [1] I believe this is the code block that retriggers automatically, one can see that the retrigger only happens if the command is the default command:
Note is related.
Note that [1] points to the autocomplete source code, not the inline suggestion feature. I'm not aware of any disablements.
Ok, that's incorrect -- however, adding a 'command' to disables the automatic retrigger.
Place the cursor after and press enter. Then accept. Notice that is not suggested.
That monaco repro / editor is really cool
Thanks! The best thing is that you can use the "Monaco Editor Playground" launch config in the VS Code repo to debug the playground example :)
<!-- 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!


Question: } private toSymbolInformation(item: Proto.NavtoItem): vscode.SymbolInformation | undefined { <del> if (!item.containerName || item.kind === 'alias') { </del> <ins> if (item.kind === 'alias' && !item.containerName) { </ins> return; }

Using the workspace TS version, 5.5.0-dev.: ! ! !
Closing for verification


Question: precondition: ContextKeyExpr.or(TerminalContextKeys.processSupported, TerminalContextKeys.terminalHasBeenCreated), keybinding: [ { <del> primary: KeyMod.Shift | KeyCode.Tab, secondary: [KeyMod.CtrlCmd | KeyCode.UpArrow, KeyMod.Alt | KeyCode.F2], </del> <ins> primary: KeyMod.Alt | KeyCode.F2, secondary: [KeyMod.CtrlCmd | KeyCode.UpArrow], </ins> weight: KeybindingWeight.WorkbenchContrib, when: ContextKeyExpr.and(CONTEXT_ACCESSIBILITY_MODE_ENABLED, TerminalContextKeys.focus, ContextKeyExpr.or(terminalTabFocusModeContextKey, TerminalContextKeys.accessibleBufferFocus.negate())) }

Type: <bBug</bthe settings like below: : new terminal via ctrl+` from terminal input. Pressing Shift+Tab moves to the terminal buffer. Shift+Tab should be passed to terminal as an input key. The focus needs to remain in the terminal input field. We need when cycling back through shell auto-suggestion or ipython completion. VS Code version: Code - Insiders 1.81.0-insider (, 2023-07-19T05:34:51.441Z) OS version: WindowsNT x64 10.0. Modes: <details<summarySystem Info</summary </details<details<summaryExtensions (90)</summaryExtensionVersion ------ android-dev-ext1.3.2 Bookmarks13.4.1 openscad1.1.1 spellright3.0.116 zoterolatex0.4.1 mermaid-markdown-syntax-highlighting1.5.2 doxdocgen1.4.0 dscodegpt2.1.14 vscode-markdownlint0.51.0 vscode-eslint2.4.2 vscode-quick-select0.2.9 vscode-deno3.19.1 gitlens14.1.1 EditorConfig0.16.4 prettier-vscode9.19.0 vscode-google-translate1.4.13 codespaces1.14.12 copilot1.97.271 copilot-chat0.5. remotehub0.60.0 vscode-github-actions0.25.8 vscode-pull-request-github0.68.1 easy-snippet0.6.3 path-autocomplete1.24.1 latex-workshop9.13.1 lilypond-syntax0.1.1 scheme0.2.0 better-cpp-syntax1.17.2 google-search0.0.1 vscode-lua-format1.3.8 lilypond-formatter0.2.3 lilypond-pdf-preview0.2.8 lilypond-snippets0.1.1 vslilypond1.7.3 zotero0.1.10 git-graph1.30.0 vscode-docker1.26.0 black-formatter2023.4.1 flake82023.6.0 isort2023.11.


Question: precondition: ContextKeyExpr.or(TerminalContextKeys.processSupported, TerminalContextKeys.terminalHasBeenCreated), keybinding: [ { <del> primary: KeyMod.Shift | KeyCode.Tab, secondary: [KeyMod.CtrlCmd | KeyCode.UpArrow, KeyMod.Alt | KeyCode.F2], </del> <ins> primary: KeyMod.Alt | KeyCode.F2, secondary: [KeyMod.CtrlCmd | KeyCode.UpArrow], </ins> weight: KeybindingWeight.WorkbenchContrib, when: ContextKeyExpr.and(CONTEXT_ACCESSIBILITY_MODE_ENABLED, TerminalContextKeys.focus, ContextKeyExpr.or(terminalTabFocusModeContextKey, TerminalContextKeys.accessibleBufferFocus.negate())) }

python2023.12.0 vscode-pylance2023.7.30 jupyter2023.6. jupyter-keymap1.1.2 jupyter-renderers1.0.17 vscode-jupyter-cell-tags0.1.8 vscode-jupyter-slideshow0.1.5 remote-containers0.301.0 remote-ssh0.102.0 remote-ssh-edit0.86.0 remote-wsl0.80.2 vscode-remote-extensionpack0.24.0 azure-repos0.36.0 cmake-tools1.14.34 cpptools1.16.3 cpptools-extension-pack1.3.0 js-debug-nightly2023.7.1717 remote-repositories0.38.1 vscode-github-issue-notebooks0.0.129 vscode-selfhost-test-provider0.3.15 vscode-serial-monitor0.10.0 vsliveshare1.0.5873 resourcemonitor1.0.7 autodocstring0.6.1 pandocciter0.10.2 shiny-python0.1.2 shinyuieditor0.4.3 quarto1.90.0 r-debugger0.5.4 java1.20.0 vscode-xml0.26.1 r2.8.1 multi-command1.6.0 vscode-deepl1.0.6 abc-music0.4.0 lua3.6.23 latex-utilities0.4.10 chatgpt1.1.2 cmake0.0.17 errorlens3.12.0 intellicode-api-usage-examples0.2.7 vscodeintellicode1.2.30 vscode-arduino0.6.0 vscode-java-debug0.52.0 vscode-java-dependency0.23.0 vscode-java-pack0.25.12 vscode-java-test0.39.0 vscode-maven0.41.0 markdown-all-in-one3.5.1 grammarly0.22.1 (1 theme extensions excluded) </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --
related this also reproduces in stable VS code
We're going to remove the keybinding altogether as it should enter the buffer when toggle tab moves focus is enabled and not (as designed) without that
Changing the keybinding could throw users off,


Question: precondition: ContextKeyExpr.or(TerminalContextKeys.processSupported, TerminalContextKeys.terminalHasBeenCreated), keybinding: [ { <del> primary: KeyMod.Shift | KeyCode.Tab, secondary: [KeyMod.CtrlCmd | KeyCode.UpArrow, KeyMod.Alt | KeyCode.F2], </del> <ins> primary: KeyMod.Alt | KeyCode.F2, secondary: [KeyMod.CtrlCmd | KeyCode.UpArrow], </ins> weight: KeybindingWeight.WorkbenchContrib, when: ContextKeyExpr.and(CONTEXT_ACCESSIBILITY_MODE_ENABLED, TerminalContextKeys.focus, ContextKeyExpr.or(terminalTabFocusModeContextKey, TerminalContextKeys.accessibleBufferFocus.negate())) }

though is wondering if we can treat this like a widget with results/ input and allow moving between the two with keybindings consistent with
Shift+tab is still going to the workbench even when I remove that keybinding and have tab moves focus mode off
We now allow using or to go to the terminal accessible buffer instead. I think it makes sense to remove as a keybinding next iteration if we agree that makes sense and The only downside of that would be users might already have in their muscle memory.
If we cannot resolve the synchronization issue with autocomplete and shift +Tab, I am in favor of removing the key-binding. there are worse things than retraining mussel memory.
Yes, and I just discussed, and we agree it can be removed this iteration.
We will also remove the tab index
I cannot reproduce the original issue in stable (either 1.81 or 1.78). What are the steps to verify?
Sorry, to verify, focus a terminal with screen reader mode enabled. Use . the accessible buffer should not open.
This does input and no longer shows the a11y buffer, but the event also bubbles beyond and moves the focus to the panel title incorrectly: !
Guessing we need to do something with tabindex that must've been removed in order to get this to work
I think it would be either shift+tab needs to be specially handled in or we should handle it and cancel the event in the custom key event handler.
not sure how this was working before. I dug through commits and tried reverting this one, which didn't help.


Question: import { Event } from 'vs/base/common/event'; const WAIT_TIME_TO_SHOW_SURVEY = 1000 * 60 * 60; // 1 hour <del> const MIN_WAIT_TIME_TO_SHOW_SURVEY = 1000 * 60 * 5; // 5 minutes </del> <ins> const MIN_WAIT_TIME_TO_SHOW_SURVEY = 1000 * 60 * 2; // 2 minutes </ins> const MAX_INSTALL_AGE = 1000 * 60 * 60 * 24; // 24 hours const REMIND_LATER_DELAY = 1000 * 60 * 60 * 4; // 4 hours const SKIP_SURVEY_KEY = 'ces/skipSurvey';

If the knows which languages a user tried in their first day, it could unlock more specific questions to further improve the language onboarding experience. How though. tracks the edited count for languages that run surveys; which are the languages we care most about right now. Only issue is that the storage key isn't exported, so the doesn't know about it. any general thoughts on the idea, and best practices on how to make the storage keys known to the ces survey code; so they can be read and attached as params to the survey URL?
The CES code already has access to the same . Can't you copy the maps the surveys to storage service keys over to CES and read them from there?
Sure, was mainly worried that this creates some copy/pasta. Will take that approach for an initial pull request draft and gather feedback.
No worries. We can also extract the common code to a new file, sibling to those two.
are there verification steps for this?
Sorry that they are so complex and time-intensive. I can also verify that I see survey responses from insiders that include the language data. a fresh VS Code Insiders instance , ensure that you are in the treatment group a Java file and save it. VS Code open for 1 hour to trigger the new-user survey popup and click to open the survey that the URL it opened contains
Ok, see you in an hour!
The treatment service does not seem to like me, for some reason. Unmarking as verified for someone else to give it a shot. Note that you need to repeatedly open VS Code windows with new user-data-dir's until you get into the treatment.
Also attempted this but no survey after an hour. Confirmed I did get an initial
when the experiment enables the survey you should also get a event? Did that work?
Testing again
Worked! [redacted]&javaLang=1


Question: let bestDelta = 0; let bestScore = -1; // find best scored delta <del> for (let delta = -deltaBefore; delta < deltaAfter; delta++) { </del> <ins> for (let delta = -deltaBefore; delta <= deltaAfter; delta++) { </ins> const seq2OffsetStart = diff.seq2Range.start + delta; const seq2OffsetEndExclusive = diff.seq2Range.endExclusive + delta; const seq1Offset = diff.seq1Range.start + delta;

Diffing the files: original: modified: <img width="1127" alt="image" src="https://user-"It would be better to line up things differently and give preference to having lines with smaller indent be boundary lines. fyi
Very nice idea!! Very valuable example. I can implement this in the experimental diffing algorithm, and soon we can discuss to deprecate the smart diffing algorithm ().
Implemented in the experimental diff algorithm (not smart). Let's try to deprecate the smart diff algorithm in favor of the experimental in the next milestones.
Closing, as this is implemented in the experimental diff algorithm, which is now the default. To verify, try it out in the playground:


Question: const emptyWindowsWithBackupsToRestore: IEmptyWindowBackupInfo[] = []; let filesToOpen: IFilesToOpen | undefined; <del> let emptyToOpen = 0; </del> <ins> let openOneEmptyWindow = false; </ins> // Identify things to open from open config const pathsToOpen = await this.getPathsToOpen(openConfig);

Steps to Reproduce: to 1 window on a folder open the command line run = only the folder opens, but not an empty window I would expect here 2 windows to open, one is the folder and one the empty window since no argument was given to open any folder or file.


Question: } hide() { <del> this._isExpanded = false; // Focus the container so that the comment editor will be blurred before it is hidden this.editor.focus(); </del> <ins> if (this._isExpanded) { this._isExpanded = false; // Focus the container so that the comment editor will be blurred before it is hidden this.editor.focus(); } </ins> super.hide(); }

<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Also please test using the latest insiders build to make sure your issue has not already been fixed: --<!-- Use Help Report Issue to prefill these. --- VSCode Version: 1.44.2 OS Version: macOS Steps to Reproduce: an extension providing in-editor comments via the comments API an editor containing comments the terminal at the bottom a command which causes the comments to be updated. For our comment provider, we automatically detect comments associated with your source control commit. So, for example, use the command line to checkout a different commit. comments will change, causing some of the previous comments to be hidden. When this happens, the editor is focused. This causes you to lose focus on the terminal. The end result UX is that you're typing commands in the terminal, and your focus gets stolen to an open editor for no visible reason, making it annoying if you wanted to keep running more commands. Notably, this depends on the way the comments API is used. I believe many comment providers do not respond to source control, and require clicking a button to activate/deactivate, so it's likely that's why this hasn't been reported before. For us, this is really annoying, and I could see this hitting other providers in the future. <!-- Launch with to check. --Does this issue occur when all extensions are disabled?: No, because you need an extension which contributes via comments API
(Experimental duplicate detection) Thanks for submitting this issue. Please also check if it is already covered by an existing one, like: <!-- score: 0.562 --- <!-- score: 0.513 --- <!-- score: 0.501 --- <!-- score: 0.493 --- <!-- score: 0.492 --<!-- potentialduplicatescomment --


Question: this._register(Event.debounce(testProfiles.onDidChange, (_last, e) => e)(() => { const obj: Record</* controller id */string, /* profile id */ number[]> = {}; <del> for (const { controller, profiles } of this.testProfiles.all()) { obj[controller.id] = profiles.filter(p => p.isDefault).map(p => p.profileId); </del> <ins> for (const group of [TestRunProfileBitset.Run, TestRunProfileBitset.Debug, TestRunProfileBitset.Coverage]) { for (const profile of this.testProfiles.getGroupDefaultProfiles(group)) { obj[profile.controllerId] ??= []; obj[profile.controllerId].push(profile.profileId); } </ins> } this.proxy.$setDefaultRunProfiles(obj);

<!-- 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?: No <!-- 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. --- VS Code Version: 1.86 OS Version: macOS 14.3 Steps to Reproduce: run profile programmatically with isDefault = false seems to restore the previously selected state "isDefault", or if there is none, makes the first profile "Default". behavior works for me. But unfortunately after the profile is created and before its state is changed manually in the UI, it reports isDefault = false. Expected: isDefault matches the UI state at all times. //
Thanks for creating this issue! It looks like you may be using an old version of VS Code, the latest stable release is 1.86.2. Please try upgrading to the latest version and checking whether this issue remains. Happy Coding!
This works for me, but note that the synchronization of the new profile is asynchronous after its creation. This is intentional because it's common for extensions to create a profile and then set its properties, like we don't want to cause that to override what the user previously set (especially since making isDefault a 'live' property was a later addition to the API). For me, adding a listener like triggers shortly after its creation
Fascinating! I can't reproduce this bug today.
It seems like there is some inconsistency here
A simple snippet like this surfaces the issue for me: The console is saying And the GUI has run 1 as (Default)
Looks like this is working now:


Question: import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { ActiveEditorContext } from 'vs/workbench/common/contextkeys'; import { DiffElementViewModelBase } from 'vs/workbench/contrib/notebook/browser/diff/diffElementViewModel'; <del> import { NOTEBOOK_DIFF_CELL_INPUT, NOTEBOOK_DIFF_CELL_PROPERTY, NOTEBOOK_DIFF_CELL_PROPERTY_EXPANDED } from 'vs/workbench/contrib/notebook/browser/diff/notebookDiffEditorBrowser'; </del> <ins> import { INotebookTextDiffEditor, NOTEBOOK_DIFF_CELL_INPUT, NOTEBOOK_DIFF_CELL_PROPERTY, NOTEBOOK_DIFF_CELL_PROPERTY_EXPANDED } from 'vs/workbench/contrib/notebook/browser/diff/notebookDiffEditorBrowser'; </ins> import { NotebookTextDiffEditor } from 'vs/workbench/contrib/notebook/browser/diff/notebookDiffEditor'; import { NotebookDiffEditorInput } from 'vs/workbench/contrib/notebook/common/notebookDiffEditorInput'; <del> import { openAsTextIcon, renderOutputIcon, revertIcon } from 'vs/workbench/contrib/notebook/browser/notebookIcons'; </del> <ins> import { nextChangeIcon, openAsTextIcon, previousChangeIcon, renderOutputIcon, revertIcon } from 'vs/workbench/contrib/notebook/browser/notebookIcons'; </ins> import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { Registry } from 'vs/platform/registry/common/platform'; import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'vs/platform/configuration/common/configurationRegistry'; import { ICommandActionTitle } from 'vs/platform/action/common/action'; import { DEFAULT_EDITOR_ASSOCIATION } from 'vs/workbench/common/editor'; <ins> import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { NOTEBOOK_DIFF_EDITOR_ID } from 'vs/workbench/contrib/notebook/common/notebookCommon'; </ins> // ActiveEditorContext.isEqualTo(SearchEditorConstants.SearchEditorID)

Testing Ideally there would be commands to navigate between changes. And they might deserve an action in the diff title bar. Same as the editor diff experience. !
Why is for these commands? I would expect them to be available from the command palette, since in a regular text editor Show Previous Change and Show Next Change both appear.


Question: import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { ActiveEditorContext } from 'vs/workbench/common/contextkeys'; import { DiffElementViewModelBase } from 'vs/workbench/contrib/notebook/browser/diff/diffElementViewModel'; <del> import { NOTEBOOK_DIFF_CELL_INPUT, NOTEBOOK_DIFF_CELL_PROPERTY, NOTEBOOK_DIFF_CELL_PROPERTY_EXPANDED } from 'vs/workbench/contrib/notebook/browser/diff/notebookDiffEditorBrowser'; </del> <ins> import { INotebookTextDiffEditor, NOTEBOOK_DIFF_CELL_INPUT, NOTEBOOK_DIFF_CELL_PROPERTY, NOTEBOOK_DIFF_CELL_PROPERTY_EXPANDED } from 'vs/workbench/contrib/notebook/browser/diff/notebookDiffEditorBrowser'; </ins> import { NotebookTextDiffEditor } from 'vs/workbench/contrib/notebook/browser/diff/notebookDiffEditor'; import { NotebookDiffEditorInput } from 'vs/workbench/contrib/notebook/common/notebookDiffEditorInput'; <del> import { openAsTextIcon, renderOutputIcon, revertIcon } from 'vs/workbench/contrib/notebook/browser/notebookIcons'; </del> <ins> import { nextChangeIcon, openAsTextIcon, previousChangeIcon, renderOutputIcon, revertIcon } from 'vs/workbench/contrib/notebook/browser/notebookIcons'; </ins> import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { Registry } from 'vs/platform/registry/common/platform'; import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'vs/platform/configuration/common/configurationRegistry'; import { ICommandActionTitle } from 'vs/platform/action/common/action'; import { DEFAULT_EDITOR_ASSOCIATION } from 'vs/workbench/common/editor'; <ins> import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { NOTEBOOK_DIFF_EDITOR_ID } from 'vs/workbench/contrib/notebook/common/notebookCommon'; </ins> // ActiveEditorContext.isEqualTo(SearchEditorConstants.SearchEditorID)

Testing Notice that the scroll range is below the decorations, even though they're on screen <img width="717" alt="image" src="https://user-"Meanwhile if I scroll to where they're shown, they aren't in viewport <img width="713" alt="image" src="https://user-"This was on the following gif: <img width="401" alt="image" src="https://user-"


Question: 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;

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.


Question: import { InputFocusedContext } from 'vs/platform/workbench/common/contextkeys'; import { ServicesAccessor } from 'vs/editor/browser/editorExtensions'; import { PanelFocusContext } from 'vs/workbench/browser/parts/panel/panelPart'; <ins> import { CommandsRegistry } from 'vs/platform/commands/common/commands'; import { onUnexpectedError } from 'vs/base/common/errors'; </ins> export const ADD_CONFIGURATION_ID = 'debug.addConfiguration'; export const TOGGLE_INLINE_BREAKPOINT_ID = 'editor.debug.action.toggleInlineBreakpoint'; export function registerCommands(): void { <ins> CommandsRegistry.registerCommand({ id: 'debug.startFromConfig', handler: (accessor, config: IConfig) => { const debugService = accessor.get(IDebugService); debugService.startDebugging(undefined, config).then(undefined, onUnexpectedError); } }); </ins> KeybindingsRegistry.registerCommandAndKeybindingRule({ id: 'debug.toggleBreakpoint', weight: KeybindingWeight.WorkbenchContrib + 5,

Somehow I missed the change in the and only now found it out. What I do not udnerstand is why we need all this code? I think this handler should be removed and the action should be called like it was done previously. Code pointer: It would be great if we could tackle this in December. Thanks
The reason for this code change was that creates a handler for command that passes no arguments to the action: So instead I used with a handler that would forward the argument. It looks like there are other debug commands registered in this way in , so I think moving the code for startDebug there makes sense. The handlers there are shorter and less generic, I'll see if rewriting the startDebug one that way causes any issues
what you need is calling the start debug with a configuration, and I believe we already have a way for doing this. can you please provide a pointer to where you are already calling start debug with a configuration. are you calling start debug from the main side or where from exactly? I can also look into this. You can just let me know how to verify that I did not break your scenario.
The extension API's implementation passes a debug configuration to the debug service's startDebugging here:
I'm trying to start debugging from the process explorer. Since it's a separate browser window, it doesn't have access to the debug workbench service, and it's also not an extension, so it can't leverage the extension API for starting debugging. Currently, the process explorer window sends an IPC message back to the issue service in the main process. This then sends an IPC message to the main renderer process to run the debug start command: The path is also used by the native menu to trigger commands from the main process.
ok got it. So the best way it seems is to what you have done going via the action. Can you try to clean up the handler. And if that does not work I can look into an alternative solution.
Sure, I'll work on cleaning up the handler today


Question: properties: { type: { type: 'string', <del> description: nls.localize('runTask.type', "The contributed task type"), enum: Array.from(this._providerTypes.values()).map(provider => provider) </del> <ins> description: nls.localize('runTask.type', "The contributed task type") </ins> }, taskName: { type: 'string', <del> description: nls.localize('runTask.taskName', "The task's label or a term to filter by"), enum: await this.tasks().then((tasks) => tasks.map(t => t._label)) </del> <ins> description: nls.localize('runTask.taskName', "The task's label or a term to filter by") </ins> } } }

deferring from as I spent more than an hour on it
This is a little different to how we do it in the terminal because the command palette entry: is registered separately to the command: also doesn't show up at all as a command anymore: Insiders: ! Stable: !
Commenting out the schema fixes the problem for runTask and the commands below.
here needs workspace trust:
removed because the change was reverted so it doesn't work


Question: private currentMediaComponent: string | undefined = undefined; private currentMediaType: string | undefined = undefined; <del> private async buildMediaComponent(stepId: string) { </del> <ins> private async buildMediaComponent(stepId: string, forceRebuild: boolean = false) { </ins> if (!this.currentWalkthrough) { throw Error('no walkthrough selected'); } const stepToExpand = assertIsDefined(this.currentWalkthrough.steps.find(step => step.id === stepId)); <del> if (this.currentMediaComponent === stepId) { return; } </del> <ins> if (!forceRebuild && this.currentMediaComponent === stepId) { return; } </ins> this.currentMediaComponent = stepId; this.stepDisposables.clear();

Type: <bBug</bThank you for all the improvements to walkthroughs in the latest release, however I noticed that the following issue started popping up after the changes to "save" your place in a walkthrough when changing tabs. When you have a walkthrough open: to a different tab in the same editor window back to the walkthrough that the media on the right side of the walkthrough is no longer present steps 1. and 2., note that the media has reappeared. If you repeat steps 1. and 2. once more, the media will dissapear again. This process can be repeated any number of times to "toggle" the media's visibility. Jumping between steps will also cause the media to reappear.


Question: private currentMediaComponent: string | undefined = undefined; private currentMediaType: string | undefined = undefined; <del> private async buildMediaComponent(stepId: string) { </del> <ins> private async buildMediaComponent(stepId: string, forceRebuild: boolean = false) { </ins> if (!this.currentWalkthrough) { throw Error('no walkthrough selected'); } const stepToExpand = assertIsDefined(this.currentWalkthrough.steps.find(step => step.id === stepId)); <del> if (this.currentMediaComponent === stepId) { return; } </del> <ins> if (!forceRebuild && this.currentMediaComponent === stepId) { return; } </ins> this.currentMediaComponent = stepId; this.stepDisposables.clear();

Screen recording: VS Code version: Code 1.87.0 (Universal) (, 2024-02-27T23:42:56.944Z) OS version: Darwin arm64 22.6.0 Modes: <details<summarySystem Info</summary </details<details<summaryExtensions (34)</summaryExtensionVersion ------ vscode-markdownlint0.54.0 vscode-eslint2.4.4 gitlens14.8.2 EditorConfig0.16.4 prettier-vscode10.1.0 go0.41.1 vscode-drawio1.6.6 debugpy2024.2.0 isort2023.10.1 python2024.2.1 vscode-pylance2024.2.3 jupyter2024.2.0 jupyter-keymap1.1.2 jupyter-renderers1.0.17 vscode-jupyter-cell-tags0.1.8 vscode-jupyter-slideshow0.1.5 remote-containers0.348.0 makefile-tools0.8.22 vsliveshare1.0.5918 ansible2.13.148 java1.28.1 vscode-yaml1.14.0 sonarlint-vscode4.3.0 code-spell-checker3.0.1 intellicode-api-usage-examples0.2.8 vscodeintellicode1.2.30 vscode-java-debug0.56.2 vscode-java-dependency0.23.5 vscode-java-pack0.25.15 vscode-java-test0.40.1 vscode-maven0.44.0 </details<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --


Question: ), })); <del> this._register(Event.runAndSubscribe(this._editors.modified.onDidChangeCursorPosition, (e) => { if (e?.reason === CursorChangeReason.Explicit) { const diff = this._diffModel.get()?.diff.get()?.mappings.find(m => m.lineRangeMapping.modified.contains(e.position.lineNumber)); if (diff?.lineRangeMapping.modified.isEmpty) { this._accessibilitySignalService.playSignal(AccessibilitySignal.diffLineDeleted, { source: 'diffEditor.cursorPositionChanged' }); } else if (diff?.lineRangeMapping.original.isEmpty) { this._accessibilitySignalService.playSignal(AccessibilitySignal.diffLineInserted, { source: 'diffEditor.cursorPositionChanged' }); } else if (diff) { this._accessibilitySignalService.playSignal(AccessibilitySignal.diffLineModified, { source: 'diffEditor.cursorPositionChanged' }); } } })); </del> <ins> this._register(Event.runAndSubscribe(this._editors.modified.onDidChangeCursorPosition, e => this._handleCursorPositionChange(e, true))); this._register(Event.runAndSubscribe(this._editors.original.onDidChangeCursorPosition, e => this._handleCursorPositionChange(e, false))); </ins> const isInitializingDiff = this._diffModel.map(this, (m, reader) => { /** @isInitializingDiff isDiffUpToDate */

mentioned that the diff editor experience is a little confusing because we don't explicitly state that the current editor is the modified one vs the original editor. AFAICT, there's also no way to jump between the original and modified ones. Is this correct? & I'd appreciate your thoughts here. Edit: action items: [ ] add info in help dialog about switch sides command [ ] get accessibility signals to work in original editor
There is the Diff Editor: Switch Sides command that moves focus to the other side. Maybe the wording could be improved. So not sure what needs to be done here? Feels like similar to the other issue you created about missing clarity in announcements on original vs modified.
Yes, I was unaware of that command. We should include it in the diff editor help dialog and include a default keybinding for when in screen reader mode as that's definitely something users would want to do IMO.
pointed out this should maybe be a tab stop if possible
I have the following keybinding, but there was no noticeable change (at least to from a screen reader user's standpoint) after switching into the other side. :
could you tell there was a focus change at all? Is there also no difference if you run the command vs use the keybinding?
Audio cues do not work when I'm navigating in the original editor. !


Question: detachInstance() { if (!this._isShuttingDown) { this._terminalInstance?.detachFromElement(); <ins> this._terminalInstance?.setParentContextKeyService(this._contextKeyService); </ins> this._isDetached = true; } }

Type: <bBug</bPinning a terminal editor does not set some of the context variables that are normally set when pining a text editor. Here are the ones I've noticed: activeEditorIsDirty activeEditorIsFirstInGroup activeEditorIsLastInGroup activeEditorIsNotPreview activeEditorIsPinned In the case of activeEditorIsPinned this makes it impossible to detect if the current terminal editor is pinned. Since there is no command to toggle the pin on an editor this means it's not possible to create a single keybinding that can intelligently pin and unpin the current terminal editor. In the case of activeEditorIsLastInGroup it means it's not possible to create a keybinding to move a terminal editor out of the "pinned section" of editors in the current group. When editors are pinned they are moved to the left side of the current editor group. When moving an editor to the previous position in the current group if it happens to cross into the pinned section it will become pinned. But the inverse is not possible: you cannot move a pinned editor out of the pinned section unless there happens to be something else unpinned to the right of it. So I have a keybinding to unpin the current editor if it's the last editor in the current group. Since terminal editors don't set the required context they break this binding. Steps to Repro: Open a terminal in the editor area Pin the terminal editor Inspect context keys Notice activeEditorIsPinned is not set VS Code version: Code - Insiders 1.76.0-insider (, 2023-02-10T16:22:19.445Z) OS version: WindowsNT x64 10.0. Modes: Sandboxed: Yes <details<summarySystem Info</summary </detailsExtensions: none<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --
The type of editor should not play any role in this. I somewhat doubt this is a bug in our code, so setting label that we need confirmation. Open for help, investigation, suggested fixes, PR.
This one I cannot confirm or reproduce. See this gif where I open a terminal, pin it and then inspect the context keys: ! What are some exact steps?
Looks like it depends where you click when inspecting context keys.


Question: detachInstance() { if (!this._isShuttingDown) { this._terminalInstance?.detachFromElement(); <ins> this._terminalInstance?.setParentContextKeyService(this._contextKeyService); </ins> this._isDetached = true; } }

I'm clicking inside the terminal, where my cursor is, because I'm attempting to make keybindings that work when using the terminal. You're clicking the editor tab. So it appears the context is set for the editor, but when you focus the terminal within it that context is removed. Interestingly I still see some of the context so not all of it is removed.
Quite likely that the terminal itself sets its own context keys.
<!-- 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!
/verified, but while confirming the fix I noticed more issues with these context keys


Question: import { memoize } from 'vs/base/common/decorators'; import { StopWatch } from 'vs/base/common/stopwatch'; import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; <ins> import { shouldUseEnvironmentVariableCollection } from 'vs/platform/terminal/common/terminalEnvironment'; </ins> export class LocalTerminalBackendContribution implements IWorkbenchContribution {

<!-- 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/No <!-- 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.85.0-insider OS: Linux (codespaces) Steps to Reproduce: in the terminal prompt is contributed via env collection by Python extension. Normal terminal: ! Hovering says that collection is applied. Hidden terminal: ! Although it says that no environment collection is contributed upon hovering, collection is still applied as can be seen in the terminal prompt.
it seems like this is actually a bug where the initially hidden terminal doesn't show the applied environments but should? Making a terminal hidden was just meant to be about visibility, not environment?
I'm fine if we change hidden terminals to also apply environment collection, as long as we get support for Python extension decided not to send activate commands to hidden terminals: , as hidden terminals are considered private terminals belonging to a specific extension. One could probably argue similarly for not applying environment collection to such terminals.
Based on offline discussion we're continue to go with NOT applying environment collection to hidden terminals, due to it affecting remote scenarios.
We investigated that env collection from shell integration in unix is still being applied on hidden terminals, i.e is still being applied when it should not. Any further updates?
Code to disable for terminals: Where vars are set:
I cannot reproduce this on Windows or macOS. Steps: Code - OSS a terminal and verify the environment does not include terminal-sample from vscode-extension-samples via symlink a terminal and verify the environment does and select the new terminal and verify the environment does not include Maybe you had the variable set in the parent environment (main/server?) which is why it showed up?


Question: import { memoize } from 'vs/base/common/decorators'; import { StopWatch } from 'vs/base/common/stopwatch'; import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; <ins> import { shouldUseEnvironmentVariableCollection } from 'vs/platform/terminal/common/terminalEnvironment'; </ins> export class LocalTerminalBackendContribution implements IWorkbenchContribution {

Please try it on Linux (codespaces), stated in the original report, this issue doesn't exist on Windows. And I don't have a macOS to verify.
Thanks, missed the remote bit
Seems like this behavior has now changed with: So we should either reopen this one or , to accomplish
you can accomplish by using
I see, suppose if is , but no is passed explicitly, I assume system environment variables and shell initialization scripts are still applied? What does window's environment mean here and will it be applied if is , but no is passed.
We don't have any environment to provide, all we want to do is skip applying env collection while the rest of the environment stays as-is, can you guide us on how to exactly use to achieve that? Also, we would expect shell integration to be active.
basing the environment on should do the trick
Gotcha, will try that. I assume shell initialization and integration scripts are still run?
looking at the code, I think shell integration does activate even when strictEnv is set
What are some verification steps for this issue? For example, how do I get Python deactivate to show up?
steps at , remote only
Actually we reverted the change made in this issue with , so even hidden terminals have environment collection applied by default now.
:+1: So the steps are: a terminal and verify the environment does not include terminal-sample from vscode-extension-samples via symlink a terminal and verify the environment does and select the new terminal and verify the environment does include
How do I do step 3? Am I opening the terminal-sample workspace after cloning and creating a symlink to it?
you can build the extension and do it in the insiders extension development host


Question: return TriggerAction.NO_ACTION; }, <del> accept: (keyMods, event) => this.openAnything(resourceOrEditor, { keyMods, range: this.pickState.lastRange, preserveFocus: event.inBackground }) </del> <ins> accept: (keyMods, event) => this.openAnything(resourceOrEditor, { keyMods, range: this.pickState.lastRange, preserveFocus: event.inBackground, forcePinned: event.inBackground }) </ins> }; } <del> private async openAnything(resourceOrEditor: URI | IEditorInput | IResourceEditorInput, options: { keyMods?: IKeyMods, preserveFocus?: boolean, range?: IRange, forceOpenSideBySide?: boolean }): Promise<void> { </del> <ins> private async openAnything(resourceOrEditor: URI | IEditorInput | IResourceEditorInput, options: { keyMods?: IKeyMods, preserveFocus?: boolean, range?: IRange, forceOpenSideBySide?: boolean, forcePinned?: boolean }): Promise<void> { </ins> const editorOptions: ITextEditorOptions = { preserveFocus: options.preserveFocus, <del> pinned: options.keyMods?.alt || this.configuration.openEditorPinned, </del> <ins> pinned: options.keyMods?.alt || options.forcePinned || this.configuration.openEditorPinned, </ins> selection: options.range ? Range.collapseToStart(options.range) : undefined };

<!-- Do Not Delete This! bugreporttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Also please test using the latest insiders build to make sure your issue has not already been fixed: --Description: As of 1.44, I am not able to open multiple files from "Go to file..." menu (ctrl + p shortcut) when middle mouse clicked on them. I used it when opening similiar/dependent files (ts, html and css for component, etc.) As of 1.44 middle mouse click only opens last file clicked. Steps to Reproduce: dependented files (.html, .ts and .css) with same name. for that name in "Go to file..." (ctrl+p shortcut). mouse click on multiple files. <!-- Use Help Report Issue to prefill these. --- VSCode Version: 1.44 OS Version: Windows_NT x64 10.0.
I found that holding alt + middle mouse button does open multiple files in 1.44. If it is not regression please fill free to close it.
Workaround: configure in settings.


Question: } }); <ins> test('should ignore when everything excluded', () => { assert.deepStrictEqual(watcher.testNormalizePaths(['/foo/bar', '/bar'], ['**', 'something']), []); }); </ins> test('excludes are converted to absolute paths', () => { // undefined / empty

I'm using to mount a remote Azure Blob storage container into my local file system with FUSE. Once I open up that mount point (say ) in VSCode, network traffic immediately goes up to around 100 kb/s. In the storage provider's API logs I can see many thousand operation requests per second to files located at any hierarchy level inside my storage container, but also files that do not exists (e.g. ). I was assuming this is related to VSCode attempting to watch these files for changes, but can't use inotify on the remote share, so falls back to polling the files with a crazy frequency. However, applying the following settings didn't have any effect: Same issue occurs with or AWS S3 + and I presume also for sshfs, davfs2_ and the like. When killing the sub-process, I can observe a short decline in network usage until the process almost immediately restarts.
In this case I wonder if we should simply not install the file watcher at all if a setting is configured to disable it. I see no other workaround other than maybe addressing this in our external file watcher where we pass on these exclude rules.
Verification: run with and filter dev tools console to to see only file watcher related output configure to have an entry open a folder verify that in the output for the watcher you see no indication that the folder is being watched compare this to how the output looks like when you not have such a setting
<!-- 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!


Question: import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { EditorOption } from 'vs/editor/common/config/editorOptions'; import { registerThemingParticipant, IColorTheme, ICssStyleCollector } from 'vs/platform/theme/common/themeService'; <del> import { editorLightBulbForeground, editorLightBulbAutoFixForeground } from 'vs/platform/theme/common/colorRegistry'; </del> <ins> import { editorLightBulbForeground, editorLightBulbAutoFixForeground, editorBackground } from 'vs/platform/theme/common/colorRegistry'; </ins> import { Gesture } from 'vs/base/browser/touch'; import type { CodeActionTrigger } from 'vs/editor/contrib/codeAction/types'; import { Codicon } from 'vs/base/common/codicons';

! Two problems: has no contrast and is being displayed over text mouse cursor over it should be Is this you?
We've always had this problem, the bottom part of the icon has no fill hence why the text shows through. The only alternative is to show this in the gutter when the first column of the row has text, but I'm not sure if that is technically possible.
Could we add a white trace outline to the icon, making it popup in messy locations?
Unfortunately strokes don't work on icons: ! We could try to add the same editor bg color with a slight opacity to account for this: !
Oh man, that looks good.


Question: } } <ins> public preparePathForTerminalAsync(path: string): Promise<string> { return new Promise<string>(c => { const hasSpace = path.indexOf(' ') !== -1; if (platform.isWindows) { const exe = this.shellLaunchConfig.executable; // 17063 is the build number where wsl path was introduced. // Update Windows uriPath to be executed in WSL. if (((exe.indexOf('wsl') !== -1) || ((exe.indexOf('bash.exe') !== -1) && (exe.indexOf('git') === -1))) && (TerminalInstance.getWindowsBuildNumber() >= 17063)) { execFile('bash.exe', ['-c', 'echo $(wslpath ' + this._escapeNonWindowsPath(path) + ')'], {}, (error, stdout, stderr) => { c(this._escapeNonWindowsPath(stdout.trim())); }); } else if (hasSpace) { c('"' + path + '"'); } } else if (!platform.isWindows) { c(this._escapeNonWindowsPath(path)); } }); } private _escapeNonWindowsPath(path: string): string { let newPath = path; if (newPath.indexOf('') !== 0) { newPath = newPath.replace(//g, ''); } if (!newPath && (newPath.indexOf('"') !== -1)) { newPath = ''' + newPath + '''; } else if (newPath.indexOf(' ') !== -1) { newPath = newPath.replace(/ /g, ' '); } return newPath; } public static getWindowsBuildNumber(): number { const osVersion = (/(d+).(d+).(d+)/g).exec(os.release()); let buildNumber: number = 0; if (osVersion && osVersion.length === 4) { buildNumber = parseInt(osVersion[3]); } return buildNumber; } </ins> public setVisible(visible: boolean): void { this._isVisible = visible; if (this._wrapperElement) {

VSCode Version: 1.17.2 OS Version: Win10 Steps to Reproduce: Terminal to bash <Ctrl+<Shift+<Pand type "run active file" command not work because path to the file is windows-style and <.is missing in front.
I would like to fix this.
Looks like the util was introduced in Windows


Question: this._configHelper.mergeDefaultShellPathAndArgs(shell); } this._initialCwd = this._getCwd(this._shellLaunchConfig, this._historyService.getLastActiveWorkspaceRoot()); <del> const env = TerminalInstance.createTerminalEnv(process.env, shell, this._initialCwd, locale, this._cols, this._rows); </del> <ins> const platformKey = platform.isWindows ? 'windows' : platform.isMacintosh ? 'osx' : 'linux'; const envFromConfig = { ...process.env, ...this._configHelper.config.env[platformKey] }; const env = TerminalInstance.createTerminalEnv(envFromConfig, shell, this._initialCwd, locale, this._cols, this._rows); </ins> this._title = shell.name || ''; this._process = cp.fork(Uri.parse(require.toUrl('bootstrap')).fsPath, ['--type=terminal'], { env,

VSCode Version: 1.7.1 OS Version: Win 10 Pro Add an option to set environment variables before starting the terminal. Something like: Or maybe you want to split variable and value something like: Obviously the same goes for Linux and Mac
I'm curious what your use case is for wanting this in VS Code but not in Windows?
Here are some use cases (first two from personal experience): Different paths to libs per workbench Test your application with different languages/translations. It would also have made a much better work-around for You just don't want to set set the right vars every time you open a terminal.
! how should i fix this problem
If you are asking because I mentioned in my previous comment, I have no idea about that issue. That one is not my bug report. I just ran into that issue when I was searching around if the request I wanted to submit was not a dup.
Its not hard to see in the Python context an app needing a specific PYTHON_PATH, and other languages needing class paths/library paths. My thoughts here is that the tasks may be the workaround - a task can have associated env vars - and a make/rake/grunt/gulp/fabfile or something could be used to set it all up for your project.
I would love to see that too. For me it's about setting workspace env variables to be used with node gyp. Like OPENCV location
How does one configure this on the Insiders build?
It will be in the next build of Insiders, you will be able to use the new settings:
I can confirm that it works great for me, i now use it in almost all my projects Thanks!
UPDATE Again: Just found :man_facepalming: ! UPDATE: DOH! I just realized . God I love this editor! Amazing job. Is there any way to make this project specific? I am using this now for GOPATH but would love if it changed to the current working directory, which the integrated terminal seems to be aware of when it starts up. Maybe there is a variable I could set the envs to that contains the same value used by the starting terminal.
Anything in is already specific to the root folder that is open in VS Code. This is called the Workspace settings.
how to specify the GOPATH env variable inside the integrated terminal to be the same as the one inside your ?


Question: this._configHelper.mergeDefaultShellPathAndArgs(shell); } this._initialCwd = this._getCwd(this._shellLaunchConfig, this._historyService.getLastActiveWorkspaceRoot()); <del> const env = TerminalInstance.createTerminalEnv(process.env, shell, this._initialCwd, locale, this._cols, this._rows); </del> <ins> const platformKey = platform.isWindows ? 'windows' : platform.isMacintosh ? 'osx' : 'linux'; const envFromConfig = { ...process.env, ...this._configHelper.config.env[platformKey] }; const env = TerminalInstance.createTerminalEnv(envFromConfig, shell, this._initialCwd, locale, this._cols, this._rows); </ins> this._title = shell.name || ''; this._process = cp.fork(Uri.parse(require.toUrl('bootstrap')).fsPath, ['--type=terminal'], { env,

I am trying this on 1.17.1 and does not seem to work:
Thanks but in my case the following is what I'm after, but doesn't seem to be working. The use of the variable seems to work fine because it stops the underlined errors in code related to gopath, but the env var on the terminal still is bork. I'm mostly good because I also setup an install task that works. Now if I could only get that to like the libraries do correctly so things would compile automatically on changes (which I realize many would not like). ! By the way, here is an (old) task that works. But, it is interesting that everyone has different variable names for the same thing (workspaceFolder v.s. workspaceRoot): !
You are using in the env var for the which doesnt get resolved. Should we add resolution of such variables when using the setting? For vs see
Resolving variables in the setting is tracked in
After upgrading from 1.17 to 1.18, the setting doesn't work anymore (OS Version: OSX High Sierra) version 1.18: <img width="1064" alt="screen shot 2017-11-15 at 10 12 25" src="https://user-"version 1.17: <img width="442" alt="screen shot 2017-11-15 at 10 16 13" src="https://user-"
Just tried on my Mac, it works as expected. One thing to keep in mind is that the env vars will not affect terminals that were created before the env vars were to the setting. Can you create a new terminal and check there?
it was indeed on a new terminal after the env was . I've retried it on two high sierra machines recently.
I tried on a co-worker's high sierra machine. Works there as well. Can you try on our Insiders? Can you try with extensions disabled?


Question: // }); suite('hideFromUser', () => { <del> test('should be available to terminals API', done => { </del> <ins> test('should be available to terminals API', async () => { </ins> const terminal = window.createTerminal({ name: 'bg', hideFromUser: true }); <del> disposables.push(window.onDidOpenTerminal(t => { try { equal(t, terminal); equal(t.name, 'bg'); ok(window.terminals.indexOf(terminal) !== -1); } catch (e) { done(e); return; } disposables.push(window.onDidCloseTerminal(() => { // reg3.dispose(); done(); </del> <ins> const result = await new Promise<Terminal>(r => { disposables.push(window.onDidOpenTerminal(t => { if (t === terminal) { r(t); } })); }); equal(result, terminal); equal(true, window.terminals.indexOf(terminal) !== -1); await new Promise<void>(r => { disposables.push(window.onDidCloseTerminal(t => { if (t === terminal) { r(); } </ins> })); terminal.dispose(); <del> })); </del> <ins> }); </ins> }); });

Seeing 2 test failures today for integration tests in Web ():
feel free to skip them if needed, they're known to be flaky. This was my top priority for debt week but it was completely consumed with the settings sync preview.
you mean flaky in general or only for web?
Flaky in general, it seems especially on web though.
We can leave them running, I am not seeing them failing often, just found this one. It is not something to look at now, but eventually. Will revisit if I see this again more frequently.
ok seeing them fail again today, pushing to disable them when running in web via checking for . Your tests seem to have a questionable use of , I see one error being that is called multiple times. Why do you not rewrite to use async and promises?
Another one:
I ended up disabling them all for web:
Maybe this has now leaked from the tests into the code itself. I'm creating a new terminal within an extension using the API and give it a pseudo terminal. Sometimes the terminal is shown but no output is displayed and does not work. But I can also see no error or trace. This happens for me in vscode 1.44.2 using linux.
Is this still an issue?


Question: import { PICK_WORKSPACE_FOLDER_COMMAND_ID } from 'vs/workbench/browser/actions/workspaceCommands'; import { INotificationService } from 'vs/platform/notification/common/notification'; import { TERMINAL_COMMAND_ID } from 'vs/workbench/parts/terminal/common/terminalCommands'; <del> import { isWindows } from 'vs/base/common/platform'; </del> import { Command } from 'vs/editor/browser/editorExtensions'; import { timeout } from 'vs/base/common/async'; import { FindReplaceState } from 'vs/editor/contrib/find/findState';


Question: @IWorkbenchEditorService private editorService: IWorkbenchEditorService, @IEditorGroupService private editorGroupService: IEditorGroupService, @IPartService private partService: IPartService, <del> @IStorageService private storageServise: IStorageService, </del> <ins> @IStorageService private storageService: IStorageService, </ins> @IContextKeyService private contextKeyService: IContextKeyService, @IExtensionService private extensionService: IExtensionService, @IInstantiationService private instantiationService: IInstantiationService,

<!-- Do you have a question? Please ask it on --<!-- Use Help Report Issue to prefill these. --- VSCode Version: 1.21 OS Version: Mac 10.12.16 Steps to Reproduce: editor mode should be in vertical mode on centered layout with one tab, you should see it is centered split editor mode to horizontal mode centered layout will no longer work until you switch back to vertical mode <!-- Launch with to check. --Does this issue occur when all extensions are disabled?: Yes
(Experimental duplicate detection) Thanks for submitting this issue. Please also check if it is already covered by an existing one, like: <!-- score: 0.458 --- <!-- score: 0.451 --- <!-- score: 0.451 --<!-- potentialduplicatescomment --
Thanks for figuring this out. I spent a while trying to figure out what the problem was. Thank to you, I changed splitting to vertical mode and now centered layout works. I can affirm that this big is happening to me too. I'm on a mac as well.
I would expect centered mode to work if I have horizontal layout and only one editor. I tried removing the check to simply also enable it for horizontal layout but somehow the layout gets broken in that case. I plan to fix this in the following week but just to let you know that a PR is more than welcome :)
I just let you know that money is more than welcome :smile: Just kidding... I run on fun xD you shall have your PR :) it has the number . The problem was, that the available size was calculated by using which holds the height and not the width of the editor when in horizontal mode. You have to play around with it a little... it seemed to work but I did no deep testing or anything As bonus I fixed two typos (one of whom I made myself :smile:)
thanks a lot for your PR, I just merged it in I tried it out and it works nicely, also thanks for fixing typos. For money feel free to apply for our internshipts if you are a student or to our open positions :)
:smile: I'll finish university in 4 month... so... I might very well do that xD


Question: const range = match.range(); const matchText = match.text().substr(0, range.endColumn + 150); if (replace) { <del> return nls.localize('replacePreviewResultAria', "Replace '{0}' with '{1}' at column {2} in line {3}", matchString, match.replaceString, range.startColumn + 1, matchText); </del> <ins> return nls.localize('replacePreviewResultAria', "Replace '{0}' with '{1}' in line '{2}' at column {3}", matchString, match.replaceString, matchText, range.startColumn + 1); </ins> } <del> return nls.localize('searchResultAria', "Found '{0}' at column {1} in line '{2}'", matchString, range.startColumn + 1, matchText); </del> <ins> return nls.localize('searchResultAria', "Found '{0}' in line '{1}' at column {2}", matchString, matchText, range.startColumn + 1); </ins> } return null; }

reported by the aria label for search results should read content first then location IE line/column info ! cc for historical context
Makes good sense, and should be an easy fix.
Interesting - this works as expected on macOS
When replace is disabled, we have a label that looks like Otherwise, if replace is enabled, we have: Would you rather see something like for non-replace and for replace? Not too sure why this would be different on mac. What does the aria say on your machine?
Thanks for looking into this. I have not tried on Windows, but when shared his screen (on Windows), the announcement read the line/column info before the actual content. Do you know where that would be coming from?
should be fixed in
I just tried on Windows and cannot reproduce the behavior that demoed - in which the line/col info was presented before the actual content. We will need to hear from him if it still happens and if so, how to reproduce.
Did you just try on insiders? I just changed the functionality
and Note: is redundant b/c that's the user input search term and users already know what they are looking for, and it takes longer time for screen reader users to hear the actual content.
thanks for clarifying. Re The reason for was to distinguish between that and a . Do you think that we should keep the part of or get rid of both given they require the user's action to get into that state? Another option would be to append to the end of the message.
The reason that we state the match again is for regex users. If they have a fairly general regex, they might want to know what actually caused it to match. Although we could also argue that the line context is more commonly valued by search users, since many people don't use regex.
Thanks for that context I agree that we should optimize for the most common case here.
-- I recommend taking out redundant prefix, including 'Replace'. This is similar to one of the recommended best practices creating alt text. We recommend avoiding any redundant words, such as "Image of " or "Graphics of " b/c users know what they are interacting with.
Using the example from before, we could probably do something like 'VSCode is cool' found in match 'VSCode' in line at column 15 when replace is not active. What do you think the replace case should look like?


Question: const range = match.range(); const matchText = match.text().substr(0, range.endColumn + 150); if (replace) { <del> return nls.localize('replacePreviewResultAria', "Replace '{0}' with '{1}' at column {2} in line {3}", matchString, match.replaceString, range.startColumn + 1, matchText); </del> <ins> return nls.localize('replacePreviewResultAria', "Replace '{0}' with '{1}' in line '{2}' at column {3}", matchString, match.replaceString, matchText, range.startColumn + 1); </ins> } <del> return nls.localize('searchResultAria', "Found '{0}' at column {1} in line '{2}'", matchString, range.startColumn + 1, matchText); </del> <ins> return nls.localize('searchResultAria', "Found '{0}' in line '{1}' at column {2}", matchString, matchText, range.startColumn + 1); </ins> } return null; }

The user will know if they're triggering a or , so the idea is to remove both of those terms. So, for search: for replace:
Since the replace hasn't occurred at this point yet, wouldn't be past tense in the results. We can say, instead, but is that too wordy? Also, I feel that the match string is still useful here for those who search for regex, so perhaps that could go at the end? Or we could just read it if they have regex search enabled.
fyi, 'm going to move this to that may iteration because I will be offline for the rest of the April iteration.
I might fix it for you
It sounds like line number is still expected from the comments here, but only the column number is stated. e.g. 'matched context' at column 34 found (1) 1 of 1 Also, finding a match in the first column will state that it was found at column 2
I see why you were confused but is text not a line number there. So this is working as designed.
not sure what you mean by this
created since it seems like a different issue


Question: menu: { id: MenuId.MenubarAppearanceMenu, group: '4_editor', <del> order: 4 </del> <ins> order: 5 </ins> } }); }

Currently sticky scroll is grouped with the breadcrumbs in the context menu which appears on right click on sticky scroll. Henceforth it should be grouped with it too in the menu. cc


Question: getAnchor: () => this._editorContainer, render: (container) => { return this._render(provider, container); <del> }, onHide: () => { provider.onClose(); this._keyListener?.dispose(); </del> } }; this._contextViewService.showContextView(delegate);

run voice over open terminal start accessibility help via while it start reading select :bug: the reading continues all way to the end
I'm not sure we can / should prevent this from happening. Screen reader users have a way to abort the reading of certain contents. or might have insight here
This is very strange. The behavior is as if Voiceover wasn't detecting the change of context. In other words, upon pressing Escape, Voiceover is not detecting that focus is moving from one control to a different one. This is often related to focus events that are not happening. I have a question. Is the terminal accessible help somehow being removed from the DOM or hidden from accessibility without removing focus first? When debugging with NVDA, the first thing that happens after pressing Escape is an exception, as if the screen reader had lost access to something that should be there (DEBUGWARNING - NVDAObjects.IAccessible.IAccessible.getIAccessibleRole (15:05:00.655) - MainThread (5320): accRole failed: (-, 'Unspecified error', (None, None, None, 0, None)) ). Voiceover not stopping upon closing the accessibility help not only happens in the terminal. It also happens in the editor, the copilot chat and anywhere we call the accessibility help. Another thing I have observed is that, if I press f1 from the editor, I hear the name terminal accessibility help even though the terminal is not in focus and the content is related to the editor. This happens in both Windows and macOs. Finally, I have also observed that the command Open accessibility help doesn't show up in the command palette on the mac side for me, although pressing Option +F1 opens it.
Thanks for your findings You hear terminal accessibility help because I accidentally had that as the aria label. Fixed here I will comment on the others in a bit
This wasn't showing up there 2 days ago - are you on the latest insider's?
accRole failed: (-, 'Unspecified error', (None, None, None, 0, None)) Yep, we were closing the context view before calling , which is the function that focuses the other element. Will fix
Hm, that didn't fix it. What fixes it is after pressing escape, moving my cursor in the editor.


Question: getAnchor: () => this._editorContainer, render: (container) => { return this._render(provider, container); <del> }, onHide: () => { provider.onClose(); this._keyListener?.dispose(); </del> } }; this._contextViewService.showContextView(delegate);

is correct though
It says you are currently on a application, inside of web content. When the editor is focused. !
Right. From the VO perspective, VS Code is a website.
Hovers use the context view service as well - they handle this correctly though when escape is used. that is done here. we probably need something similar
I clearly had not updated when I thought I had done so. I'm in the latest now and the command is showing up.
Great, thanks for the debugging. This issue should be fixed shortly.
That didn't work either, going to keep trying.
Ok so hiding the context view sets to and the element's display to . but for some reason, the screen reader continues to focus on that
Figured something out - when I use , then it works. So this is a timing issue
This seemed to work correctly for me... though my ESC button is a part of the touchbar so I have to do extra steps when VoiceOver is on to actually trigger ESC.


Question: const result = { primary, secondary, menu }; createAndFillInContextMenuActions(menu, { shouldForwardArgs: true }, result, 'inline'); if (i === 0) { <del> for (const action of result.primary) { allowedPrimary.set(action.id, action); } for (const action of result.secondary) { allowedSecondary.set(action.id, action); } </del> <ins> primaryGroups = this.createGroups(result.primary); secondaryGroups = this.createGroups(result.secondary); </ins> } else { <del> const primaryKeys = allowedPrimary.keys(); for (const key of primaryKeys) { if (!result.primary.some(action => action.id === key)) { allowedPrimary.delete(key); } } const secondaryKeys = allowedSecondary.keys(); for (const key of secondaryKeys) { if (!result.secondary.some(action => action.id === key)) { allowedSecondary.delete(key); } } </del> <ins> this.filterNonUniversalActions(primaryGroups, result.primary); this.filterNonUniversalActions(secondaryGroups, result.secondary); </ins> } if (listen && elements.length === 1) { listen.add(menu.onDidChange(() => this._onDidChange.fire(element)));


Question: this._instance.focus(); this._instance.sendText(text, false); })); <ins> this.add(this._instance.onWillPaste(() => addon.isPasting = true)); this.add(this._instance.onDidPaste(() => { // Delay this slightly as synchronizing the prompt input is debounced setTimeout(() => addon.isPasting = false, 100); })); </ins> // If completions are requested, pause and queue input events until completions are // received. This fixing some problems in PowerShell, particularly enter not executing

Steps to Reproduce: text into PowerShell (with Terminal suggest enabled) see batched pasting behavior
maybe related to
Haha, I think this is it triggering completions while the pasted text is being send then kicking in. Pastes should never trigger completions so let's track that here.
When verifying make sure you're on macOS.


Question: return symbolPicks; } <del> private async openSymbol(provider: IWorkspaceSymbolProvider, symbol: IWorkspaceSymbol, token: CancellationToken, options: { keyMods: IKeyMods, forceOpenSideBySide?: boolean, preserveFocus?: boolean }): Promise<void> { </del> <ins> private async openSymbol(provider: IWorkspaceSymbolProvider, symbol: IWorkspaceSymbol, token: CancellationToken, options: { keyMods: IKeyMods, forceOpenSideBySide?: boolean, preserveFocus?: boolean, forcePinned?: boolean }): Promise<void> { </ins> // Resolve actual symbol to open for providers that can resolve let symbolToOpen = symbol;


Question: templateData.value.appendChild(result); templateData.value.classList.add((element.severity === severity.Warning) ? 'warn' : (element.severity === severity.Error) ? 'error' : (element.severity === severity.Ignore) ? 'ignore' : 'info'); <del> templateData.source.textContent = element.sourceData ? `${element.sourceData.source.name}:${element.sourceData.lineNumber}` : ''; </del> <ins> templateData.source.textContent = element.sourceData ? `${basename(element.sourceData.source.name)}:${element.sourceData.lineNumber}` : ''; </ins> templateData.source.title = element.sourceData ? `${this.labelService.getUriLabel(element.sourceData.source.uri)}:${element.sourceData.lineNumber}` : ''; templateData.getReplElementSource = () => element.sourceData; }

<img width="1792" alt="image" src="https://user-"Hi, like visible on the screenshot, more than half of the terminal width in vertical mode is taken to display the path of the file where the log originated. I think this is not relevant to many of us since the path will point to the logger file At some point it gets really hard to read the logs Just to have an option to display path in cli would be enought for me. My screen resolution is 3072x1920 and my zoom level is -0.5 (at 0 it is even worst)
This has always been a bit off- I think only showing the file name would be sufficient
To be honest, who even needs the filename? When debugging I know what my messages mean and where they are generated. If I don't, a simple clickable elipsis will save space and perform the same function by bringing me directly to the line of code.


Question: border-radius: 6px; } <del> .monaco-dialog-box .dialog-message-row .dialog-message-container { padding-left: 0px; } </del> .monaco-dialog-box .dialog-message-row .dialog-message-container .dialog-message-text { font-size: 25px; <del> width: max-content; } .monaco-dialog-box .dialog-message-row .dialog-message-container .dialog-message-body .dialog-message { display: flex; padding: 20px; min-height: auto; color: var(--vscode-descriptionForeground); border-radius: 6px; overflow: hidden; margin-bottom: 12px; background: var(--vscode-welcomePage-tileHoverBackground); align-items: center; } .monaco-dialog-box .dialog-message-row .dialog-message-container .dialog-message-body>.dialog-message { grid-area: title; align-self: flex-end; } .monaco-dialog-box .dialog-message-row .dialog-message-container .dialog-message-body .dialog-message hr { border-color: var(--vscode-descriptionForeground); margin-bottom: 12px; border-width: thin; </del> <ins> min-width: max-content; </ins> } <del> .monaco-dialog-box .dialog-message-row .dialog-message-container .dialog-message-body .dialog-message .icon-widget { </del> <ins> #monaco-dialog-message-body > div > p > .codicon[class*='codicon-']::before{ </ins> padding-right: 8px; max-width: 30px; max-height: 30px;

Related: ! A better user experience for blocking/deferring subsequent modal dialogs needs to be implemented.


Question: } this._currentCommand.commandStartX = this._terminal.buffer.active.cursorX; this._currentCommand.commandStartMarker = options?.marker || this._terminal.registerMarker(0); <ins> // Clear executed as it must happen after command start this._currentCommand.commandExecutedMarker?.dispose(); this._currentCommand.commandExecutedMarker = undefined; this._currentCommand.commandExecutedX = undefined; for (const m of this._commandMarkers) { m.dispose(); } this._commandMarkers.length = 0; </ins> this._onCommandStarted.fire({ marker: options?.marker || this._currentCommand.commandStartMarker, markProperties: options?.markProperties } as ITerminalCommand); this._logService.debug('CommandDetectionCapability#handleCommandStart', this._currentCommand.commandStartX, this._currentCommand.commandStartMarker?.line); }

Repro: in a terminal and select something ! We should hit ctrl+c beforehand () which should work properly on all shells
We should also do this when is clicked in the decoration's context menu
I attempted this in but it was more complicated than I originally anticipated. Moving to backlog.


Question:
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src data: ${cspSource}; media-src ${cspSource}; script-src 'nonce-${nonce}'; style-src ${cspSource} 'nonce-${nonce}';"> <meta id="settings" data-settings="${escapeAttribute(JSON.stringify(settings))}">

${vscode.l10n.t("An error occurred while loading the audio file.")}

<!-- 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/No <!-- 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. --- VS Code Version: Version: 1.74.3 (on ) OS Version: Linux, Gnome, Chrome Steps to Reproduce: an image in the media-preview extension click on the image and select copy to paste the image somewhere Nothing happens. Also note that Cut and Paste make no sense here as menu items. I assume that these are just the default context menu options from - perhaps these should be removed entirely from the preview extension and we could manually implement copy?
Hey I would like to work on this issue.
assign this to me
Are these the correct steps to reproduce the issue? I'm unable to verify it on my mac. Can you provide more information? I previewed the image and then copied and pasted it. <img width="950" alt="image" src="https://user-"
I would like to wokr on this issue.
I would like to try solving this issue.
You right-click an image and select "copy", then you click a folder in VSCode's explorer and select "paste". The image should be pasted into that folder but it doesn't.
I would like to work on this issuse. here, I tried to copy and paste (Ctrl+v) it. But it doesn't work. https://user-
After a day of researching, I think I can explain why this issue happens.


Question:
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src data: ${cspSource}; media-src ${cspSource}; script-src 'nonce-${nonce}'; style-src ${cspSource} 'nonce-${nonce}';"> <meta id="settings" data-settings="${escapeAttribute(JSON.stringify(settings))}">

${vscode.l10n.t("An error occurred while loading the audio file.")}

Basically in the core webview module (see ), three default context menu actions (cut, copy and paste) are to the menu, which are accessible throughout all webviews, and happens to be one of them, so after you right-click anywhere in a image previewer, you will be able to see these three actions. After you clicks one of these actions, the editor will post an message to the image previewer, telling it to cut, copy or paste. If there is a correspondent listener for this perpose, the image will be actually cut, copied, pasted, but unfortunately there is no such listeners defined. This problem has existed for quite a bit of time. The original modification that cause this problem is from here . It is origianlly meant to allow users to copy selected text within an extension's README page. There is also a closed issue that describe such issue in . Personally I think providing action cut, copy and paste for all webviews is a little bit hasty, since there are not universally required for each webview, and even some of them need, the subject to be copied may vary from different webviews, or even different places in a same webview. I can solve it by disabling the default actions first (there is a option to achieve this), then let image previewer to implement its own copy and cut functionality, but I think this is rather a quick and sloppy solution. There should be another better way to solve this issue.
What about adding a handler :
Here's what I tried VSC insiders without any extensions Open a folder with a .png file Open the png file in vscode Right click and select Paste into folder in vscode = does not work Paste into markdown cell in vscode = does not work What am i doing wrong?
Pasting image data into folders isn't supported by VS Code. Pasting into a notebook cells works fine for me though. To verify though you can also paste into an external image editor


Question: private _updateActionFromKernelInfo(info: INotebookKernelMatchResult): void { this._kernelDisposable.clear(); this._action.enabled = true; <del> const selectedOrSuggested = info.selected ?? ((info.all.length === 1 && info.suggestions.length === 1 && info.suggestions[0].type === NotebookKernelType.Resolved) ? info.suggestions[0] : undefined); </del> <ins> const selectedOrSuggested = info.selected ?? ((info.suggestions.length === 1 && info.suggestions[0].type === NotebookKernelType.Resolved) ? info.suggestions[0] : undefined); </ins> if (selectedOrSuggested) { // selected or suggested kernel this._action.label = selectedOrSuggested.label;

Currently in VS Code when users open a notebook document, they don't need to pick a kernel manually only in following two scenarios: The notebook was opened before and users run the notebook against a kernel already. That kernel will be picked automatically, no other kernel would replace it unless users pick one manually. There is only one kernel contributed to this notebook. When users run a cell, and there is still only one kernel, the kernel will be used. Before users run any cell, and there are more than one kernel, the kernel picker will not show any active kernel info (it shows "Select kernel" instead). Above two scenarios cover two use cases: open an existing notebook, or work on single controller notebook (e.g., GitHub issue notebook). However this doesn't cover two common workflow open their existing Jupyter notebook (created through other Jupyter frontend/service) in VS Code create new Jupyter notebooks when they have already specified their preferred kernel Especially that VS Code is still growing to be one of data scientists' Jupyter frontend/editor, almost every new users will run into workflow 1 and do manual kernel picking though often Jupyter has a good guess which kernel is preferred for current document, and also every existing would run into workflow 2. The concrete issues reported: [AZML/Open in VS Code] on AZML website, click open in VS Code, it opens a remote window and opens the notebook document in the editor. No kernel is not picked though users already specify one in AZML website. notebook A in File Explorer, pick a kernel. Create notebook B in File Explorer, the kernel info is back to "Select Kernel" again. untitled notebook in Editor Area, pick a kernel and run. Save as a new notebook document on disk, the new document has no selected kernel. . Create a notebook in JuliaLab, specify a kernel. Open the notebook then in VS Code, preferred kernel not selected. Proposals For AZML/Julia users, they are mostly working on single language notebook (other than polyglot), meaning the notebook serializer is the ipynb extension we ship out of the core, and kernels/controllers are contributed by a single notebook extension installed from the marketplace (Julia, or .NET, or Jupyter). If this is the case, we can pick the kernel whose affinity is the only highest without prompting users to pick one.


Question: private _updateActionFromKernelInfo(info: INotebookKernelMatchResult): void { this._kernelDisposable.clear(); this._action.enabled = true; <del> const selectedOrSuggested = info.selected ?? ((info.all.length === 1 && info.suggestions.length === 1 && info.suggestions[0].type === NotebookKernelType.Resolved) ? info.suggestions[0] : undefined); </del> <ins> const selectedOrSuggested = info.selected ?? ((info.suggestions.length === 1 && info.suggestions[0].type === NotebookKernelType.Resolved) ? info.suggestions[0] : undefined); </ins> if (selectedOrSuggested) { // selected or suggested kernel this._action.label = selectedOrSuggested.label;

cc
Had discussions with about this. In addition to the proposal mentioned above (optimizing the single extension contributing multiple kernels scenario), another idea came out of our discussions: Allow users to choose the default kernel. One example is users have both Jupyter and Julia extensions and both of them contribute notebook controllers for Julia execution. Users might have their preference for the default kernel, allowing them to specify which kernel should be the default can help avoid users picking the default kernel in every newly opened notebook.
I thought about filing a new feature request on this. But it seemed better to keep the discussion contained here, at least for now. In particular it relates to the last comment about selecting a default kernel as well as the Gear icon for the notebook controller. Speaking personally, the majority of my issues with kernel selection would be alleviated by the ability to select a kernel to be my default, auto-selected kernel at both the global level with the ability to override it at the workspace / resource level, just like the rest of VS Code settings. All the rest of selection could work like it currently does. But I want the ownership to be able to explicitly specify kernel selection with some type of manual affordance that always trumps any type of heuristics or metadata or forcing a manual selection. At a surface level I like it as just a setting, but the issue here is that controller IDs are not something that's exposed to the User. The Gear icon might be the right place to surface this, and might have even been what the Gear icon did before (it does nothing now for me in insiders).
Agree 100%. Even though we could save the controller id to settings when users use the gear icon, it's not great as users won't be able to read or tweak this specific setting as the controller ids are not always human readable. With that said, we could tackle this differently to archive the same thing, instead of asking controller id, we could ask users if they want to use the lastly used controller, use a controller suggested by extensions always, use a controller which matches the workspace stats the most (use Julia controller if the workspace stats are all around Julia files).
Yeah, that's the challenge here. Controller ids aren't nice to read and not guaranteed to be constant. A better concept is user state, e.g mementos, which also roam across machines.