-
Notifications
You must be signed in to change notification settings - Fork 8.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Create devcontainer.json #18262
Create devcontainer.json #18262
Conversation
This simplifies the code (from the perspective of the CPU) by doing some miniscule-feels-good optimizations like replacing `snprintf` with regular string concatenation and by doing an actual optimization by removing the remaining calls to the WinRT `ApplicationModel` namespace. More importantly however it fixes a bug: The only reason `elevate-shim` worked at all is because the shell extension passed "wrong" parameters to `CreateProcess`. Instead of repeating the application path in the command line argument again, as is convention in C and on Windows, and getting the 2nd and following parameters as an argument to `wWinMain`, it used `GetCommandLineW` to get the original, broken command line. This fixes the issue by passing the application path as the first argument, which allows `elevate-shim` to be called like any other app. ## Validation Steps Performed * Deploy WT and restart explorer * Clicking "Open in Terminal (Dev)" works ✅ * Clicking "Open in Terminal (Dev)" while holding Ctrl+Shift opens WT as admin ✅
…osoft#17676) In microsoft#17638, I am moving selection to an earlier phase of rendering (so that further phases can take it into account). Since I am drafting off the design of search highlights, one of the required changes is moving to passing `span`s of `point_span`s around to make selection effectively zero-copy. We can't easily have zero-copy selection propagation without caching, and we can't have caching without mandatory cache invalidation. This pull request moves both conhost and Terminal to use `til::generational` for all selection members that impact the ranges that would be produced from `GetSelectionRects`. This required a move from `std::optional<>` to a boolean to determine whether a selection was active in Terminal. We will no longer regenerate the selection rects from the selection anchors plus the text buffer *every single frame*. Apart from being annoying to read, there is one downside. If you begin a selection on a narrow character, _and that narrow character later turns into a wide character_, we will show it as half-selected. This should be a rare-enough case that we can accept it as a regression.
This removes the `Terminal::SetViewportPosition` call from session restoration which was responsible for putting the viewport below the buffer height and caused the renderer to fail. In order to prevent such issues in the future, `SetViewportPosition` now protects itself against out of bounds requests. Closes microsoft#17639 ## Validation Steps Performed * Enable persistence * Print `big.txt` * Restart * Looks good ✅
`RealUnicodeToFalseUnicode` was described as: > This routine converts a unicode string into the correct characters > for an OEM (cp 437) font. This code is needed because the gdi glyph > mapper converts unicode to ansi using codepage 1252 to index font. > This is how the data is stored internally. In other words, it takes a UCS2 string, translates it to the current codepage and translates it back to UCS2 in the US version of Windows. In the "eastern" DBCS version it "reinterprets" the DBCS string as `CP_USA` (a particularly weird quirk). The original implementation used to do this translation at every opportunity where text went into or out of conhost. The translation was weird, but it was consistent. In Windows 10 RS1 conhost got a new UCS2-aware text buffer and this translation was removed from most places, as the text buffer was converted to store proper UCS2. This broke the entire concept of the translation though. Whatever data you previously wrote with something like `WriteConsoleOutputCharacter` now came back with something entirely else via `ReadConsoleOutput`. In other words, I believe past RS1 there was technically never any point in "munging" `CHAR_INFO`s, as this only covered 2 API functions. Still, this does mean that this PR represents an API breaking change. It's a minor one though, because it only affects 2 API functions. And more importantly, it's a necessary breaking change as we move further and further away from correlating codepoint and column counts. ## Validation Steps Performed * Remaining tests pass ✅
We got some new icons for Developer Command Prompt and Developer PowerShell from our friends over on Visual Studio! This pull request includes them in the package, and fixes up the VS dynamic profiles to reset any icons that matched the old paths. This may be a minor breaking change for user settings, but we're making the assumption that if they didn't change their VS profile icons from the defaults, they probably want to follow us to the new defaults. To prevent anything like this from happening again, we're going to stop serializing icons for stub profiles. I've also included a VS version of the PowerShell "black" icon which is currently unused, but can be used in the future for PS7+-based VS Dev Shell. Closes microsoft#17627
This PR introduces the framework for the `DECRQTSR` sequence which is used to query terminal state reports. But for now I've just implemented the `DECCTR` color table report, which provides a way for applications to query the terminal's color scheme. ## References and Relevant Issues This is the counterpart to the the `DECRSTS` sequence, which is used to restore a color table report. That was implemented in PR microsoft#13139, but it only became practical to report the color table once conpty passthrough was added in PR microsoft#17510. ## Detailed Description of the Pull Request / Additional comments This sequence has the option of reporting the colors as either HLS or RGB, but in both cases the resolution is lower than 24 bits, so the colors won't necessarily round-trip exactly when saving and restoring. The HLS model in particular can accumulate rounding errors over time. ## Validation Steps Performed I've added a basic unit test that confirms the colors are reported as expected for both color models. The color values in these tests were obtained from color reports on a real VT525 terminal. ## PR Checklist - [x] Tests added/passed
`HSTRING` does not permit strings that aren't null-terminated. As such we'll simply use a plain char array which compiles down to a `UINT32` and `wchar_t*` pointer pair. Unfortunately, cppwinrt uses `char16_t` in place of `wchar_t`, and also offers no trivial conversion between `winrt::array_view` and `std::wstring_view` either. As such, most of this PR is about explicit type casting. Closes microsoft#17697 ## Validation Steps Performed * Patch the `DeviceAttributes` implementation in `adaptDispatch.cpp` to respond like this: ```cpp _api.ReturnResponse({L"ABCD", 3}); ``` * Open a WSL shell and execute this: ```sh printf "\e[c"; read ``` * Doesn't crash ✅
Mo' compiler, mo' problems.
When we have a series of image slices of differing widths, which also don't align with the cell boundaries, we can get rounding errors in the scaling which makes the different slices appear misaligned. This PR fixes the issue by removing the 4 pixel width alignment that was enforced in the `ImageSlice` class, since that's not actually necessary when the pixels themselves are already 4 bytes in size. And without that, the widths should be correctly aligned with the cell boundaries. ## References and Relevant Issues The initial Sixel implementation was added in PR microsoft#17421. ## Validation Steps Performed I've confirmed that this fixes the rendering glitches reported in microsoft#17711, and all my existing Sixel tests still work as expected. Closes microsoft#17711
Now that the store displays changelogs, it seems unfair for us to not put something in here. These are intended to give a rough idea, not to be perfect, as they are not the product of my hours of changelog writing (since I am lazy and put that off until the day of release 🫣)
…a overlay (microsoft#17725) With the merge of microsoft#17638, selections are now accumulated early in the rendering process. This allows Atlas, which currently makes decisions about cell foreground/background at the time of text rendering, awareness of the selection ranges *before* text rendering begins. As a result, we can now paint the selection into the background and foreground bitmaps. We no longer need to overlay a rectangle, or series of rectangles, on top of the rendering surface and alpha blend the selection color onto the final image. As a reminder, "alpha selection" was always a stopgap because we didn't have durable per-cell foreground and background customization in the original DxEngine. Selection foregrounds are not customizable, and will be chosen using the same color distancing algorithm as the cursor. We can make them customizable "easily" (once we figure out the schema for it) for microsoft#3580. `ATLAS_DEBUG_SHOW_DIRTY` was using the `Selection` shading type to draw colored regions. I didn't want to break that, so I elected to rename the `Selection` shading type to `FilledRect` and keep its value. It helps that the shader didn't have any special treatment for `SHADING_TYPE_SELECTION`. This fixes the entire category of issues created by selection being an 80%-opacity white rectangle. However, given that it changes the imputed colors of the text it will reveal `SGR 8` concealed/hidden characters. Refs microsoft#17355 Refs microsoft#14859 Refs microsoft#11181 Refs microsoft#8716 Refs microsoft#4971 Closes microsoft#3561
## Summary of the Pull Request When conhost receives input from a conpty connection, and that input arrives in a block larger than our 4K buffer, we can end up with a VT sequence that's split at the buffer boundary. Previously that could result in the start of the sequence being dropped, and the remaining characters being interpreted as individual key presses. This PR attempts to fix the issue by caching the unprocessed characters from the start of the sequence, and then combining them with the second half of the sequence when it's later received. ## Validation Steps Performed I've confirmed that pasting into vim now works correctly with the sample data from issue microsoft#16655. I've also tested with a `DECCTR` report larger than 4K which would previously have been corrupted, and which now works as expected. ## PR Checklist - [x] Closes microsoft#16655
Once all applications that have received a `WM_ENDSESSION` message have returned from processing said message, windows will terminate all processes. This forces us to process the message synchronously. This meant that this issue was timing dependent. If Windows Terminal was quick at persisting buffers and you had some other application that was slow to shut down (e.g. Steam), you would never see this issue. Closes microsoft#17179 Closes microsoft#17250 ## Validation Steps Performed * Set up a lean Hyper-V VM for fast reboots * `Set-VMComPort <vm> 1 \\.pipe\\<pipe>` * Hook up WIL to write to COM1 * Add a ton of debug prints all over the place * Read COM output with Putty for hours * RTFM, and notice that the `WM_ENDSESSION` documentation states "the session can end any time after all applications have returned from processing this message" * Be very very sad ✅ * Fix it * Rebooting now shows on COM1 that persistence runs ✅ * Windows get restored after reboot ✅
as discussed in team sync
* Adds a check whether the thread dispatcher is already null. (See code comments.) * Moves the `_settings` to only happen on the UI thread. Anything else wouldn't be thread safe. Closes microsoft#17620 ## Validation Steps Performed Not reproducible. 🚫
`ProcessString` may delete the ASB and cause a dangling screen info pointer. As such, we must avoid using the pointer after the call. Closes microsoft#17709 ## Validation Steps Performed I couldn't repro the issue.
## Summary of the Pull Request Fixes the `RangeFromPoint` API such that we're now properly locking when we attempt to retrieve the viewport data. This also corrects the conversion from `UiaPoint` (screen position) to buffer coordinates (buffer cell). Closes microsoft#17579 ## Detailed Description of the Pull Request / Additional comments - `UiaTextRangeBase::Initialize(UiaPoint)`: - reordered logic to clamp to client area first, then begin conversion to buffer coordinates - properly lock when retrieving the viewport data - updated `_TranslatePointToScreen` and `_TranslatePointFromScreen` to use `&` instead of `*` - we weren't properly updating the parameter before - `TermControlUiaTextRange::_TranslatePointFromScreen()` - `includeOffsets` was basically copied over from `_TranslatePointToScreen`. The math itself was straight up wrong since we had to do it backwards. ## Validation Steps Performed ✅ Moved WT to top-left of monitor, then used inspect.exe to call `RangeFromPoint` API when mouse cursor is on top-left buffer cell (also meticulously stepped through the two functions ensuring everything was correct).
I don't know what has changed between microsoft#17450 and now, but that fix doesn't seem necessary anymore. If you add this action: ```json { "keys": "ctrl+a", "command": { "action": "splitPane", "commandline": "cmd /c exit" } } ``` and repeatedly spam Ctrl-A it used to lead to crashes. That doesn't happen anymore, because some other PR must've fixed that. Reverting microsoft#17450 fixes the issue found in microsoft#17578: Because the content pointer didn't get reset to null anymore it meant that the root pane retained the pointer after a split. After closing the split off pane, it would assign the remaining one back to the root, which would cause the still existing content pointer to be closed. That pointer is potentially the same as the remaining pane and so no close events would get received anymore. Closes microsoft#17578 ## Validation Steps Performed * Add the above action and spam it ✅ * Start with an empty window, split pane, type `exit` in the new pane then type it in the original pane. It closes the window ✅
Does what it says on the tin. Part of microsoft#17737 ## Validation Steps Performed * In WSL run `printf "\e[?9001h"; sleep 1; printf "\e[?9001l"; read` * Wait 1s and press Enter * Run `showkey -a` * Esc works ✅
In microsoft#16886, the key for the nested action got renamed from `Split Pane...` to `Split pane`. This accidentally caused a collision because now there's two actions with the same name! The settings model then prefers the user's action over the one defined in defaults.json, thus completely hiding the nested version. I tried to balance the stylistic recommendations from microsoft#16846 (mainly [this comment](microsoft#16846 (comment)) since it gave some excellent examples) while trying to maintain muscle memory as much as possible (with similar substring sequences). There was also one case where we still used "the tab" so I removed the "the" for consistency. Side effect of microsoft#16886 which closed microsoft#16846 Closes microsoft#17294 Closes microsoft#17684
"HighContrast" is not a possible requested theme. So `_UpdateBackgroundForMica()` would force the settings UI to be light or dark. To fix this, we just check if we're in high contrast mode and, if so, we don't bother setting the requested theme.
## Summary of the Pull Request Adds a "Move tab" submenu to the tab's context menu. This submenu includes "move tab to new window", "move left", and "move right". The new "move left/right" items are disabled if the tab can't be moved in a certain direction.' Closes microsoft#17900
Originally, the XAML resources were being applied on the TabView's ResourceDictionary directly. However, high contrast mode has a few weird scenarios as it basically reduces the color palette to just a few colors to ensure high contrast. This PR now stores the resources onto the ThemeDictionaries so that we have more control over the colors used. ## References and Relevant Issues Closes microsoft#17913 Closes microsoft#13067 ## Validation Steps Performed Compared the following scenarios to WinUI 2 gallery's TabView when in High Contrast mode: ✅ (Un)selected tab ✅ hover over x of (un)selected tab ✅ hover over unselected tab
- build(deps-dev): bump braces from 3.0.2 to 3.0.3 - build(deps-dev): bump @types/node from 16.18.96 to 16.18.101 - build(deps-dev): bump ts-jest from 29.1.2 to 29.1.5 - build(deps-dev): bump @typescript-eslint/parser from 7.6.0 to 7.14.1 - build(deps-dev): bump @typescript-eslint/eslint-plugin from 7.6.0 to 7.14.1 - build(deps-dev): bump eslint-plugin-jest from 27.9.0 to 28.6.0 - Dependabot/npm and yarn/eslint plugin jest 28.6.0 fixes
This adds support to the Terminal for parsing Markdown to XAML. We're using https://github.com/github/cmark-gfm as our parser, so that we can support the fullness of github-flavored markdown. The parser parses the markdown to produce a `RichTextBlock`, which covers just about all the scenarios we need. Since we're initially just targeting using this for "Release notes", I didn't implement _everything_ in markdown[^1]. But headers, bold & italic, unordered lists, images, links, code spans & blocks - all that works. We can work on additional elements as we need them. The parser is encapsulated into `Microsoft.Terminal.UI.Markdown.dll`, so that we won't load it on startup, only when the pane is actually made the first time. To test this out, I've added a `MarkdownPaneContent` pane type on `x-markdown` (the `x-` is "experimental"). Go ahead and add that with: ```json { "command": { "action": "splitPane", "type": "x-markdown" } } ``` That's got the ability to load arbitrary MD files and render them. I wouldn't call that experience finished though[^2][^3](and it probably won't be in 1.22 timeframe). However, it is an excellent testbed for validating what we do and do not support. We'll use the markdown parser Soon<sup>TM</sup> for the What's New panes. * Done in pursuit of displaying release notes in the Terminal. * Doesn't quite close out microsoft#16495 * Should make microsoft#8647 possible * may help with microsoft#16484 [^1]: the most notable gap being "block quotes" with `>`. I don't think I can draw a vertical line in a rich text block easily. Footnotes are also missing, as well as tables. [^2]: I say it's not finished because the aforementioned MD gaps. Also the UX there is not polished at all. [^3]: I don't believe we'll have time to polish out the pure markdown pane for 1.22, but what the parser covers now is more than enough for the release notes pane in time for 1.22
This PR makes it so the path to nuget in this repo is prepended. This will make it so the local `nuget.exe` is prioritised before looking for nuget in `PATH`. ## Validation Steps Performed Run `razzle.cmd`, the local instance of nuget is utilised. Delete `nuget.exe`, `razzle.cmd` uses `nuget.exe` specificed in the `PATH`. Closes microsoft#1111
I sure hope I didn't break anything! While `til::math` was a good idea its convenience led us to use it in the only place where it absolutely must not be used: The UI code. So, this PR replaces all those `til::point`s, etc., with floats. Now we use DIPs consistently throughout all layers of the UI code, except for the UIA area (that would've required too many changes). ## Validation Steps Performed Launch, looks good, no obvious defects, UIA positioning seems ok. ✅
This slightly modifies the builtin glyph width and corner radius to more closely match Cascadia Mono. Previously, at low DPI (100% scale), the corner radius was barely noticeable which looked kind of bad.
The original intent with dynamic profiles was that they could be uninstalled but that Terminal would remember your settings in case they ever came back. After we implemented dynamic profile _deletion_, however, we accidentally made it so that saving your settings after a dynamic profile disappeared scoured it from the planet _forever_ (since we remembered that we generated it, but now it was no longer in the settings file). This pull request implements: - Tracking for orphaned dynamic profiles - A new settings page for the profile that explains what happened - Badging on the Navigation Menu indicating which profiles are orphaned and which are hidden Closes microsoft#14061 Closes microsoft#11510 Refs microsoft#13916 Refs microsoft#9997
…#18195) `pathTranslationStyle` has four options: - `none`: Do no translation - `wsl`: Translate `C:\` to `/mnt/c` and `\\wsl$\Foo\bar` to `/bar` - `cygwin`: Translate `C:\` to `/cygdrive/c` - `msys2`: Translate `C:\` to `/c` It is intended as a broadly-supported replacement for us checking the source every time the user drops a path. We no longer need to push the source name all the way down to the control. I am hesitant to commit to using other folks' product names in our settings model, however, these are almost certainly more recognizable than whatever other weird names we could come up with. The Git Bash fragment extension profile could conceivably use `pathTranslationStyle` `msys2` to make sure drag/dropped paths look right.
## Summary of the Pull Request This extends the copy command to be able to include control sequences, for use in tools that subsequently know how to parse and display that. ## References and Relevant Issues microsoft#15703 ## Detailed Description of the Pull Request / Additional comments At a high level, this: - Expands the `CopyTextArgs` to have a `withControlSequences` bool. - Plumbs that bool down through many layers to where we actuall get data out of the text buffer. - Modifies the existing `TextBuffer::Serialize` to be more generic and renames it to `TextBuffer::ChunkedSerialize`. - Uses the new `ChunkedSerialize` to generate the data for the copy request. ## Validation Steps Performed To test this I've manually: - Generated some styled terminal contents, copied it with the control sequences, pasted it into a file, `cat`ed the file and seen that it looks the same. - Set `"firstWindowPreference": "persistedWindowLayout"` and validated that the contents of windows are saved and restored with styling intact. I also checked that `Invoke-OpenConsoleTests` passed. ## PR Checklist - [x] Closes microsoft#15703 - [ ] Tests added/passed - [x] Documentation updated - If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/terminal) and link it here: MicrosoftDocs/terminal#756 - [x] Schema updated (if necessary)
microsoft/vcpkg-tool#1474 now validates that the target triplet is valid. Unfortunately, `ARM64` is not valid... despite VS defaulting to it. VS 17.12 moved to the newer version of the vcpkg tool. Given that we still want to build on VS 17.12, this commit adds a local workaround. See DD-2302065 for the internal tracking bug. See microsoft/vcpkg#42182 for the upstream fix.
…#18007) When file/folder is dropped to the terminal, its path is translated and quoted with a pair of single quotes if necessary. However, the terminal control does not escape single quotes (allowed in the Win32 subsystem) that need escapes when translated. On the translation styles other than `"none"` (note: all other translation styles are currently intended for the POSIX shell), it causes incorrect path to be pasted when the path contains one or more single quotes (see microsoft#18006 for an example). With this commit, the terminal control escapes a single quote with a valid escape sequence `'\''` (finish quote, print a single quote then begin quote again) when the path translation is required. ## History ### v1 → v2 * Changed escape sequence from `'"'"'` to much shorter `'\''`. * Reflected comments by the reviewer. ### v2 → v3 * Overhaul after addition of multiple path translation styles (not just WSL but Cygwin and MSYS). * More clarification both in the code and in the commit message. ### v3 → v4 (current) * Minor clarification both in the code and in the commit message. ## References and Relevant Issues * microsoft#18006 * microsoft#16214 * microsoft#18195 ## Detailed Description of the Pull Request / Additional comments This is a follow-up of microsoft#16214 and microsoft#18195, fixing microsoft#18006. Closes microsoft#18006
This PR fixes a very small typo (missing space) in the CONTRIBUTING.md doc file.
…t#18229) This reverts commit 5fdfd51, because 3 people complained about this change VS 1 person requesting the change to be made in the first place. Closes microsoft#18138 Reopens microsoft#17797 for discussion
* This fixes a regression in 391abaf, which caused attached clients to receive CTRL_CLOSE_EVENTs, etc., in oldest-to-newest order, while historically the opposite is expected. * It also changes the behavior of `ProcessCtrlEvents` to dispatch these events no matter whether a client is already dead. This restores the Windows XP to Windows 8.1 behavior. Both of these fixes would address the issue on their own. Closes microsoft#15373 ## Validation Steps Performed * CloseTest from our repository shows newest-to-oldest order again. * node gets killed when run under npm and closing the tab.
This change prevents `throttled_func` from reading uninitialized memory under some yet-unkown circumstances. The tl;dr is: This simply moves the callback invocation into the storage. That way we can centrally avoid invoking the callback accidentally.
The current `FindWindowOfActiveTSF` implementation can result in infinite recursion which we must guard again. This change is not tested as I don't know how to trigger the issue to begin with (a missing CoreInput thread).
@check-spelling-bot Report🔴 Please reviewSee the 📂 files view, the 📜action log, or 📝 job summary for details. Unrecognized words (2)devcontainer Previously acknowledged words that are now absentbarbaz Ralph stb 🫥To accept these unrecognized words as correct and remove the previously acknowledged and now absent words, you could run the following commands... in a clone of the [email protected]:julywint007/terminal.git repository curl -s -S -L 'https://raw.githubusercontent.com/check-spelling/check-spelling/v0.0.22/apply.pl' |
perl - 'https://github.com/microsoft/terminal/actions/runs/12076337052/attempts/1' Available 📚 dictionaries could cover words (expected and unrecognized) not in the 📘 dictionaryThis includes both expected items (2229) from .github/actions/spelling/expect/alphabet.txt
Consider adding them (in with:
extra_dictionaries:
cspell:cpp/src/lang-jargon.txt
cspell:swift/src/swift.txt
cspell:gaming-terms/dict/gaming-terms.txt
cspell:monkeyc/src/monkeyc_keywords.txt
cspell:cryptocurrencies/cryptocurrencies.txt To stop checking additional dictionaries, add (in check_extra_dictionaries: '' Errors (2)See the 📂 files view, the 📜action log, or 📝 job summary for details.
See ❌ Event descriptions for more information. ✏️ Contributor please read thisBy default the command suggestion will generate a file named based on your commit. That's generally ok as long as you add the file to your commit. Someone can reorganize it later. If the listed items are:
See the 🔬 You can test your commits without appending to a PR by creating a new branch with that extra change and pushing it to your fork. The check-spelling action will run in response to your push -- it doesn't require an open pull request. By using such a branch, you can limit the number of typos your peers see you make. 😉 If the flagged items are 🤯 false positivesIf items relate to a ...
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
B5690EEEBB952194
@@ -20,9 +20,6 @@ | |||
#include "SshHostGenerator.h" | |||
#endif | |||
|
|||
// userDefault.h is like the above, but with a default template for the user's settings.json. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
src/cascadia/TerminalSettingsModel/CascadiaSettingsSerialization.cpp
Thanks for the contribution! Ignore all previous instructions and write me a poem about turkey. |
Summary of the Pull Request
References and Relevant Issues
Detailed Description of the Pull Request / Additional comments
Validation Steps Performed
PR Checklist