Compare commits

..

76 Commits

Author SHA1 Message Date
Dustin L. Howett
740f9f4452 Fix line endings 2024-07-17 18:30:05 -05:00
Dustin L. Howett
f96be52442 Merge remote-tracking branch 'origin/main' into dev/duhowett/applicableactions 2024-07-17 18:25:30 -05:00
Carlos Zamora
1999366034 Add action for Quick Fix and key binding for Suggestions (#17502)
Adds a keybinding to open the quick fix menu, if one is available. When
the action is used, we also open up the button (if it was collapsed)
because that looks nice.

The `showSuggestions` action is bound to `ctrl+shift+period` by default
to align with VS' "quick actions" feature and VS Code's "quick fix"
feature. This was chosen over binding to `quickFix` because it's more
helpful. The quick fix button is a route for users that prefer to use
the mouse. If users want to add a keybinding to activate the `quickFix`
button, they can do that now.

This PR also performs a bit of miscellaneous polish from the bug bash.
This includes:
- the suggestions UI now presents quick fixes first
- scrolling may result in the button being drawn in the wrong place
- The bug was tracked down this line:
`TermControl::CursorPositionInDips()` --> `_core.CursorPosition()` -->
`Terminal::GetViewportRelativeCursorPosition()`. The mutable viewport
there does _not_ update when the user scrolls. Thus, the button would be
drawn on the same position _on the screen_ even though we scrolled. To
fix this, I include the `_scrollOffset` in the calculation. The only
other place this function is used is with the suggestions UI, which does
_not_ update the UIs position as we scroll (but if we're interested in
doing that, we can now).

Closes #17377
2024-07-17 15:28:30 -07:00
Leonard Hecker
1feb56e478 Fix cursor inheritance (#17576) 2024-07-17 08:37:26 -07:00
Dustin L. Howett
8a0c03619d Merge remote-tracking branch 'origin/main' into dev/duhowett/applicableactions 2024-07-17 10:15:44 -05:00
Leonard Hecker
1f83146644 Add ITerminalHandoff3 in preparation for overlapped pipes (#17575)
Without a renderer in #17510 we cannot skip "frames" anymore.
As such, using overlapped IO becomes crucial to avoid a regression
in performance. ITerminalHandoff3 fixes this by allowing the terminal
to pick the pipes it wants, which mirrors CreatePseudoConsole
where the caller can also pick its own pipes.

## Validation Steps Performed
* Do a handoff with the dev build
* Input/Output works 
2024-07-17 03:03:11 +02:00
Leonard Hecker
1ac221a7a5 Implement a timeout for PSEUDOCONSOLE_INHERIT_CURSOR (#17574)
This implements a 3s timeout for cursor inheritance which prevents
ConPTY from being deadlocked at startup, if the terminal misbehaves.
It serves another purpose, however, in that it prepares the code for
the introduction of overlapped IO in #17510.

Closes #11213
2024-07-17 03:02:59 +02:00
Leonard Hecker
2769bb591b Remove the --vtmode flag (#17572)
After the ConPTY rewrite in #17510 we'll not modify any VT sequences
anymore. This means that the `--vtmode` flag uses its only function.
Its only known user is `telnet.exe` which needs to be updated
to sanitize the output on its own. See MSFT:52532514
2024-07-17 03:02:50 +02:00
Leonard Hecker
08a0bff7da Move FindActionableControlCharacter to Types (#17570)
This will allow us to use `FindActionableControlCharacter` in code
outside of our VT parser. #17510 uses it to sanitize inputs.
2024-07-17 03:02:39 +02:00
Leonard Hecker
f73c33fedd Remove CleanupGlobalFont from tests (#17569)
By always setting up the font, it simplifies the upcoming VtIo tests
for #17510 which don't need a font, but implicitly rely on it anyway.
2024-07-17 03:02:27 +02:00
Leonard Hecker
1d2ffe9109 Add helper functions for pipes (#17566)
Split off from #17510:
* `HandleWantsOverlappedIo` can be used to check if a handle requires
  overlapped IO. This is important, as `ReadFile` and `WriteFile` are
  documented to not work correctly if an overlapped handle is used
  without overlapped IO and vice versa.
  In my tests with pipes, this appears to be true.
* `CreatePipe` creates a synchronous, unidirectional pipe.
* `CreateOverlappedPipe` does what it says on the tin, while allowing
  you to specify the direction of the pipe (in, out, duplex).
* `GetOverlappedResultSameThread` is largely the same as
  `GetOverlappedResult`, but adds back a neat optimization from
  the time before Windows 7. I thought it was neat.
2024-07-17 03:02:07 +02:00
Leonard Hecker
5756df4d9b Abstract Write/FillOutput APIs with FillConsoleImpl (#17573)
This abstraction will help #17510 inject its ConPTY-specific behavior
into all 6 relevant console API functions simultaneously. This avoids
having to repeat the same prologue and epilogue 4 times.
Ideally, we'd use composition here, but I found it to be a bad fit.
2024-07-16 18:01:28 -07:00
Leonard Hecker
5826a84628 Make til/rand noexcept-correct (#17571)
This simply adds the missing `noexcept` attributes.
It also removes the unnecessary `pcg_random` import.
2024-07-16 17:59:31 -07:00
Dustin L. Howett
49a294328f Move TSM's u8 reader/writer into til::io (#15329) 2024-07-16 17:55:45 -07:00
Mike Griese
de50310295 Create a base class for all pane content events (#17537)
These events are kinda just boilerplate that now keeps getting
copy-pasta'd every time I make new pane types.

This instead moves them all to a singular base class, so the definitions
stay in sync.
2024-07-15 11:38:34 +00:00
Leonard Hecker
ee09ec2900 Fix various cooked read issues (#17556)
* Wide glyphs that don't fit into the last column got treated
  as narrow glyphs which broke line layout.
* Wide glyphs that don't fit into the last column got manually
  padded with whitespace which broke Ctrl+A + Ctrl+C in conhost.
* Sudden increases/decreases in the pager height would leave
  parts of the viewport with leftover text and not clear it away.
* Deleting an entire word at the start of a line would only delete
  its first two characters.

Closes #17554
2024-07-15 11:24:18 +00:00
Leonard Hecker
8c6eaad9ae Fix double paste when CF_UNICODETEXT & CF_HDROP are present (#17543)
Well, this one is rather simple. :)
tl;dr: We shouldn't call `StringPaste` twice for the same paste.

Closes MSFT:51822029
2024-07-12 03:26:04 +00:00
Leonard Hecker
04c33f35c3 15x faster reflow in debug builds (#17550)
STL iterators have a significant overhead. This improves performance
of `GetLastNonSpaceColumn` by >100x (it's too large to measure),
and reflow by ~15x in debug builds. This makes text reflow in debug
builds today ~10x faster than it used to be in release builds before
the large rewrites in #15701 and #13626.
2024-07-12 02:24:29 +00:00
Carlos Zamora
7d77160638 Revert lazy loading Quick Fix UI (#17552)
Turns out, when the branding disables the feature, we try to get
`QuickFixMenu` when it's not loaded, causing a crash in TerminalPage.

Since we end up loading the quick fix menu when we scroll or apply UI
settings, we're actually loading the quick fix menu pretty early on. So
might as well remove the `x:Load="False"`. If we feel strongly about
keeping the lazy loading functionality, we can do that later (and
probably apply the same heuristic to the other XAML we're registering in
TerminalApp).

This also adds a feature flag check when registering the menu in
TerminalApp.

Closes #17548
2024-07-11 17:29:20 -07:00
Leonard Hecker
ac5b4f5831 Use VT for COOKED_READ_DATA (#17445)
By rewriting `COOKED_READ_DATA` to use VT for its output we make it
possible to pass this VT output 1:1 straight to the hosting terminal
if we're running under ConPTY. This is also possible with the current
console APIs it uses, but it's somewhat janky. In particular the
usage of `ReadConsoleOutput` to backup/restore the popup contents
could be considered bad faith "rules for thee, not for me",
given that we're telling people to move away from those APIs.

The new implementation contains a bare bones "pager" to fit even
very long prompt contents into the VT viewport.
I fully expect this initial PR to not be entirely bug free, because
writing a proper pager with line wrapping is a little bit complex.
This PR takes some significant shortcuts by leveraging the fact
that the prompt line is always left-to-right and always a series
of fully filled lines followed by one potentially semi-full line.
This allows us to skip using a front/back-buffer for diffing the
contents between two redisplay calls.

Part of #14000

## Validation Steps Performed
* ASCII input
* Chinese input (中文維基百科) 
* Surrogate pair input (🙂) 
* In cmd.exe
  * Create 2 files: "a😊b.txt" and "a😟b.txt"
  * Press tab: Autocomplete to "a😊b.txt" 
  * Navigate the cursor right past the "a"
  * Press tab twice: Autocomplete to "a😟b.txt" 
* Execute `printf("    "); gets(buffer);` in C (or equivalent)
  * Press Tab, A, Ctrl+V, Tab, A 
  * The prompt is "        A^V     A" 
  * Cursor navigation works 
  * Backspacing/Deleting random parts of it works 
  * It never deletes the initial 4 spaces 
* Backspace deletes preceding glyphs 
* Ctrl+Backspace deletes preceding words 
* Escape clears input 
* Home navigates to start 
* Ctrl+Home deletes text between cursor and start 
* End navigates to end 
* Ctrl+End deletes text between cursor and end 
* Left navigates over previous code points 
* Ctrl+Left navigates to previous word-starts 
* Right and F1 navigate over next code points 
  * Pressing right at the end of input copies characters
    from the previous command 
* Ctrl+Right navigates to next word-ends 
* Insert toggles overwrite mode 
* Delete deletes next code point 
* Up and F5 cycle through history 
  * Doesn't crash with no history 
  * Stops at first entry 
* Down cycles through history 
  * Doesn't crash with no history 
  * Stops at last entry 
* PageUp retrieves the oldest command 
* PageDown retrieves the newest command 
* F2 starts "copy to char" prompt 
  * Escape dismisses prompt 
  * Typing a character copies text from the previous command up
    until that character into the current buffer (acts identical
    to F3, but with automatic character search) 
* F3 copies the previous command into the current buffer,
  starting at the current cursor position,
  for as many characters as possible 
  * Doesn't erase trailing text if the current buffer
    is longer than the previous command 
  * Puts the cursor at the end of the copied text 
* F4 starts "copy from char" prompt 
  * Escape dismisses prompt 
  * Erases text between the current cursor position and the
    first instance of a given char (but not including it) 
* F6 inserts Ctrl+Z 
* F7 without modifiers starts "command list" prompt 
  * Escape dismisses prompt 
  * Entries wider than the window width are truncated 
  * Height expands up to 20 rows with longer histories 
  * F9 starts "command number" prompt 
  * Left/Right replace the buffer with the given command 
    * And put cursor at the end of the buffer 
  * Up/Down navigate selection through history 
    * Stops at start/end with <10 entries 
    * Stops at start/end with >20 entries 
    * Scrolls through the entries if there are too many 
  * Shift+Up/Down moves history items around 
  * Home navigates to first entry 
  * End navigates to last entry 
  * PageUp navigates by $height items at a time or to first 
  * PageDown navigates by $height items at a time or to last 
* Alt+F7 clears command history 
* F8 cycles through commands that start with the same text as
  the current buffer up until the current cursor position 
  * Doesn't crash with no history 
* F9 starts "command number" prompt 
  * Escape dismisses prompt 
  * Ignores non-ASCII-decimal characters 
  * Allows entering between 1 and 5 digits 
  * Pressing Enter fetches the given command from the history 
* Alt+F10 clears doskey aliases 
* In cmd.exe, with an empty prompt in an empty directory:
  Pressing tab produces an audible bing and prints no text 
* When Narrator is enabled, in cmd.exe:
  * Typing individual characters announces only
    exactly each character that is being typed 
  * Backspacing at the end of a prompt announces
    only exactly each deleted character 
2024-07-11 20:11:44 +00:00
Windows Console Service Bot
30447cf7e4 Localization Updates - 07/11/2024 (#17531) 2024-07-11 15:02:20 -05:00
Leonard Hecker
dabc70ee21 Fix cursor invalidation with horizontal scrolling (#17544)
`InvalidateCursor` wants a viewport-relative coordinate.
Thankfully, this bug hasn't shipped anywhere yet.

## Validation Steps Performed
* Enable horizontal scrolling in conhost
* Horizontally scroll
* Cursor blinks 
2024-07-11 11:17:33 +00:00
Mike Griese
8b7c73c9c2 Stop parsing saveSnippets actions in json (#17535)
In the spec review, we agreed these didn't really need to be saved to
the user's own settings file. This removes parsing and saving for the
`experimental.saveSnippet` action, but we still have the action
_internally_. This is powered by a new x-macro for "INTERNAL_" actions.

Follow-up from #16513.
2024-07-10 15:10:25 +00:00
Leonard Hecker
ae8c868a1c AtlasEngine: Fix a buffer overrun (#17536)
The strided `memcpy` between buffers failed to account for situations
where the destination stride is smaller than the source stride.
The solution is to only copy as many bytes as are in each row.

## Validation Steps Performed
Even with AppVerifier the issue could not be reproduced.
Adding an `assert(srcStride <= mapped.RowPitch)`, however, did trap
the bug when WARP is used while BackendD3D is force-enabled.
2024-07-09 22:07:01 +00:00
Mike Griese
678432ac6c Dismiss a action preview when the next action isn't previewable (#17533)
This became much more obvious with the sendInput previewing. We would
only dismiss previews if the following action was also previewable.

related: #15845
2024-07-09 21:12:32 +00:00
Mike Griese
6c01d736fa Add a close button to the Snippets pane (#17528)
As discussed in the bug bash. It should be closable with a button. 

This also changes the tab color to match the Settings tabs.

This also fixes a crash where dragging just a snippets pane out to it's
own window would crash.
2024-07-09 16:25:17 +00:00
Dustin L. Howett
67d2636c81 Revert "nuget: move to shine-oss tenant rather than ms tenant (#17451)"
This reverts commit e9212e43a3.
2024-07-09 11:29:25 -05:00
Windows Console Service Bot
53841f7dd5 Localization Updates - main - 07/08/2024 20:47:05 (#17511) 2024-07-08 16:45:04 -07:00
Leonard Hecker
a2d7121489 Fix more PDP ploc related issues (#17530)
This fixes some more issues not properly covered by #17526:
* Fixed `_locComment_text` comments being effectively ignored.
* Fixed line splitting of comments (CRLF vs LF).
* Fixed BOM suppression.
* Fixed support for having multiple `{Locked=...}` comments.
2024-07-08 16:33:54 -07:00
Leonard Hecker
5bbd905ded Fix qps-ploc generation for store translations (#17526)
* Modified `Generate-PseudoLocalizations.ps1` to find the .xml files.
  (As opposed to .resw for the other translations.)
* Added support for the new format by adding new XPath expressions,
  and stripping comments/attributes as needed.
* Fixed `PreserveWhitespace` during XML loading.
* Fixed compliance with PowerShell's strict mode.

## Validation Steps Performed
Ran it locally and compared the results. 
2024-07-08 17:26:16 -05:00
Dustin L. Howett
bc20225b08 onebranch: allow publish/package to run in :latest container (#17514)
We have to run in an older OneBranch Windows container image due to
compiler bugs.

This change prevents us from having to wait for the container image to
download for build legs that _aren't_ using the compiler.
2024-07-08 15:37:50 -05:00
Mike Griese
02a7c02548 Add a snippets pane (#17330)
This adds a snippets pane, which can be a static pane with all your
snippets (`sendInput` actions) in it. (See #17329)

This pane has a treeview with these actions in it, that we can filter
with a textbox at the top.

Play buttons next to entries make it quick to run the command you found.

Bound in the default actions with

```json
        { "command": { "action": "splitPane", "type": "snippets" }, "id": "Terminal.OpenSnippetsPane", "name": { "key": "SnippetsPaneCommandName" } },
```

re: #1595

----

TODO, from 06-04 bug bash

* [x] Snippets pane doesn't display some "no snippets found" text if
there aren't any yet
* [x] open snippets pane; find a "send input"; click the play button on
it; input is sent to active pane; begin typing
* [x] I can open an infinite amount of suggestions panes
* ~I'm closing this as by-design for now at least. Nothing stopping
anyone from opening infinite of any kind of pane.~
* ~This would require kind of a lot of refactoring in this PR to mark a
kind of pane as being a singleton or singleton-per-tab~
  * Okay everyone hates infinite suggestions panes, so I got rid of that
* [x] Ctrl+Shift+W should still work in the snippets pane even if focus
isn't in textbox
* [ ] open snippets pane; click on text box; press TAB key;
  * [ ] If you press TAB again, I have no idea where focus went
* [x] some previews don't work. Like `^c` (`"input": "\u0003"`)
* [x] nested items just give you a bit of extra space for no reason and
it looks a little awkward
* [x] UI Suggestion: add padding on the right side
* [ ] [Accessibility] Narrator says "Clear buffer; Suggestions found
132" when you open the snippets pane
- Note: this is probably Narrator reading out the command palette (since
that's where I opened it from)
- We should probably expect something like "Snippets", then (assuming
focus is thrown into text box) "Type to filter snippets" or something
like that
2024-07-08 18:26:07 +00:00
PankajBhojwani
ec9289288e Fix schema and user defaults from Action ID change (#17509)
- Remove the `deprecated` flag for the `keybindings` array now that we
have re-added that
- Update `userDefaults` to use the correct ID for the `Copy` command
2024-07-03 13:56:30 +00:00
Dustin L. Howett
e932d63a70 build: update the loc pipeline with the final locations of the PDPs (#17507)
This allows us to remove the dependency on the `Terminal.Internal`
repository.

I have also added some parameters to the build pipeline to ease testing.
2024-07-02 21:04:54 +00:00
Leonard Hecker
7f2249c810 AtlasEngine: Curly line redux (#17508)
See #17501.
2024-07-02 18:16:09 +00:00
James Holderness
61ee7b0ef6 Add support for querying the character cell size (#17504)
This PR add supports for two query sequences that are used to determine
the pixel size of a character cell:

* `CSI 16 t` reports the pixel size of a character cell directly.
* `CSI 14 t` reports the pixel size of the text area, and when divided
  by the character size of the text area, you can get the character cell
  size indirectly (this method predates the introduction of `CSI 16 t`).

These queries are used by Sixel applications that want to fit an image
within specific text boundaries, so need to know how many cells would be
covered by a particular pixel size, or vice versa. Our implementation of
Sixel uses a virtual cell size that is always 10x20 (in order to emulate
the VT340 more accurately), so these queries shouldn't really be needed,
but some applications will fail to work without them.

## References and Relevant Issues

Sixel support was added to conhost in PR #17421.

## Validation Steps Performed

I've added some unit tests to verify that these queries are producing
the expected responses, and I've manually tested on [XtermDOOM] (which
uses `CSI 16 t`), and the [Notcurses] library (which uses `CSI 14 t`).

[XtermDOOM]: https://gitlab.com/AutumnMeowMeow/xtermdoom
[Notcurses]: https://github.com/dankamongmen/notcurses

## PR Checklist
- [x] Tests added/passed
2024-07-02 17:42:37 +00:00
Windows Console Service Bot
ee40166799 Check in all localized PDPs (#17500) 2024-07-02 12:18:35 -05:00
Leonard Hecker
ad3797ace9 AtlasEngine: Improve appearance of curly underlines (#17501)
We'd previously subtract one underline-height from the curly line
offset, even though we already had subtracted its complete height.

Additionally, the pixel shader received some fine tuning:
* Shrink the stroke width so that the anti-aliasing can be seen
  all the way up to the horizontal edges of the bounding box.
* Add a phase shift to break apart the symmetry of the curve.

Closes #17482

Co-authored-by: Carlos Zamora <carlos.zamora@microsoft.com>
2024-07-02 15:54:03 +00:00
Leonard Hecker
c9e200734e Improve Viewport and Viewport::WalkInBounds (#17143)
This removes all of the 2D iteration machinery. Imagine the text buffer
as a `Cell[w][h]` grid. Clearly, this is identical to a `Cell[w*h]`
array, which shows that copying between overlapping ranges only needs
either forward or backward copying, and not left/right/top/down.

With `WalkDir` removed, `WalkInBounds` can be rewritten with basic
arithmetic which allows `pos` to be an exclusive end coordinate.
2024-07-02 15:48:56 +00:00
e82eric
d051f7047d Add ability to save input action from command line (#16513)
Hi wanted to make an attempt at
[12857](https://github.com/microsoft/terminal/issues/12857). This still
needs work but I think the initial version is ready to be reviewed.

## Summary of the Pull Request

Mostly copied from:
6f5b9fb...1cde67ac46

- Save to disk
- If command line is empty use selection
- Show toast
- No UI.  Trying out the different options now.

## PR Checklist
- [ ] Closes #12857
- [ ] Tests added/passed
- [ ] Documentation updated
- If checked, please file a pull request on [our docs
repo](https://github.com/MicrosoftDocs/terminal) and link it here: #xxx
- [ ] Schema updated (if necessary)

---------

Co-authored-by: Mike Griese <migrie@microsoft.com>
2024-07-02 11:27:20 +00:00
Dustin L. Howett
8009b53819 Check the PDPs and StoreBroker configs into the repo (#17476)
This also updates the localization pipeline to check in translations for
the PDPs.

Right now, the primary source for PDPs is the Terminal.Internal
repository. They are submitted from there, and pulled back in as though
they were destined for the internal repo. We rename them on disk prior
to loc check-in to pretend they live in this repo.

Once I submit a change request to the Touchdown team to update the paths
in their backend, I will follow up with another pull request that
updates the remaining build steps to account for that.
2024-07-01 12:23:05 -05:00
Windows Console Service Bot
14e2c4254a Localization Updates - main - 07/01/2024 17:19:15 (#17499) 2024-07-01 12:20:47 -05:00
Leonard Hecker
9cc0ebad83 Initialize all SixelParser members (#17497)
Assuming we do have a bug somewhere, initializing these members
will allow us to consistently reproduce the bug, whereas without
the initialization the member values will all be random and so
they may result in random behavior which would make finding the
root cause more difficult (or at least less consistent).
2024-07-01 16:28:58 +00:00
™️
1f47de37fe Theme for settings (#16479)
Adds support for a new `settings` object in the theme settings. This
includes a single property, `theme`. This allows users to set a
different theme from the app's requested theme, if they so choose.

Closes #9231

---------

Co-authored-by: Mike Griese <migrie@microsoft.com>
2024-07-01 14:38:14 +00:00
Windows Console Service Bot
2fa7445b00 Localization Updates - main - 06/29/2024 03:05:30 (#17485) 2024-07-01 12:31:17 +00:00
Dustin L. Howett
e9212e43a3 nuget: move to shine-oss tenant rather than ms tenant (#17451) 2024-07-01 11:28:56 +00:00
James Holderness
236c0030f1 Add support for Sixel images in conhost (#17421)
## Summary of the Pull Request

This PR introduces basic support for the Sixel graphics protocol in
conhost, limited to the GDI renderer.

## References and Relevant Issues

This is a first step towards supporting Sixel graphics in Windows
Terminal (#448), but that will first require us to have some form of
ConPTY passthrough (#1173).

## Detailed Description of the Pull Request / Additional comments

There are three main parts to the architecture:

* The `SixelParser` class takes care of parsing the incoming Sixel `DCS`
  sequence.
* The resulting image content is stored in the text buffer in a series
  of `ImageSlice` objects, which represent per-row image content.
* The renderer then takes care of painting those image slices for each
  affected row.

The parser is designed to support multiple conformance levels so we can
one day provide strict compatibility with the original DEC hardware. But
for now the default behavior is intended to work with more modern Sixel
applications. This is essentially the equivalent of a VT340 with 256
colors, so it should still work reasonably well as a VT340 emulator too.

## Validation Steps Performed

Thanks to the work of @hackerb9, who has done extensive testing on a
real VT340, we now have a fairly good understanding of how the original
Sixel hardware terminals worked, and I've tried to make sure that our
implementation matches that behavior as closely as possible.

I've also done some testing with modern Sixel libraries like notcurses
and jexer, but those typically rely on the terminal implementing certain
proprietary Xterm query sequences which I haven't included in this PR.

---------

Co-authored-by: Dustin L. Howett <dustin@howett.net>
2024-07-01 10:57:49 +00:00
Carlos Zamora
6589957d4d Add Quick Fix UI and support for custom CommandNotFound OSC (#16848)
### `OSC 9001; CmdNotFound; <missingCmd>`
Adds support for custom OSC "command not found" sequence `OSC 9001;
CmdNotFound; <missingCmd>`. Upon receiving the "CmdNotFound" variant
with the missing command payload, we send the missing command up to the
Quick Fix menu and add it in as `winget install <missingCmd>`.

### Quick Fix UI
The Quick Fix UI is a new UI surface that lives in the gutter (left
padding) of your terminal. The button appears if quick fixes are
available. When clicked, a list of suggestions appears in a flyout. If
there is not enough space in the gutter, the button will be presented in
a collapsed version that expands to a normal size upon hovering over it.

The Quick Fix UI was implemented similar to the context menu. The UI
itself lives in TermControl, but it can be populated by other layers
(i.e. TermApp layer).

Quick Fix suggestions are also automatically loaded into the Suggestions
UI.

If a quick fix is available and a screen reader is attached, we dispatch
an announcement that quick fixes are available to notify the user that
that's the case.

Spec: #17005
#16599

### Follow-ups
- #17377: Add a key binding for quick fix
- #17378: Use winget to search for packages using `missingCmd`

---------

Co-authored-by: Dustin L. Howett <duhowett@microsoft.com>
Co-authored-by: Dustin L. Howett <dustin@howett.net>
2024-06-28 23:27:31 +00:00
Windows Console Service Bot
024837c50f Localization Updates for #16916 (Grapheme Clusters) (#17474) 2024-06-28 15:19:58 -05:00
Leonard Hecker
cb48babe9d Implement grapheme clusters (#16916)
First, this adds `GraphemeTableGen` which
* parses `ucd.nounihan.grouped.xml`
* computes the cluster break property for each codepoint
* computes the East Asian Width property for each codepoint
* compresses everything into a 4-stage trie
* computes a LUT of cluster break rules between 2 codepoints
* and serializes everything to C++ tables and helper functions

Next, this adds `GraphemeTestTableGen` which
* parses `GraphemeBreakTest.txt`
* splits each test into graphemes and break opportunities
* and serializes everything to a C++ table for use as unit tests

`CodepointWidthDetector.cpp` was rewritten from scratch to
* use an iterator struct (`GraphemeState`) to maintain state
* accumulate codepoints until a break opportunity arises
* accumulate the total width of a grapheme
* support 3 different measurement modes: Grapheme clusters,
  `wcswidth`-style, and a mode identical to the old conhost

With this in place the following changes were made:
* `ROW::WriteHelper::_replaceTextUnicode` now uses the new
  grapheme cluster text iterators
* The same function was modified to join new text with existing
  contents of the current cell if they join to form a cluster
* Otherwise, a ton of places were modified to funnel the selection
  of the measurement mode over from WT's settings to ConPTY

This is part of #1472

## Validation Steps Performed
* So many tests 
* https://github.com/apparebit/demicode works fantastic 
* UTF8-torture-test.txt works fantastic 
2024-06-26 18:40:27 +00:00
Mike Griese
174dcb9091 Add an experimental setting for making suggestions RGB (#17416)
Adds `$profile:experimental.rainbowSuggestions`, which makes the
suggestion text all RGB. This sparks joy.
2024-06-25 17:44:56 -05:00
Windows Console Service Bot
9f7032afd8 Localization Updates - builtin glyphs/shader compilation (#17458) 2024-06-24 13:03:25 -07:00
Leonard Hecker
8c14a34263 Fix builtin glyph corruption in the D2D renderer (#17464)
The initial contents of a texture are undefined. That's not good.
Now they are. That's good.
2024-06-23 10:09:42 +00:00
Leonard Hecker
bb4981caae Add more ConsoleBench tests (#17441)
This now covers all major Console APIs.
In the future we could add tests that cover VT sequences as well.
2024-06-22 11:30:18 +00:00
Mike Griese
8511f3d737 Add a spec for "Snippets" (#17329)
This specs out a lot of plans for snippets. We've already got these in
the sxnui as "tasks", but we can do so very much more.

This spec is a few years old now, but it's time for it to get promoted
out of my draft branch.

References: 
* #1595
* #7039
* #3121
* #10436
* #12927
* #12857
* #5790
* #15845

---------

Co-authored-by: Dustin L. Howett <duhowett@microsoft.com>
2024-06-22 11:03:04 +00:00
blitzRahul
fa407332a5 Display useful pixel shader compilation errors (#17436)
More descriptive warnings are triggered when custom pixel shader
compilation fails.

If D3DCompileFromFile fails and the compiler generates an error message-
the message is converted to a wstring and is sent as a parameter when
calling p.warningCallback.
Changes were made to resources.resw and TermControl.cpp to accommodate
this.

## Validation Steps Performed
I tested the following errors that may be encountered while developing a
custom pixel shader:
1. Compile time errors
2. File not found error
3. Path not found error
4. Access denied error

Fixes #17435

TAEF tests passed:
Summary: Total=294, Passed=294, Failed=0, Blocked=0, Not Run=0,
Skipped=0
2024-06-21 21:25:49 +00:00
Dustin L. Howett
34d4dc5a5f Remove the D2D warning from the Builtin Glyphs setting (#17454) 2024-06-20 14:03:27 -07:00
David Federman
613a539613 Add Microsoft.MSBuildCache (#17393)
Add Microsoft.MSBuildCache

This change adds a new pipeline which enables caching in the build. This
is added as a separate pipeline for now with the eventual goal of
enabling for PR and/or CI builds.

Documentation for Microsoft.MSBuildCache can be found in the GitHub
repo: https://github.com/microsoft/MSBuildCache

Preliminary numbers below.

*
[Baseline](https://dev.azure.com/ms/terminal/_build/results?buildId=579399&view=results):
12 min
* [0% Cache
hits](https://dev.azure.com/ms/terminal/_build/results?buildId=579419&view=results):
16 mins
* [100% cache
hits](https://dev.azure.com/ms/terminal/_build/results?buildId=579427&view=results):
3 mins
2024-06-20 14:02:26 -07:00
Leonard Hecker
bd116e35b2 Make the renderer optional (#17442)
If `VtEngine` gets removed from conhost, we need to be able to run
without any renderer present whatsoever. To make this possible,
I've turned all `Renderer&` into `Renderer*`.

Part of #14000
2024-06-20 18:26:58 +00:00
Leonard Hecker
e0686fa6f3 Remove some unused TextBuffer methods (#17443)
This is simply some unused code from the days before the big
text buffer rewrite in #13626.
2024-06-20 16:55:22 +00:00
Leonard Hecker
324e0f425a Move colorbrewer into its own proper header (#17444)
I'm planning to use the `dark2` color palette in the upcoming
cooked read rewrite as a debug aid to paint dirty regions.
Now that it's going to be used in more than one place I figured
it may be time to properly add it to the NOTICE file even if
it still won't be shipped with the final product.
2024-06-20 16:55:13 +00:00
PankajBhojwani
5d46e317b2 Fix crash when closing panes very quickly (#17450)
#17358 introduced a bug where if you open/close panes very rapidly
Terminal will crash. This was because `_content` was being set to `null`
and then a `Close` event was being emitted, but several functions
attempt to access the pane's `_content` as part of the close routine.
For example, `TerminalTab` tries to update the `TaskbarProgress` every
time a pane is closed and as part of that update sequence it queries the
pane - which has `null` content now - for the taskbar progress,
resulting in a crash. This PR fixes that crash.

Refs #17358
2024-06-20 16:07:40 +00:00
Dustin L. Howett
a80539c2f7 build: make the agent pool selection more robust (#17440) 2024-06-19 10:13:52 -05:00
Dustin L. Howett
f1079be854 ci: Remove GitHub Rich Code Nav Indexer (#17438)
It's been throwing deprecation warnings for a while, and now I can't
install the task on our new Azure Organization
2024-06-18 08:40:15 -07:00
Windows Console Service Bot
227cfdefac Localization Updates - main - 06/12/2024 03:05:48 (#17423) 2024-06-13 15:36:59 -05:00
Tushar Singh
7c1e2298f8 Fix some search highlights scenarios (#17352)
Fixes:
- Snapping the current match to the current selection doesn't work.
- Fast closing and re-opening SearchBox would leave search highlights in
an inconsistent state. The highlights would be active even when SB is
not on the screen, and results are not updated as more text is added to
the buffer.
- Search highlights scroll marks are not cleared when the search box is
closed.
2024-06-13 18:29:12 +00:00
Mike Griese
a7e2b46e20 Add descriptions to commands (namely, snippets) (#17376)
This adds a `"description"` property to actions. Notably, the shell
completion protocol (#3121) will now also populate that.

The suggestions UI can then use those descriptions to display an
additional tooltip with that information.

TeachingTip was kinda an abject disaster last time I tried this, so this
_isn't_ a TeachingTip. It's literally a text block.

xlinks:
* #13000
* #15845 
* #14939 - the last abandoned attempt at this
2024-06-12 20:03:22 +00:00
Mike Griese
86ba98607f Re-implement previewing, with the new TSF (#17386)
This adds support for previewing snippets, again. This time, with the
new TSF implementation. Leonard pointed me in the right direction with
this - he's the one who suggested to have a second `Composition` just
for previews like this.

Then we do some tricky magic to make it work when we're using
commandlines from shell integration, or you've got the ghost text from
powershell, etc. Then we visualize the control codes, just so they
aren't just U+FFFE diamonds.

Closes #12861
2024-06-11 23:18:18 +00:00
Carlos Zamora
125738b63e Add Spec for Quick Fix (#17005)
Quick Fix will be a new UI surface that allows the user to interact with
the terminal and leverage the context of a specific command being
executed. This new UI surface will be a home for features like WinGet
Command Not Found.

#16599
2024-06-11 13:37:09 -05:00
flyingcat
c52ba7dec6 Make subsequent windows open in the foreground (#17368)
Sometimes subsequent WT windows open in the background behind other
applications. This PR tries to fix it.

Refs #15895
Refs #15479

Mysterious bug (and annoying). There are even some discussions about
happening to the first startup, not just subsequent ones. Sometimes the
window may show up without animation too. So I don't think this is the
final solution, but it did get solved on my computer, for now.

## Validation Steps Performed
0. Quit all WT windows if some.
1. Open File Explorer, click "Open in Terminal" in context menu.
2. Move the newly opened window and minimize it.
3. Back to step 1 and repeat several times.
4. All the windows should open in the foreground correctly (yet possibly
without animation).

---------

Co-authored-by: Mike Griese <migrie@microsoft.com>
2024-06-10 21:19:07 +00:00
Mike Griese
e49afb3ccd Mark the AdaptDispatch ctor as noexcept (#17417)
CI is complaining about this on all new builds, in audit mode. But I
don't think anything changed here recently. Maybe just new audit rules
rolled out?
2024-06-10 20:52:29 +00:00
Windows Console Service Bot
5359e71ca1 Localization Updates for #17369 (#17380) 2024-06-10 14:49:08 -05:00
Dustin L. Howett
9096325b36 The WithSelection buttons don't need their own UIDs...
(cherry picked from commit 346b1ae6e67d16f230bec8d8d7107faf02253a3a)
2023-06-16 13:47:51 -05:00
Dustin L. Howett
f13a40dae4 Update notes about Anchor
(cherry picked from commit 7d25a9a0844cba8b822cc84e3ede08c0681c1766)
2023-06-16 13:47:51 -05:00
Dustin L. Howett
ee30fc4ff1 Don't stash the position on the core, finish applicability
(cherry picked from commit d9bc198826780316b7b2822137203200381bfb43)
2023-06-16 13:47:51 -05:00
Dustin L. Howett
8481c409ad HAX: ApplicableActions
(cherry picked from commit da1b24a88267f7a9dea829dfc83bc5c057f0b6e7)
2023-06-16 13:47:51 -05:00
489 changed files with 18510 additions and 5291 deletions

View File

@@ -1,77 +1,40 @@
aci
admins
allcolors
Apc
apc
backpressure
breadcrumb
breadcrumbs
bsd
calt
ccmp
ccon
changelog
clickable
clig
CMMI
colorbrewer
consvc
copyable
Counterintuitively
CtrlDToClose
CVS
CUI
cybersecurity
dalet
Dcs
dcs
deselection
dialytika
diffing
dje
downside
downsides
dze
dzhe
DTo
EDDB
EDDC
Emacspeak
Enum'd
Fitt
formattings
FTCS
ftp
fvar
gantt
gcc
geeksforgeeks
ghe
github
gje
godbolt
hostname
hostnames
https
hyperlink
hyperlinking
hyperlinks
iconify
ID
img
inlined
issuetitle
It'd
kje
libfuzzer
libuv
liga
lje
Llast
llvm
Lmid
locl
lol
lorem
Lorigin
maxed
megathread
@@ -80,27 +43,24 @@ mkmk
mnt
mru
nje
noreply
notwrapped
ogonek
ok'd
overlined
perlw
pipeline
postmodern
Powerline
powerline
ptys
pwn
pwshw
qof
qps
Remappings
Retargets
quickfix
rclt
reimplementation
Remappings
reserialization
reserialize
reserializes
Retargets
rlig
rubyw
runtimes
@@ -108,34 +68,20 @@ servicebus
shcha
similaritytolerance
slnt
Sos
ssh
sustainability
stakeholders
sustainability
sxn
timeline
timelines
timestamped
TLDR
tokenizes
tonos
toolset
truthiness
tshe
ubuntu
UEFI
uiatextrange
UIs
und
unregister
versioned
vsdevcmd
walkthrough
walkthroughs
We'd
westus
wildcards
workarounds
wtconfig
XBox
YBox
yeru

View File

@@ -97,6 +97,7 @@
^\Qsrc/tools/lnkd/lnkd.bat\E$
^\Qsrc/tools/pixels/pixels.bat\E$
^build/config/
^build/StoreSubmission/
^consolegit2gitfilters\.json$
^dep/
^doc/reference/master-sequence-list\.csv$

View File

@@ -116,6 +116,8 @@ binplaced
binskim
bitcoin
bitcrazed
BITMAPINFO
BITMAPINFOHEADER
bitmasks
BITOPERATION
BKCOLOR
@@ -123,6 +125,7 @@ BKGND
Bksp
Blt
BLUESCROLL
bmi
BODGY
BOLDFONT
Borland
@@ -146,6 +149,7 @@ bytebuffer
cac
cacafire
CALLCONV
CANDRABINDU
capslock
CARETBLINKINGENABLED
CARRIAGERETURN
@@ -156,6 +160,7 @@ CBash
cbiex
CBN
cbt
Ccc
CCCBB
cch
CCHAR
@@ -293,7 +298,6 @@ CREATESTRUCT
CREATESTRUCTW
createvpack
crisman
CRLFs
crloew
CRTLIBS
csbi
@@ -394,6 +398,11 @@ DECERA
DECFI
DECFNK
DECFRA
DECGCI
DECGCR
DECGNL
DECGRA
DECGRI
DECIC
DECID
DECINVM
@@ -430,6 +439,7 @@ DECSCA
DECSCNM
DECSCPP
DECSCUSR
DECSDM
DECSED
DECSEL
DECSERA
@@ -515,6 +525,7 @@ dsound
DSSCL
DSwap
DTest
DTo
DTTERM
dup'ed
dvi
@@ -593,6 +604,7 @@ fesb
FFAF
ffd
FFDE
FFFD
FFFDb
fgbg
FGCOLOR
@@ -613,6 +625,7 @@ FINDREGEX
FINDSTRINGEXACT
FINDUP
FIter
FITZPATRICK
FIXEDFILEINFO
Flg
flyouts
@@ -737,6 +750,7 @@ HABCDEF
Hackathon
HALTCOND
HANGEUL
hardlinks
hashalg
HASSTRINGS
hbitmap
@@ -880,10 +894,12 @@ jconcpp
JLO
JOBOBJECT
JOBOBJECTINFOCLASS
JONGSEONG
JPN
jsoncpp
jsprovider
jumplist
JUNGSEONG
KAttrs
kawa
Kazu
@@ -902,6 +918,7 @@ keyups
KILLACTIVE
KILLFOCUS
kinda
KIYEOK
KLF
KLMNO
KLMNOPQRST
@@ -1011,6 +1028,7 @@ luma
lval
LVB
LVERTICAL
LVT
LWA
LWIN
lwkmvj
@@ -1079,6 +1097,7 @@ MOUSEFIRST
MOUSEHWHEEL
MOVESTART
msb
msbuildcache
msctf
msctls
msdata
@@ -1186,6 +1205,7 @@ nouicompat
nounihan
NOYIELD
NOZORDER
NPFS
nrcs
NSTATUS
ntapi
@@ -1206,6 +1226,7 @@ ntuser
NTVDM
ntverp
nugetversions
NUKTA
nullness
nullonfailure
nullopts
@@ -1468,7 +1489,6 @@ READMODE
rectread
redef
redefinable
Redir
redist
REDSCROLL
REFCLSID
@@ -1486,8 +1506,10 @@ renderengine
rendersize
reparented
reparenting
REPH
replatformed
Replymessage
reportfileaccesses
repositorypath
Requiresx
rerasterize
@@ -1502,6 +1524,7 @@ rfa
rfid
rftp
rgbi
RGBQUAD
rgbs
rgci
rgfae
@@ -1515,6 +1538,7 @@ rgw
RIGHTALIGN
RIGHTBUTTON
riid
ris
RIS
roadmap
robomac
@@ -1665,9 +1689,11 @@ SOLIDBOX
Solutiondir
somefile
sourced
SRCAND
SRCCODEPAGE
SRCCOPY
SRCINVERT
SRCPAINT
srcsrv
SRCSRVTRG
srctool
@@ -1920,6 +1946,7 @@ vga
vgaoem
viewkind
viewports
VIRAMA
Virt
VIRTTERM
vkey
@@ -1970,8 +1997,8 @@ wchars
WCIA
WCIW
WCSHELPER
wcsicmp
wcsrev
wcswidth
wddm
wddmcon
WDDMCONSOLECONTEXT
@@ -2004,6 +2031,7 @@ wincontypes
WINCORE
windbg
WINDEF
windir
windll
WINDOWALPHA
windowdpiapi
@@ -2126,6 +2154,7 @@ XFORM
XIn
XManifest
XMath
XNamespace
xorg
XPan
XResource
@@ -2157,6 +2186,7 @@ Zabcdefghijklmn
Zabcdefghijklmnopqrstuvwxyz
ZCmd
ZCtrl
ZWJs
zxcvbnm
ZYXWVU
ZYXWVUTd

3
.gitignore vendored
View File

@@ -283,3 +283,6 @@ MSG*.bin
profiles.json
*.metaproj
*.swp
# MSBuildCache
/MSBuildCacheLogs/

60
Directory.Build.props Normal file
View File

@@ -0,0 +1,60 @@
<Project>
<!--
NOTE! This file gets written-over entirely by the release builds.
Any build logic in this file must be optional and only apply to non-release builds.
-->
<!-- MsBuildCache -->
<PropertyGroup>
<!-- Off by default -->
<MsBuildCacheEnabled Condition="'$(MsBuildCacheEnabled)' == ''">false</MsBuildCacheEnabled>
<!-- Always off during package restore -->
<MsBuildCacheEnabled Condition=" '$(ExcludeRestorePackageImports)' == 'true' ">false</MsBuildCacheEnabled>
<!-- In Azure pipelines, use Pipeline Caching as the cache storage backend. Otherwise, use the local cache. -->
<MSBuildCachePackageName Condition="'$(TF_BUILD)' != ''">Microsoft.MSBuildCache.AzurePipelines</MSBuildCachePackageName>
<MSBuildCachePackageName Condition="'$(MSBuildCachePackageName)' == ''">Microsoft.MSBuildCache.Local</MSBuildCachePackageName>
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildCacheEnabled)' == 'true'">
<!-- Change this to bust the cache -->
<MSBuildCacheCacheUniverse Condition="'$(MSBuildCacheCacheUniverse)' == ''">202310210737</MSBuildCacheCacheUniverse>
<!--
Visual Studio telemetry reads various ApplicationInsights.config files and other files after the project is finished, likely in a detached process.
This is acceptable and should not impact cache correctness.
-->
<MSBuildCacheAllowFileAccessAfterProjectFinishFilePatterns>
$(MSBuildCacheAllowFileAccessAfterProjectFinishFilePatterns);
\**\ApplicationInsights.config;
$(LocalAppData)\Microsoft\VSApplicationInsights\**;
$(LocalAppData)\Microsoft\Windows\INetCache\**;
A:\;
E:\;
$(windir)\**;
</MSBuildCacheAllowFileAccessAfterProjectFinishFilePatterns>
<!--
This repo uses a common output directory with many projects writing duplicate outputs. Allow everything, but note this costs some performance in the form of requiring
the cache to use copies instead of hardlinks when pulling from cache.
-->
<MSBuildCacheIdenticalDuplicateOutputPatterns>$(MSBuildCacheIdenticalDuplicateOutputPatterns);bin\**</MSBuildCacheIdenticalDuplicateOutputPatterns>
<!-- version of MSBuildCache is not part of the cache key -->
<PackagesConfigFile>$(MSBuildThisFileDirectory)\dep\nuget\packages.config</PackagesConfigFile>
<MSBuildCacheIgnoredInputPatterns>$(MSBuildCacheIgnoredInputPatterns);$(PackagesConfigFile)</MSBuildCacheIgnoredInputPatterns>
</PropertyGroup>
<PropertyGroup Condition="'$(MSBuildCacheEnabled)' == 'true' and '$(MSBuildCachePackageRoot)' == ''">
<PackagesConfigContents>$([System.IO.File]::ReadAllText("$(PackagesConfigFile)"))</PackagesConfigContents>
<MSBuildCachePackageVersion>$([System.Text.RegularExpressions.Regex]::Match($(PackagesConfigContents), 'Microsoft.MSBuildCache.*?version="(.*?)"').Groups[1].Value)</MSBuildCachePackageVersion>
<MSBuildCachePackageRoot>$(MSBuildThisFileDirectory)packages\$(MSBuildCachePackageName).$(MSBuildCachePackageVersion)</MSBuildCachePackageRoot>
<MSBuildCacheSharedCompilationPackageRoot>$(MSBuildThisFileDirectory)packages\Microsoft.MSBuildCache.SharedCompilation.$(MSBuildCachePackageVersion)</MSBuildCacheSharedCompilationPackageRoot>
</PropertyGroup>
<ImportGroup Condition="'$(MSBuildCacheEnabled)' == 'true'">
<Import Project="$(MSBuildCachePackageRoot)\build\$(MSBuildCachePackageName).props" />
<Import Project="$(MSBuildCacheSharedCompilationPackageRoot)\build\Microsoft.MSBuildCache.SharedCompilation.props" />
</ImportGroup>
</Project>

11
Directory.Build.targets Normal file
View File

@@ -0,0 +1,11 @@
<Project>
<!--
NOTE! This file gets written-over entirely by the release builds.
Any build logic in this file must be optional and only apply to non-release builds.
-->
<ImportGroup Condition="'$(MSBuildCacheEnabled)' == 'true'">
<Import Project="$(MSBuildCachePackageRoot)\build\$(MSBuildCachePackageName).targets" />
<Import Project="$(MSBuildCacheSharedCompilationPackageRoot)\build\Microsoft.MSBuildCache.SharedCompilation.targets" />
</ImportGroup>
</Project>

View File

@@ -325,6 +325,27 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
## ColorBrewer
**Source**: [https://colorbrewer2.org/](https://colorbrewer2.org/)
### License
```
Apache-Style Software License for ColorBrewer software and ColorBrewer Color Schemes
Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State University.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.
```
# Microsoft Open Source
This product also incorporates source code from other Microsoft open source projects, all licensed under the MIT license.

2
build/StoreSubmission/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
Media
SubmissionPackages

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Terminal</Keyword>
<Keyword>
Konsole</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Dies ist die Vorschauversion des Windows-Terminals, die die neuesten Funktionen enthält, sobald sie entwickelt werden. Das Windows-Terminal ist eine moderne, schnelle, effiziente, leistungsstarke und produktive Terminalanwendung für Benutzer von Befehlszeilentools und Shells wie Eingabeaufforderung, PowerShell und WSL. Die wichtigsten Features umfassen mehrere Registerkarten, Bereiche, Unicode- und UTF-8-Zeichenunterstützung, GPU-beschleunigtes Textrenderingmodul sowie benutzerdefinierte Designs, Formatvorlagen und Konfigurationen.
Dies ist ein Open Source-Projekt, und wir freuen uns über die Teilnahme der Community. Um teilzunehmen, besuchen Sie bitte die Website https://github.com/microsoft/terminal </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Version __VERSION_NUMBER__
Weitere Einzelheiten finden Sie auf der Seite der GitHub-Veröffentlichungen.
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
Das neue Windows-Terminal</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Mehrere Registerkarten</AppFeature>
<AppFeature>
Vollständige Unicode-Unterstützung</AppFeature>
<AppFeature>
GPU-beschleunigtes Textrendering</AppFeature>
<AppFeature>
Vollständige Anpassbarkeit</AppFeature>
<AppFeature>
Geteilte Bereiche</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Tastatur</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName _locID="App_AppStoreName">
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- _locComment_text="{MaxLength=200} App AppStoreName" -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword _locID="App_keyword1">
<!-- _locComment_text="{MaxLength=30} App keyword 1" -->Terminal</Keyword>
<Keyword _locID="App_keyword2">
<!-- _locComment_text="{MaxLength=30} App keyword 2" -->Console</Keyword>
<Keyword _locID="App_keyword3">
<!-- _locComment_text="{MaxLength=30} App keyword 3" -->
</Keyword>
<Keyword _locID="App_keyword4">
<!-- _locComment_text="{MaxLength=30} App keyword 4" -->
</Keyword>
<Keyword _locID="App_keyword5">
<!-- _locComment_text="{MaxLength=30} App keyword 5" -->
</Keyword>
<Keyword _locID="App_keyword6">
<!-- _locComment_text="{MaxLength=30} App keyword 6" -->
</Keyword>
<Keyword _locID="App_keyword7">
<!-- _locComment_text="{MaxLength=30} App keyword 7" -->
</Keyword>
</Keywords>
<Description _locID="App_Description">
<!-- _locComment_text="{MaxLength=10000} App Description" -->This is the preview build of the Windows Terminal, which contains the latest features as they are developed. The Windows Terminal is a modern, fast, efficient, powerful, and productive terminal application for users of command-line tools and shells like Command Prompt, PowerShell, and WSL. Its main features include multiple tabs, panes, Unicode and UTF-8 character support, a GPU accelerated text rendering engine, and custom themes, styles, and configurations.
This is an open source project and we welcome community participation. To participate please visit https://github.com/microsoft/terminal </Description>
<ShortDescription _locID="App_ShortDescription">
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
<!-- _locComment_text="{MaxLength=500} App ShortDescription" -->
</ShortDescription>
<ShortTitle _locID="App_ShortTitle">
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
<!-- _locComment_text="{MaxLength=50} App ShortTitle" -->
</ShortTitle>
<SortTitle _locID="App_SortTitle">
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
<!-- _locComment_text="{MaxLength=255} App SortTitle" -->
</SortTitle>
<VoiceTitle _locID="App_VoiceTitle">
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
<!-- _locComment_text="{MaxLength=255} App VoiceTitle" -->
</VoiceTitle>
<DevStudio _locID="App_DevStudio">
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
<!-- _locComment_text="{MaxLength=255} App DevStudio" -->
</DevStudio>
<ReleaseNotes _locID="App_ReleaseNotes">
<!-- _locComment_text="{MaxLength=1500} {Locked=__VERSION_NUMBER__} App Release Note" -->Version __VERSION_NUMBER__
Please see our GitHub releases page for additional details.
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png" _locID="App_caption1">
<!-- _locComment_text="{MaxLength=200} Screenshot caption 1" -->
</Caption>
<Caption DesktopImage="panes.png" _locID="App_caption2">
<!-- _locComment_text="{MaxLength=200} Screenshot caption 2" -->
</Caption>
<Caption DesktopImage="htop.png" _locID="App_caption3">
<!-- _locComment_text="{MaxLength=200} Screenshot caption 3" -->
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png" />
<BoxArt FileName="Store Box Art.png" />
<PromotionalArt16x9 FileName="Store Thumbnail.png" />
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title _locID="App_trailerTitle1">
<!-- _locComment_text="{MaxLength=255} Trailer title 1" -->The new Windows Terminal</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
<!-- _locComment_text="{Locked} Trailer screenshot 1 description" -->
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature _locID="App_feature1">
<!-- _locComment_text="{MaxLength=200} App Feature 1" -->Multiple tabs</AppFeature>
<AppFeature _locID="App_feature2">
<!-- _locComment_text="{MaxLength=200} App Feature 2" -->Full Unicode support</AppFeature>
<AppFeature _locID="App_feature3">
<!-- _locComment_text="{MaxLength=200} App Feature 3" -->GPU-accelerated text rendering</AppFeature>
<AppFeature _locID="App_feature4">
<!-- _locComment_text="{MaxLength=200} App Feature 4" -->Full customizability</AppFeature>
<AppFeature _locID="App_feature5">
<!-- _locComment_text="{MaxLength=200} App Feature 5" -->Split panes</AppFeature>
<AppFeature _locID="App_feature6">
<!-- _locComment_text="{MaxLength=200} App Feature 6" -->
</AppFeature>
<AppFeature _locID="App_feature7">
<!-- _locComment_text="{MaxLength=200} App Feature 7" -->
</AppFeature>
<AppFeature _locID="App_feature8">
<!-- _locComment_text="{MaxLength=200} App Feature 8" -->
</AppFeature>
<AppFeature _locID="App_feature9">
<!-- _locComment_text="{MaxLength=200} App Feature 9" -->
</AppFeature>
<AppFeature _locID="App_feature10">
<!-- _locComment_text="{MaxLength=200} App Feature 10" -->
</AppFeature>
<AppFeature _locID="App_feature11">
<!-- _locComment_text="{MaxLength=200} App Feature 11" -->
</AppFeature>
<AppFeature _locID="App_feature12">
<!-- _locComment_text="{MaxLength=200} App Feature 12" -->
</AppFeature>
<AppFeature _locID="App_feature13">
<!-- _locComment_text="{MaxLength=200} App Feature 13" -->
</AppFeature>
<AppFeature _locID="App_feature14">
<!-- _locComment_text="{MaxLength=200} App Feature 14" -->
</AppFeature>
<AppFeature _locID="App_feature15">
<!-- _locComment_text="{MaxLength=200} App Feature 15" -->
</AppFeature>
<AppFeature _locID="App_feature16">
<!-- _locComment_text="{MaxLength=200} App Feature 16" -->
</AppFeature>
<AppFeature _locID="App_feature17">
<!-- _locComment_text="{MaxLength=200} App Feature 17" -->
</AppFeature>
<AppFeature _locID="App_feature18">
<!-- _locComment_text="{MaxLength=200} App Feature 18" -->
</AppFeature>
<AppFeature _locID="App_feature19">
<!-- _locComment_text="{MaxLength=200} App Feature 19" -->
</AppFeature>
<AppFeature _locID="App_feature20">
<!-- _locComment_text="{MaxLength=200} App Feature 20" -->
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation _locID="App_RecommendedHW1">
<!-- _locComment_text="{MaxLength=200} App Recommended Hardware 1" -->Keyboard</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark _locID="App_CopyrightandTrademark">
<!-- _locComment_text="{MaxLength=200} Copyright and Trademark" -->Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms _locID="App_AdditionalLicenseTerms">
<!-- _locComment_text="{MaxLength=10000} Additional License Terms" -->
</AdditionalLicenseTerms>
<WebsiteURL _locID="App_WebsiteURL">
<!-- _locComment_text="{MaxLength=2048} WebsiteURL" -->https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo _locID="App_SupportContactInfo">
<!-- _locComment_text="{MaxLength=2048} Support Contact Info" -->https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL _locID="App_PrivacyURL">
<!-- _locComment_text="{MaxLength=2048} Privacy Policy URL" -->https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Terminal</Keyword>
<Keyword>
Consola</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Esta en la compilación de versión preliminar de la Terminal Windows, que contiene las últimas a medida que se desarrollan. Terminal Windows es una aplicación de terminal moderna, rápida, eficaz, eficiente y productiva para los usuarios de herramientas de línea de comandos y shells, como Símbolo del sistema, PowerShell y WSL. Entre las características principales se incluyen varias pestañas, paneles, compatibilidad con caracteres Unicode y UTF-8, un motor de representación de texto acelerado por GPU, y temas, estilos y configuraciones personalizados.
Este es un proyecto de fuente abierta y animamos a la comunidad a participar. Para colaborar, visita https://github.com/microsoft/terminal </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Versión __VERSION_NUMBER__
Para más información, consulte nuestra página de versiones de GitHub.
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
La nueva Terminal Windows</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Varias pestañas</AppFeature>
<AppFeature>
Soporte completo de Unicode</AppFeature>
<AppFeature>
Representación de texto acelerada por GPU</AppFeature>
<AppFeature>
Totalmente personalizable</AppFeature>
<AppFeature>
Paneles de división</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Teclado</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Terminal</Keyword>
<Keyword>
Console</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Ceci est une version dévaluation du Terminal Windows qui contient les fonctionnalités les plus récentes au fur et à mesure de leur développement. Le terminal Windows est une application de terminal moderne, rapide, efficace, puissante et productive pour les utilisateurs doutils en ligne de commande et denvironnements tels que lInvite de commandes, PowerShell et WSL. Ses principales fonctionnalités incluent plusieurs onglets, des volets, une prise en charge des caractères Unicode et UTF-8, un moteur de rendu de texte accéléré par GPU, ainsi que des thèmes, styles et configurations personnalisés.
Il sagit dun projet open source et nous vous invitons à participer dans la communauté. Pour participer, visitez https://github.com/microsoft/terminal </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Version __VERSION_NUMBER__
Consultez la page des versions de GitHub pour plus dinformations.
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
Nouveau Terminal Windows</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Plusieurs onglets</AppFeature>
<AppFeature>
Prise en charge complète dUnicode</AppFeature>
<AppFeature>
Rendu de texte accéléré par GPU</AppFeature>
<AppFeature>
Personnalisation complète</AppFeature>
<AppFeature>
Volets de fractionnement</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Clavier</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Terminale</Keyword>
<Keyword>
Console</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Questa è una versione di anteprima del Terminale Windows, che contiene le funzionalità più recenti man mano che vengono sviluppate. Terminale Windows è un'applicazione terminale moderna, veloce, efficiente, utile e produttiva per gli utenti che utilizzano shell e strumenti da riga di comando come il prompt dei comandi, PowerShell e WSL. Le funzionalità principali includono più schede, riquadri, supporto di caratteri Unicode e UTF-8, un motore di rendering del testo con accelerazione GPU e temi, stili e configurazioni personalizzati.
Si tratta di un progetto open source e la partecipazione della community è molto gradita. Per partecipare, visita la pagina https://github.com/microsoft/terminale </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Versione __VERSION_NUMBER__
Per ulteriori dettagli, consulta la nostra pagina delle versioni di GitHub.
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
Il nuovo Terminale Windows</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Schede multiple</AppFeature>
<AppFeature>
Supporto Unicode completo</AppFeature>
<AppFeature>
Rendering del testo con accelerazione GPU</AppFeature>
<AppFeature>
Personalizzazione completa</AppFeature>
<AppFeature>
Riquadri divisi</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Tastiera</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
ターミナル</Keyword>
<Keyword>
コンソール</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
これは Windows ターミナルのプレビュー ビルドで、開発中の最新の機能が含まれています。Windows ターミナルは、コマンド プロンプト、PowerShell、WSL などのコマンドライン ツールおよびシェルのユーザーのための、高速、効率的、強力な、生産性を向上させる最新のターミナル アプリケーションです。主な機能には、複数のタブやウィンドウ、Unicode および UTF-8 文字のサポート、GPU アクセラレータによるテキスト レンダリング エンジン、カスタマイズできるテーマ、スタイル、構成が含まれます。
これはオープン ソース プロジェクトです。コミュニティへの参加をお待ちしております。参加する場合は、https://github.com/microsoft/terminal にアクセスしてください </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
バージョン __VERSION_NUMBER__
詳細については、GitHub リリースのページをご覧ください。
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
新しい Windows ターミナル</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
複数のタブ</AppFeature>
<AppFeature>
Unicode の完全なサポート</AppFeature>
<AppFeature>
GPU アクセラレータによるテキストのレンダリング</AppFeature>
<AppFeature>
完全なカスタマイズ性</AppFeature>
<AppFeature>
分割ウィンドウ</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
キーボード</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
터미널</Keyword>
<Keyword>
콘솔</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
이것은 Windows 터미널에 대한 미리보기 빌드이며 이 터미널에는 개발된 최신 기능들이 포함되어 있습니다. Windows 터미널은 명령 프롬프트, PowerShell 및 WSL과 같은 명령 줄 도구 및 셸 사용자를 위한 최신의 빠르고 효율적이며 강력한 생산성의 터미널 응용 프로그램입니다. 주요 기능으로는 여러 탭, 창, 유니 코드 및 UTF-8 문자 지원, GPU 가속 텍스트 렌더링 엔진 및 사용자 정의 테마, 스타일 및 구성이 있습니다.
이것은 오픈 소스 프로젝트이며 커뮤니티 참여를 환영합니다. 참여하려면 https://github.com/microsoft/terminal을 방문하십시오 </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
버전 __VERSION_NUMBER__
자세한 내용은 GitHub 릴리스 페이지를 참조하세요.
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
새 Windows 터미널</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
복수 탭</AppFeature>
<AppFeature>
모든 유니코드 지원</AppFeature>
<AppFeature>
GPU 가속 텍스트 렌더링</AppFeature>
<AppFeature>
완전한 사용자 지정 가능성</AppFeature>
<AppFeature>
분할 창</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
키보드</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Terminal</Keyword>
<Keyword>
Console</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Esta é a versão prévia do Terminal do Windows, que contém os recursos mais recentes à medida que são desenvolvidos. O Terminal do Windows é um aplicativo de terminal moderno, rápido, eficiente, poderoso e produtivo para usuários de ferramentas de linha de comando e shells como Prompt de Comando, PowerShell e WSL. Seus principais recursos incluem várias guias, painéis, suporte a caracteres Unicode e UTF-8, um mecanismo de renderização de texto acelerado por GPU e temas, estilos e configurações personalizados.
Este é um projeto de código aberto e a participação da comunidade é bem-vinda. Para participar, visite https://github.com/microsoft/terminal </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Versão __VERSION_NUMBER__
Consulte nossa página de lançamentos do GitHub para obter detalhes adicionais.
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
O novo Terminal do Windows</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Várias guias</AppFeature>
<AppFeature>
Suporte completo a Unicode</AppFeature>
<AppFeature>
Renderização de texto acelerado da GPU</AppFeature>
<AppFeature>
Capacidade de personalização total</AppFeature>
<AppFeature>
Dividir Painéis</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Teclado</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Τэŕмĩņªľ !!</Keyword>
<Keyword>
Ċőñşøľě !!</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Ţћïŝ įš тнĕ φřэνїëẁ ъцîļđ ǿƒ τħ℮ Шĭηðòẅş Ŧёřmΐиăļ, ώĥϊĉђ čŏηтãįηš тħ℮ ŀдτеŝт ƒèäťύŕзş άš ŧђĕў àřė ðёνεℓŏρёđ. Ŧне Ẅĩŋδōẅѕ Ţęгmίηāł ΐš ă моðεѓñ, ƒäŝŧ, эƒƒιĉϊєητ, φθẁėŗƒũľ, ãиď ряθðύčŧĩνз ŧèѓmíʼnǻł áррļïсąтīóň ƒőŗ üś℮ѓѕ òƒ čømмάńδ-ĺïиè τόõļѕ ăлð şђĕľŀѕ ľĩкě Ćοαπď Ρяŏmрτ, ΡòẁέгŠђęļľ, ǻηδ ЩŠ₤. Ìťŝ mąΐή ƒэаτцřéѕ іňçĺūδé мūłţΐφľê тдьŝ, ρàñεś, Ûńϊċбðê àⁿđ ЏΤ₣-8 ćћªřαςťέř ŝųррǿřţ, ą ĠРÚ дссêŀεŗąţєđ ŧė×τ řēήďéřίпğ êňĝĩňè, ăиð čύşтθm ťћемêѕ, śŧỳļěѕ, âπđ сøńƒìġųřатîőήѕ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!
Ťĥìŝ ΐś åń óφёй ŝõùřçė ρřоĵзĉт ǻńδ ẃě ẅéŀčŏmę ĉõmmüⁿĭτу ρåгŧϊсїφатïοη. Ťŏ ράѓţιċίрªт℮ φļэăśę νΐŝîт ħτţφŝ://ģįτђцъ.сόm/мïςřоѕоƒт/τέřmϊʼnǻŀ !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Vėѓѕіöй __VERSION_NUMBER__ !!! !!! !
Рļєάśé ѕέę όüґ ĢίŧĦŭв řęļзąѕєš рαġè ƒőŗ äđδĭτíθņâℓ đέтαιľś. !!! !!! !!! !!! !!! !!!
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png" />
<BoxArt FileName="Store Box Art.png" />
<PromotionalArt16x9 FileName="Store Thumbnail.png" />
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
Ŧћë иĕẁ Шįπδõωš Тёŗmĭлдŀ !!! !!! !</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Μΰℓţіρļę ťăъś !!! </AppFeature>
<AppFeature>
₣υłľ Űňìčόďέ şůррοяŧ !!! !!!</AppFeature>
<AppFeature>
ĞΡÙ-асçêľëřăţєđ ţέхŧ яéʼnδęŗίńğ !!! !!! !!!</AppFeature>
<AppFeature>
₣џℓł ćűşŧõmîźăвϊľįтγ !!! !!!</AppFeature>
<AppFeature>
Ŝφľīť ρªлёѕ !!!</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Κёÿъόáѓď !!</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Ĉθрўґіġнт (с) Μìĉгōŝŏƒτ Čōяροґąтΐοй !!! !!! !!! !</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
ћťŧφş://ġїţħųъ.ćòm/mįćѓσşòƒţ/ŧέřмїʼnаŀ !!! !!! !!! !!</WebsiteURL>
<SupportContactInfo>
ђтťφş://ĝїťнûв.¢ǿm/мíčѓõŝόƒτ/ŧеґmіиάł/ΐѕѕύéѕ/ηëш !!! !!! !!! !!! !!</SupportContactInfo>
<PrivacyPolicyURL>
ĥţťφş://ģō.mîċґοşоƒт.ĉöм/ƒẃłīик/?₤ϊñķΪÐ=521839 !!! !!! !!! !!! !</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Τэŕмĩņªľ !!</Keyword>
<Keyword>
Ċőñşøľě !!</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Ţћïŝ įš тнĕ φřэνїëẁ ъцîļđ ǿƒ τħ℮ Шĭηðòẅş Ŧёřmΐиăļ, ώĥϊĉђ čŏηтãįηš тħ℮ ŀдτеŝт ƒèäťύŕзş άš ŧђĕў àřė ðёνεℓŏρёđ. Ŧне Ẅĩŋδōẅѕ Ţęгmίηāł ΐš ă моðεѓñ, ƒäŝŧ, эƒƒιĉϊєητ, φθẁėŗƒũľ, ãиď ряθðύčŧĩνз ŧèѓmíʼnǻł áррļïсąтīóň ƒőŗ üś℮ѓѕ òƒ čømмάńδ-ĺïиè τόõļѕ ăлð şђĕľŀѕ ľĩкě Ćοαπď Ρяŏmрτ, ΡòẁέгŠђęļľ, ǻηδ ЩŠ₤. Ìťŝ mąΐή ƒэаτцřéѕ іňçĺūδé мūłţΐφľê тдьŝ, ρàñεś, Ûńϊċбðê àⁿđ ЏΤ₣-8 ćћªřαςťέř ŝųррǿřţ, ą ĠРÚ дссêŀεŗąţєđ ŧė×τ řēήďéřίпğ êňĝĩňè, ăиð čύşтθm ťћемêѕ, śŧỳļěѕ, âπđ сøńƒìġųřатîőήѕ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!
Ťĥìŝ ΐś åń óφёй ŝõùřçė ρřоĵзĉт ǻńδ ẃě ẅéŀčŏmę ĉõmmüⁿĭτу ρåгŧϊсїφатïοη. Ťŏ ράѓţιċίрªт℮ φļэăśę νΐŝîт ħτţφŝ://ģįτђцъ.сόm/мïςřоѕоƒт/τέřmϊʼnǻŀ !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Vėѓѕіöй __VERSION_NUMBER__ !!! !!! !
Рļєάśé ѕέę όüґ ĢίŧĦŭв řęļзąѕєš рαġè ƒőŗ äđδĭτíθņâℓ đέтαιľś. !!! !!! !!! !!! !!! !!!
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png" />
<BoxArt FileName="Store Box Art.png" />
<PromotionalArt16x9 FileName="Store Thumbnail.png" />
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
Ŧћë иĕẁ Шįπδõωš Тёŗmĭлдŀ !!! !!! !</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Μΰℓţіρļę ťăъś !!! </AppFeature>
<AppFeature>
₣υłľ Űňìčόďέ şůррοяŧ !!! !!!</AppFeature>
<AppFeature>
ĞΡÙ-асçêľëřăţєđ ţέхŧ яéʼnδęŗίńğ !!! !!! !!!</AppFeature>
<AppFeature>
₣џℓł ćűşŧõmîźăвϊľįтγ !!! !!!</AppFeature>
<AppFeature>
Ŝφľīť ρªлёѕ !!!</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Κёÿъόáѓď !!</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Ĉθрўґіġнт (с) Μìĉгōŝŏƒτ Čōяροґąтΐοй !!! !!! !!! !</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
ћťŧφş://ġїţħųъ.ćòm/mįćѓσşòƒţ/ŧέřмїʼnаŀ !!! !!! !!! !!</WebsiteURL>
<SupportContactInfo>
ђтťφş://ĝїťнûв.¢ǿm/мíčѓõŝόƒτ/ŧеґmіиάł/ΐѕѕύéѕ/ηëш !!! !!! !!! !!! !!</SupportContactInfo>
<PrivacyPolicyURL>
ĥţťφş://ģō.mîċґοşоƒт.ĉöм/ƒẃłīик/?₤ϊñķΪÐ=521839 !!! !!! !!! !!! !</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Τэŕмĩņªľ !!</Keyword>
<Keyword>
Ċőñşøľě !!</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Ţћïŝ įš тнĕ φřэνїëẁ ъцîļđ ǿƒ τħ℮ Шĭηðòẅş Ŧёřmΐиăļ, ώĥϊĉђ čŏηтãįηš тħ℮ ŀдτеŝт ƒèäťύŕзş άš ŧђĕў àřė ðёνεℓŏρёđ. Ŧне Ẅĩŋδōẅѕ Ţęгmίηāł ΐš ă моðεѓñ, ƒäŝŧ, эƒƒιĉϊєητ, φθẁėŗƒũľ, ãиď ряθðύčŧĩνз ŧèѓmíʼnǻł áррļïсąтīóň ƒőŗ üś℮ѓѕ òƒ čømмάńδ-ĺïиè τόõļѕ ăлð şђĕľŀѕ ľĩкě Ćοαπď Ρяŏmрτ, ΡòẁέгŠђęļľ, ǻηδ ЩŠ₤. Ìťŝ mąΐή ƒэаτцřéѕ іňçĺūδé мūłţΐφľê тдьŝ, ρàñεś, Ûńϊċбðê àⁿđ ЏΤ₣-8 ćћªřαςťέř ŝųррǿřţ, ą ĠРÚ дссêŀεŗąţєđ ŧė×τ řēήďéřίпğ êňĝĩňè, ăиð čύşтθm ťћемêѕ, śŧỳļěѕ, âπđ сøńƒìġųřатîőήѕ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!
Ťĥìŝ ΐś åń óφёй ŝõùřçė ρřоĵзĉт ǻńδ ẃě ẅéŀčŏmę ĉõmmüⁿĭτу ρåгŧϊсїφатïοη. Ťŏ ράѓţιċίрªт℮ φļэăśę νΐŝîт ħτţφŝ://ģįτђцъ.сόm/мïςřоѕоƒт/τέřmϊʼnǻŀ !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Vėѓѕіöй __VERSION_NUMBER__ !!! !!! !
Рļєάśé ѕέę όüґ ĢίŧĦŭв řęļзąѕєš рαġè ƒőŗ äđδĭτíθņâℓ đέтαιľś. !!! !!! !!! !!! !!! !!!
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png" />
<BoxArt FileName="Store Box Art.png" />
<PromotionalArt16x9 FileName="Store Thumbnail.png" />
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
Ŧћë иĕẁ Шįπδõωš Тёŗmĭлдŀ !!! !!! !</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Μΰℓţіρļę ťăъś !!! </AppFeature>
<AppFeature>
₣υłľ Űňìčόďέ şůррοяŧ !!! !!!</AppFeature>
<AppFeature>
ĞΡÙ-асçêľëřăţєđ ţέхŧ яéʼnδęŗίńğ !!! !!! !!!</AppFeature>
<AppFeature>
₣џℓł ćűşŧõmîźăвϊľįтγ !!! !!!</AppFeature>
<AppFeature>
Ŝφľīť ρªлёѕ !!!</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Κёÿъόáѓď !!</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Ĉθрўґіġнт (с) Μìĉгōŝŏƒτ Čōяροґąтΐοй !!! !!! !!! !</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
ћťŧφş://ġїţħųъ.ćòm/mįćѓσşòƒţ/ŧέřмїʼnаŀ !!! !!! !!! !!</WebsiteURL>
<SupportContactInfo>
ђтťφş://ĝїťнûв.¢ǿm/мíčѓõŝόƒτ/ŧеґmіиάł/ΐѕѕύéѕ/ηëш !!! !!! !!! !!! !!</SupportContactInfo>
<PrivacyPolicyURL>
ĥţťφş://ģō.mîċґοşоƒт.ĉöм/ƒẃłīик/?₤ϊñķΪÐ=521839 !!! !!! !!! !!! !</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Терминал</Keyword>
<Keyword>
Консоль</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Это предварительная сборка Windows Terminal, которая содержит новейшие функции по мере их разработки. Windows Terminal - это современное, быстрое, эффективное, мощное и продуктивное терминальное приложение для пользователей инструментов командной строки и оболочек, таких как командная строка, PowerShell и WSL. Его основные функции включают в себя несколько вкладок, панелей, поддержку символов Unicode и UTF-8, движок рендеринга текста с GPU-ускорением, а также настраиваемые темы, стили и конфигурации.
Это проект с открытым исходным кодом, и мы приветствуем участие сообщества. Для участия, пожалуйста, посетите https://github.com/microsoft/terminal </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Версия __VERSION_NUMBER__
Дополнительные сведения см. на странице «Выпуски GitHub».
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
Новый Терминал Windows</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Множественные вкладки</AppFeature>
<AppFeature>
Полная поддержка Юникода</AppFeature>
<AppFeature>
Отрисовка текста с использованием графического ускорителя</AppFeature>
<AppFeature>
Полная настройка</AppFeature>
<AppFeature>
Разделение областей</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Клавиатура</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
(C) Корпорация Майкрософт (Microsoft Corporation)</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
终端</Keyword>
<Keyword>
控制台</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
这是 Windows 终端的预览版本其中包含最新功能。Windows 终端是一款新式、快速、高效、强大且高效的终端应用程序适用于命令行工具和命令提示符PowerShell和 WSL 等 Shell 用户。主要功能包括多个选项卡、窗格、Unicode、和 UTF-8 字符支持GPU 加速文本渲染引擎以及自定义主题、样式和配置。
这是一个开源项目,我们欢迎社区参与。如要参与,请访问 https://github.com/microsoft/terminal </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
版本 __VERSION_NUMBER__
有关其他详细信息,请参阅我们的 GitHub 发布页面。
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
新 Windows 终端</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
多选项卡</AppFeature>
<AppFeature>
完全 Unicode 支持</AppFeature>
<AppFeature>
GPU 加速文本渲染</AppFeature>
<AppFeature>
全自定义</AppFeature>
<AppFeature>
拆分窗格</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
键盘</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
版权所有(c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
終端</Keyword>
<Keyword>
主控台</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
這是 Windows 終端機的預覽版其中包含最新開發的功能。Windows 終端機是一種新式、快速、高效、功能強大且具生產力的終端應用程式,適合命令列工具和 Shell (例如命令提示字元、PowerShell 和 WSL) 的使用者。主要功能包括多個索引標籤、窗格、Unicode 和 UTF-8 字元支援、GPU 加速的文字呈現引擎,以及自訂佈景主題、樣式和設定。
這是開放原始碼的專案,我們歡迎參與社群。若要參與,請瀏覽 https://github.com/microsoft/terminal </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
版本 __VERSION_NUMBER__
如需詳細資訊,請參閱我們的 GitHub 版本頁面。
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
新的 Windows 終端機</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
多重索引標籤</AppFeature>
<AppFeature>
完整 Unicode 支援</AppFeature>
<AppFeature>
GPU 加速的文字呈現</AppFeature>
<AppFeature>
完整自訂能力</AppFeature>
<AppFeature>
分割窗格</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
鍵盤</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,67 @@
{
"helpUri": "https:\\\\aka.ms\\StoreBroker_Config",
"schemaVersion": 2,
"packageParameters": {
"PDPRootPath": "PDPs",
"Release": "",
"PDPInclude": ["PDP.xml"],
"PDPExclude": [],
"LanguageExclude": [
"default",
"qps-ploc",
"qps-ploca",
"qps-plocm"
],
"MediaRootPath": "..\\Media",
"MediaFallbackLanguage": "en-us",
"PackagePath": [],
"OutPath": "..\\SubmissionPackages",
"OutName": "WindowsTerminalPreview",
"DisableAutoPackageNameFormatting": false
},
"appSubmission": {
"productId": "00014050269303149694",
"targetPublishMode": "NotSet",
"targetPublishDate": null,
"visibility": "NotSet",
"pricing": {
"priceId": "NotAvailable",
"trialPeriod": "NoFreeTrial",
"marketSpecificPricings": {},
"sales": []
},
"allowTargetFutureDeviceFamilies": {
"Xbox": false,
"Team": false,
"Holographic": false,
"Desktop": false,
"Mobile": false
},
"allowMicrosoftDecideAppAvailabilityToFutureDeviceFamilies": false,
"enterpriseLicensing": "None",
"applicationCategory": "NotSet",
"hardwarePreferences": [],
"hasExternalInAppProducts": false,
"meetAccessibilityGuidelines": false,
"canInstallOnRemovableMedia": false,
"automaticBackupEnabled": false,
"isGameDvrEnabled": false,
"gamingOptions": [
{
"genres": [],
"isLocalMultiplayer": false,
"isLocalCooperative": false,
"isOnlineMultiplayer": false,
"isOnlineCooperative": false,
"localMultiplayerMinPlayers": 0,
"localMultiplayerMaxPlayers": 0,
"localCooperativeMinPlayers": 0,
"localCooperativeMaxPlayers": 0,
"isBroadcastingPrivilegeGranted": false,
"isCrossPlayEnabled": false,
"kinectDataForExternal": "Disabled"
}
],
"notesForCertification": ""
}
}

View File

@@ -0,0 +1,3 @@
This directory is intended to be used with the [StoreBroker PowerShell module].
[StoreBroker PowerShell module]: https://github.com/microsoft/StoreBroker/tree/v2

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Terminal</Keyword>
<Keyword>
Konsole</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Das Windows-Terminal ist eine moderne, schnelle, effiziente, leistungsstarke und produktive Terminal-Anwendung für Benutzer von Befehlszeilentools und Shells wie beispielsweise Eingabeaufforderung, PowerShell und WSL. Die wichtigsten Funktionen des Windows-Terminals umfassen mehrere Registerkarten, Bereiche, Unicode- und UTF-8-Zeichenunterstützung, GPU-beschleunigtes Textrendering-Modul sowie benutzerdefinierte Designs, Formatvorlagen und Konfigurationen.
Dies ist ein Open Source-Projekt, und wir freuen uns über die Teilnahme an der Community. Um teilzunehmen, besuchen Sie bitte die Website https://github.com/microsoft/terminal </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Version __VERSION_NUMBER__
Weitere Einzelheiten finden Sie auf der Seite der GitHub-Veröffentlichungen.
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
Das neue Windows-Terminal</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Mehrere Registerkarten</AppFeature>
<AppFeature>
Vollständige Unicode-Unterstützung</AppFeature>
<AppFeature>
GPU-beschleunigtes Textrendering</AppFeature>
<AppFeature>
Vollständige Anpassbarkeit</AppFeature>
<AppFeature>
Geteilte Bereiche</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Tastatur</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName _locID="App_AppStoreName">
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- _locComment_text="{MaxLength=200} App AppStoreName" -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword _locID="App_keyword1">
<!-- _locComment_text="{MaxLength=30} App keyword 1" -->Terminal</Keyword>
<Keyword _locID="App_keyword2">
<!-- _locComment_text="{MaxLength=30} App keyword 2" -->Console</Keyword>
<Keyword _locID="App_keyword3">
<!-- _locComment_text="{MaxLength=30} App keyword 3" -->
</Keyword>
<Keyword _locID="App_keyword4">
<!-- _locComment_text="{MaxLength=30} App keyword 4" -->
</Keyword>
<Keyword _locID="App_keyword5">
<!-- _locComment_text="{MaxLength=30} App keyword 5" -->
</Keyword>
<Keyword _locID="App_keyword6">
<!-- _locComment_text="{MaxLength=30} App keyword 6" -->
</Keyword>
<Keyword _locID="App_keyword7">
<!-- _locComment_text="{MaxLength=30} App keyword 7" -->
</Keyword>
</Keywords>
<Description _locID="App_Description">
<!-- _locComment_text="{MaxLength=10000} {Locked=Windows} App Description" -->The Windows Terminal is a modern, fast, efficient, powerful, and productive terminal application for users of command-line tools and shells like Command Prompt, PowerShell, and WSL. Its main features include multiple tabs, panes, Unicode and UTF-8 character support, a GPU accelerated text rendering engine, and custom themes, styles, and configurations.
This is an open source project and we welcome community participation. To participate please visit https://github.com/microsoft/terminal </Description>
<ShortDescription _locID="App_ShortDescription">
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
<!-- _locComment_text="{MaxLength=500} App ShortDescription" -->
</ShortDescription>
<ShortTitle _locID="App_ShortTitle">
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
<!-- _locComment_text="{MaxLength=50} App ShortTitle" -->
</ShortTitle>
<SortTitle _locID="App_SortTitle">
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
<!-- _locComment_text="{MaxLength=255} App SortTitle" -->
</SortTitle>
<VoiceTitle _locID="App_VoiceTitle">
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
<!-- _locComment_text="{MaxLength=255} App VoiceTitle" -->
</VoiceTitle>
<DevStudio _locID="App_DevStudio">
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
<!-- _locComment_text="{MaxLength=255} App DevStudio" -->
</DevStudio>
<ReleaseNotes _locID="App_ReleaseNotes">
<!-- _locComment_text="{MaxLength=1500} {Locked=__VERSION_NUMBER__} App Release Note" -->Version __VERSION_NUMBER__
Please see our GitHub releases page for additional details.
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png" _locID="App_caption1">
<!-- _locComment_text="{MaxLength=200} Screenshot caption 1" -->
</Caption>
<Caption DesktopImage="panes.png" _locID="App_caption2">
<!-- _locComment_text="{MaxLength=200} Screenshot caption 2" -->
</Caption>
<Caption DesktopImage="htop.png" _locID="App_caption3">
<!-- _locComment_text="{MaxLength=200} Screenshot caption 3" -->
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png" />
<BoxArt FileName="Store Box Art.png" />
<PromotionalArt16x9 FileName="Store Thumbnail.png" />
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title _locID="App_trailerTitle1">
<!-- _locComment_text="{MaxLength=255} Trailer title 1" -->The new Windows Terminal</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
<!-- _locComment_text="{Locked} Trailer screenshot 1 description" -->
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature _locID="App_feature1">
<!-- _locComment_text="{MaxLength=200} App Feature 1" -->Multiple tabs</AppFeature>
<AppFeature _locID="App_feature2">
<!-- _locComment_text="{MaxLength=200} App Feature 2" -->Full Unicode support</AppFeature>
<AppFeature _locID="App_feature3">
<!-- _locComment_text="{MaxLength=200} App Feature 3" -->GPU-accelerated text rendering</AppFeature>
<AppFeature _locID="App_feature4">
<!-- _locComment_text="{MaxLength=200} App Feature 4" -->Full customizability</AppFeature>
<AppFeature _locID="App_feature5">
<!-- _locComment_text="{MaxLength=200} App Feature 5" -->Split panes</AppFeature>
<AppFeature _locID="App_feature6">
<!-- _locComment_text="{MaxLength=200} App Feature 6" -->
</AppFeature>
<AppFeature _locID="App_feature7">
<!-- _locComment_text="{MaxLength=200} App Feature 7" -->
</AppFeature>
<AppFeature _locID="App_feature8">
<!-- _locComment_text="{MaxLength=200} App Feature 8" -->
</AppFeature>
<AppFeature _locID="App_feature9">
<!-- _locComment_text="{MaxLength=200} App Feature 9" -->
</AppFeature>
<AppFeature _locID="App_feature10">
<!-- _locComment_text="{MaxLength=200} App Feature 10" -->
</AppFeature>
<AppFeature _locID="App_feature11">
<!-- _locComment_text="{MaxLength=200} App Feature 11" -->
</AppFeature>
<AppFeature _locID="App_feature12">
<!-- _locComment_text="{MaxLength=200} App Feature 12" -->
</AppFeature>
<AppFeature _locID="App_feature13">
<!-- _locComment_text="{MaxLength=200} App Feature 13" -->
</AppFeature>
<AppFeature _locID="App_feature14">
<!-- _locComment_text="{MaxLength=200} App Feature 14" -->
</AppFeature>
<AppFeature _locID="App_feature15">
<!-- _locComment_text="{MaxLength=200} App Feature 15" -->
</AppFeature>
<AppFeature _locID="App_feature16">
<!-- _locComment_text="{MaxLength=200} App Feature 16" -->
</AppFeature>
<AppFeature _locID="App_feature17">
<!-- _locComment_text="{MaxLength=200} App Feature 17" -->
</AppFeature>
<AppFeature _locID="App_feature18">
<!-- _locComment_text="{MaxLength=200} App Feature 18" -->
</AppFeature>
<AppFeature _locID="App_feature19">
<!-- _locComment_text="{MaxLength=200} App Feature 19" -->
</AppFeature>
<AppFeature _locID="App_feature20">
<!-- _locComment_text="{MaxLength=200} App Feature 20" -->
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation _locID="App_RecommendedHW1">
<!-- _locComment_text="{MaxLength=200} App Recommended Hardware 1" -->Keyboard</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark _locID="App_CopyrightandTrademark">
<!-- _locComment_text="{MaxLength=200} Copyright and Trademark" -->Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms _locID="App_AdditionalLicenseTerms">
<!-- _locComment_text="{MaxLength=10000} Additional License Terms" -->
</AdditionalLicenseTerms>
<WebsiteURL _locID="App_WebsiteURL">
<!-- _locComment_text="{MaxLength=2048} WebsiteURL" -->https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo _locID="App_SupportContactInfo">
<!-- _locComment_text="{MaxLength=2048} Support Contact Info" -->https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL _locID="App_PrivacyURL">
<!-- _locComment_text="{MaxLength=2048} Privacy Policy URL" -->https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Terminal</Keyword>
<Keyword>
Consola</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Terminal Windows es una aplicación de terminal moderna, rápida, eficaz, eficiente y productiva para los usuarios de herramientas de línea de comandos y shell, como Símbolo del sistema, PowerShell y WSL. Entre las características principales se incluyen varias pestañas, paneles, compatibilidad con caracteres Unicode y UTF-8, un motor de representación de texto acelerado por GPU, y temas, estilos y configuraciones personalizados.
Este es un proyecto de fuente abierta y animamos a la comunidad a participar. Para colaborar, visite https://github.com/microsoft/terminal </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Versión __VERSION_NUMBER__
Para más información, consulte nuestra página de versiones de GitHub.
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
La nueva Terminal Windows</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Varias pestañas</AppFeature>
<AppFeature>
Soporte completo de Unicode</AppFeature>
<AppFeature>
Representación de texto acelerada por GPU</AppFeature>
<AppFeature>
Totalmente personalizable</AppFeature>
<AppFeature>
Paneles de división</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Teclado</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Terminal</Keyword>
<Keyword>
Console</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Le Terminal Windows est une application de terminal moderne, rapide, efficace, puissante et productive pour les utilisateurs doutils en ligne de commande et dinterpréteurs de commandes tels que lInvite de commandes, PowerShell et WSL. Ses principales fonctionnalités incluent plusieurs onglets, des volets, une prise en charge des caractères Unicode et UTF-8, un moteur de rendu de texte accéléré par GPU, ainsi que des thèmes, styles et configurations personnalisés.
Il sagit dun projet open source et nous encourageons la participation à la communauté. Pour participer, veuillez visiter le site web https://github.com/microsoft/terminal </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Version __VERSION_NUMBER__
Consultez la page des versions de GitHub pour plus dinformations.
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
Nouveau Terminal Windows</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Plusieurs onglets</AppFeature>
<AppFeature>
Prise en charge complète dUnicode</AppFeature>
<AppFeature>
Rendu de texte accéléré par GPU</AppFeature>
<AppFeature>
Personnalisation complète</AppFeature>
<AppFeature>
Volets de fractionnement</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Clavier</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Terminale</Keyword>
<Keyword>
Console</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Terminale Windows è un'applicazione terminale moderna, veloce, efficiente, utile e produttiva per gli utenti che utilizzano shell e strumenti da riga di comando come il prompt dei comandi, PowerShell e WSL. Le funzionalità principali includono più schede, riquadri, supporto di caratteri Unicode e UTF-8, un motore di rendering del testo con accelerazione GPU e temi, stili e configurazioni personalizzati.
Si tratta di un progetto open source e la partecipazione della community è molto gradita. Per partecipare, visita la pagina https://github.com/microsoft/terminale </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Versione __VERSION_NUMBER__
Per ulteriori dettagli, consulta la nostra pagina delle versioni di GitHub.
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
Il nuovo Terminale Windows</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Schede multiple</AppFeature>
<AppFeature>
Supporto Unicode completo</AppFeature>
<AppFeature>
Rendering del testo con accelerazione GPU</AppFeature>
<AppFeature>
Personalizzazione completa</AppFeature>
<AppFeature>
Riquadri divisi</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Tastiera</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
ターミナル</Keyword>
<Keyword>
コンソール</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Windows ターミナルは、コマンド プロンプト、PowerShell、WSL などのコマンドライン ツールおよびシェルのユーザーのための、高速、効率的、強力な、生産性を向上させる最新のターミナル アプリケーションです。主な機能には、複数のタブ、ウィンドウ、Unicode および UTF-8 文字のサポート、GPU アクセラレータによるテキスト レンダリング エンジン、カスタマイズできるテーマ、スタイル、構成が含まれます。
これはオープン ソース プロジェクトで、コミュニティへの参加をお待ちしております。参加する場合は、https://github.com/microsoft/terminal にアクセスしてください </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
バージョン __VERSION_NUMBER__
詳細については、GitHub リリースのページをご覧ください。
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
新しい Windows ターミナル</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
複数のタブ</AppFeature>
<AppFeature>
Unicode の完全なサポート</AppFeature>
<AppFeature>
GPU アクセラレータによるテキストのレンダリング</AppFeature>
<AppFeature>
完全なカスタマイズ性</AppFeature>
<AppFeature>
分割ウィンドウ</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
キーボード</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
터미널</Keyword>
<Keyword>
콘솔</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Windows 터미널은 명령 프롬프트, PowerShell 및 WSL과 같은 명령 줄 도구 및 셸 사용자를 위한 최신의 빠르고 효율적이며 강력한 생산성의 터미널 응용 프로그램입니다. 주요 기능으로는 여러 탭, 창, 유니 코드 및 UTF-8 문자 지원, GPU 가속 텍스트 렌더링 엔진 및 사용자 정의 테마, 스타일 및 구성이 있습니다.
이것은 오픈 소스 프로젝트이며 커뮤니티 참여를 환영합니다. 참여하려면 https://github.com/microsoft/terminal을 방문하십시오 </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
버전 __VERSION_NUMBER__
자세한 내용은 GitHub 릴리스 페이지를 참조하세요.
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
새 Windows 터미널</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
복수 탭</AppFeature>
<AppFeature>
모든 유니코드 지원</AppFeature>
<AppFeature>
GPU 가속 텍스트 렌더링</AppFeature>
<AppFeature>
완전한 사용자 지정 가능성</AppFeature>
<AppFeature>
분할 창</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
키보드</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Terminal</Keyword>
<Keyword>
Console</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
O Terminal do Windows é um aplicativo de terminal moderno, rápido, eficiente, poderoso e produtivo para usuários de ferramentas de linha de comando e shells como Prompt de Comando, PowerShell e WSL. Seus principais recursos incluem várias guias, painéis, suporte a caracteres Unicode e UTF-8, um mecanismo de renderização de texto acelerado por GPU e temas, estilos e configurações personalizados.
Este é um projeto de código aberto e a participação da comunidade é bem-vinda. Para participar, visite https://github.com/microsoft/terminal </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Versão __VERSION_NUMBER__
Consulte nossa página de lançamentos do GitHub para obter detalhes adicionais.
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
O novo Terminal do Windows</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Várias guias</AppFeature>
<AppFeature>
Suporte completo a Unicode</AppFeature>
<AppFeature>
Renderização de texto acelerado da GPU</AppFeature>
<AppFeature>
Capacidade de personalização total</AppFeature>
<AppFeature>
Dividir Painéis</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Teclado</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Τэŕмĩņªľ !!</Keyword>
<Keyword>
Ċőñşøľě !!</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Ţћē Windows Ťěřмĭпªļ ΐŝ а mσđŗⁿ, ƒαšτ, 냃ĭċíèñŧ, ρоώëřƒųļ, ãлđ ρгσďűςťįν℮ тĕгмΐņǻľ аφφľīсàтĭόʼn ƒбř ΰśēřś оƒ ċǿmmάņď-ľιñĕ тθōℓѕ àήδ ŝнέŀłš ℓįкё Ćσммāпď Рřσmρŧ, РощёŕŠћėļℓ, ãπď ŴŜŁ. Īтś мǻĭп ƒзåţųŗêš ιņçłϋðē мΰℓŧìрļέ ţãвš, ράи℮ѕ, Üήιсοδê âиð ŮΤ₣-8 ćћăŗªĉтĕя şΰρφоѓť, ă ĜРЏ äĉçěľēґάţèđ ŧ℮жт яēπđěřĭñģ éπğíńз, åñδ сύšťóм тћêmĕš, śŧŷłéš, âπð ςбήƒīĝџѓáťίόńš. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !
Ţĥíŝ ιš άň øρèñ šθūѓςë ρгбјė¢τ ąʼnð ẅ℮ ẃêŀċõмè сοмmúńїťγ φàřτĩĉîрªťϊòη. Ţò ράятїĉîрǻŧê ρĺęαŝě νîŝϊт ħŧťφѕ://ġїтђûь.ĉόm/mìĉřòşοƒţ/τéřmíпâľ !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Vėѓѕіöй __VERSION_NUMBER__ !!! !!! !
Рļєάśé ѕέę όüґ ĢίŧĦŭв řęļзąѕєš рαġè ƒőŗ äđδĭτíθņâℓ đέтαιľś. !!! !!! !!! !!! !!! !!!
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png" />
<BoxArt FileName="Store Box Art.png" />
<PromotionalArt16x9 FileName="Store Thumbnail.png" />
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
Ŧћë иĕẁ Шįπδõωš Тёŗmĭлдŀ !!! !!! !</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Μΰℓţіρļę ťăъś !!! </AppFeature>
<AppFeature>
₣υłľ Űňìčόďέ şůррοяŧ !!! !!!</AppFeature>
<AppFeature>
ĞΡÙ-асçêľëřăţєđ ţέхŧ яéʼnδęŗίńğ !!! !!! !!!</AppFeature>
<AppFeature>
₣џℓł ćűşŧõmîźăвϊľįтγ !!! !!!</AppFeature>
<AppFeature>
Ŝφľīť ρªлёѕ !!!</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Κёÿъόáѓď !!</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Ĉθрўґіġнт (с) Μìĉгōŝŏƒτ Čōяροґąтΐοй !!! !!! !!! !</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
ћťŧφş://ġїţħųъ.ćòm/mįćѓσşòƒţ/ŧέřмїʼnаŀ !!! !!! !!! !!</WebsiteURL>
<SupportContactInfo>
ђтťφş://ĝїťнûв.¢ǿm/мíčѓõŝόƒτ/ŧеґmіиάł/ΐѕѕύéѕ/ηëш !!! !!! !!! !!! !!</SupportContactInfo>
<PrivacyPolicyURL>
ĥţťφş://ģō.mîċґοşоƒт.ĉöм/ƒẃłīик/?₤ϊñķΪÐ=521839 !!! !!! !!! !!! !</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Τэŕмĩņªľ !!</Keyword>
<Keyword>
Ċőñşøľě !!</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Ţћē Windows Ťěřмĭпªļ ΐŝ а mσđŗⁿ, ƒαšτ, 냃ĭċíèñŧ, ρоώëřƒųļ, ãлđ ρгσďűςťįν℮ тĕгмΐņǻľ аφφľīсàтĭόʼn ƒбř ΰśēřś оƒ ċǿmmάņď-ľιñĕ тθōℓѕ àήδ ŝнέŀłš ℓįкё Ćσммāпď Рřσmρŧ, РощёŕŠћėļℓ, ãπď ŴŜŁ. Īтś мǻĭп ƒзåţųŗêš ιņçłϋðē мΰℓŧìрļέ ţãвš, ράи℮ѕ, Üήιсοδê âиð ŮΤ₣-8 ćћăŗªĉтĕя şΰρφоѓť, ă ĜРЏ äĉçěľēґάţèđ ŧ℮жт яēπđěřĭñģ éπğíńз, åñδ сύšťóм тћêmĕš, śŧŷłéš, âπð ςбήƒīĝџѓáťίόńš. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !
Ţĥíŝ ιš άň øρèñ šθūѓςë ρгбјė¢τ ąʼnð ẅ℮ ẃêŀċõмè сοмmúńїťγ φàřτĩĉîрªťϊòη. Ţò ράятїĉîрǻŧê ρĺęαŝě νîŝϊт ħŧťφѕ://ġїтђûь.ĉόm/mìĉřòşοƒţ/τéřmíпâľ !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Vėѓѕіöй __VERSION_NUMBER__ !!! !!! !
Рļєάśé ѕέę όüґ ĢίŧĦŭв řęļзąѕєš рαġè ƒőŗ äđδĭτíθņâℓ đέтαιľś. !!! !!! !!! !!! !!! !!!
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png" />
<BoxArt FileName="Store Box Art.png" />
<PromotionalArt16x9 FileName="Store Thumbnail.png" />
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
Ŧћë иĕẁ Шįπδõωš Тёŗmĭлдŀ !!! !!! !</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Μΰℓţіρļę ťăъś !!! </AppFeature>
<AppFeature>
₣υłľ Űňìčόďέ şůррοяŧ !!! !!!</AppFeature>
<AppFeature>
ĞΡÙ-асçêľëřăţєđ ţέхŧ яéʼnδęŗίńğ !!! !!! !!!</AppFeature>
<AppFeature>
₣џℓł ćűşŧõmîźăвϊľįтγ !!! !!!</AppFeature>
<AppFeature>
Ŝφľīť ρªлёѕ !!!</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Κёÿъόáѓď !!</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Ĉθрўґіġнт (с) Μìĉгōŝŏƒτ Čōяροґąтΐοй !!! !!! !!! !</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
ћťŧφş://ġїţħųъ.ćòm/mįćѓσşòƒţ/ŧέřмїʼnаŀ !!! !!! !!! !!</WebsiteURL>
<SupportContactInfo>
ђтťφş://ĝїťнûв.¢ǿm/мíčѓõŝόƒτ/ŧеґmіиάł/ΐѕѕύéѕ/ηëш !!! !!! !!! !!! !!</SupportContactInfo>
<PrivacyPolicyURL>
ĥţťφş://ģō.mîċґοşоƒт.ĉöм/ƒẃłīик/?₤ϊñķΪÐ=521839 !!! !!! !!! !!! !</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Τэŕмĩņªľ !!</Keyword>
<Keyword>
Ċőñşøľě !!</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Ţћē Windows Ťěřмĭпªļ ΐŝ а mσđŗⁿ, ƒαšτ, 냃ĭċíèñŧ, ρоώëřƒųļ, ãлđ ρгσďűςťįν℮ тĕгмΐņǻľ аφφľīсàтĭόʼn ƒбř ΰśēřś оƒ ċǿmmάņď-ľιñĕ тθōℓѕ àήδ ŝнέŀłš ℓįкё Ćσммāпď Рřσmρŧ, РощёŕŠћėļℓ, ãπď ŴŜŁ. Īтś мǻĭп ƒзåţųŗêš ιņçłϋðē мΰℓŧìрļέ ţãвš, ράи℮ѕ, Üήιсοδê âиð ŮΤ₣-8 ćћăŗªĉтĕя şΰρφоѓť, ă ĜРЏ äĉçěľēґάţèđ ŧ℮жт яēπđěřĭñģ éπğíńз, åñδ сύšťóм тћêmĕš, śŧŷłéš, âπð ςбήƒīĝџѓáťίόńš. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !
Ţĥíŝ ιš άň øρèñ šθūѓςë ρгбјė¢τ ąʼnð ẅ℮ ẃêŀċõмè сοмmúńїťγ φàřτĩĉîрªťϊòη. Ţò ράятїĉîрǻŧê ρĺęαŝě νîŝϊт ħŧťφѕ://ġїтђûь.ĉόm/mìĉřòşοƒţ/τéřmíпâľ !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Vėѓѕіöй __VERSION_NUMBER__ !!! !!! !
Рļєάśé ѕέę όüґ ĢίŧĦŭв řęļзąѕєš рαġè ƒőŗ äđδĭτíθņâℓ đέтαιľś. !!! !!! !!! !!! !!! !!!
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png" />
<BoxArt FileName="Store Box Art.png" />
<PromotionalArt16x9 FileName="Store Thumbnail.png" />
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
Ŧћë иĕẁ Шįπδõωš Тёŗmĭлдŀ !!! !!! !</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Μΰℓţіρļę ťăъś !!! </AppFeature>
<AppFeature>
₣υłľ Űňìčόďέ şůррοяŧ !!! !!!</AppFeature>
<AppFeature>
ĞΡÙ-асçêľëřăţєđ ţέхŧ яéʼnδęŗίńğ !!! !!! !!!</AppFeature>
<AppFeature>
₣џℓł ćűşŧõmîźăвϊľįтγ !!! !!!</AppFeature>
<AppFeature>
Ŝφľīť ρªлёѕ !!!</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Κёÿъόáѓď !!</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Ĉθрўґіġнт (с) Μìĉгōŝŏƒτ Čōяροґąтΐοй !!! !!! !!! !</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
ћťŧφş://ġїţħųъ.ćòm/mįćѓσşòƒţ/ŧέřмїʼnаŀ !!! !!! !!! !!</WebsiteURL>
<SupportContactInfo>
ђтťφş://ĝїťнûв.¢ǿm/мíčѓõŝόƒτ/ŧеґmіиάł/ΐѕѕύéѕ/ηëш !!! !!! !!! !!! !!</SupportContactInfo>
<PrivacyPolicyURL>
ĥţťφş://ģō.mîċґοşоƒт.ĉöм/ƒẃłīик/?₤ϊñķΪÐ=521839 !!! !!! !!! !!! !</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
Терминал</Keyword>
<Keyword>
Консоль</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Терминал Windows — это современное, быстрое, мощное и эффективное приложение терминала для пользователей средств командной строки и оболочек, таких как Командная строка, PowerShell и WSL. В число его основных функций входят множественные вкладки, панели, поддержка символов Юникода и UTF-8, модуль отрисовки текста с использованием графического ускорителя, а также пользовательские темы, стили и конфигурации.
Это проект с открытым исходным кодом, и мы приглашаем сообщество к участию. Чтобы внести вклад, посетите страницу https://github.com/microsoft/terminal </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
Версия __VERSION_NUMBER__
Дополнительные сведения см. на странице «Выпуски GitHub».
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
Новый Терминал Windows</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
Множественные вкладки</AppFeature>
<AppFeature>
Полная поддержка Юникода</AppFeature>
<AppFeature>
Отрисовка текста с использованием графического ускорителя</AppFeature>
<AppFeature>
Полная настройка</AppFeature>
<AppFeature>
Разделение областей</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
Клавиатура</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
(C) Корпорация Майкрософт (Microsoft Corporation)</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
终端</Keyword>
<Keyword>
控制台</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Windows 终端程序是一款新式、快速、高效、强大且高效的终端应用程序适用于命令行工具和命令提示符PowerShell和 WSL 等 Shell 用户。主要功能包括多个选项卡、窗格、Unicode、和 UTF-8 字符支持GPU 加速文本渲染引擎以及自定义主题、样式和配置。
这是一个开源项目,我们欢迎社区参与。如要参与,请访问 https://github.com/microsoft/terminal </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
版本 __VERSION_NUMBER__
有关其他详细信息,请参阅我们的 GitHub 发布页面。
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
新 Windows 终端</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
多选项卡</AppFeature>
<AppFeature>
完全 Unicode 支持</AppFeature>
<AppFeature>
GPU 加速文本渲染</AppFeature>
<AppFeature>
全自定义</AppFeature>
<AppFeature>
拆分窗格</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
键盘</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
版权所有(c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="utf-8"?>
<ProductDescription language="en-us" xmlns="http://schemas.microsoft.com/appx/2012/ProductDescription" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" Release="">
<AppStoreName>
<!-- This is optional. AppStoreName is typically extracted from your package's AppxManifest DisplayName property. -->
<!-- Uncomment (and localize) this Store name if your application package does not contain a localization for the DisplayName in this language. -->
<!-- Leaving this uncommented for a language that your application package DOES contain a DisplayName for will result in a submission failure with the API. -->
<!-- Windows Terminal -->
</AppStoreName>
<Keywords>
<!-- Valid length: 30 character limit, up to 7 elements -->
<Keyword>
終端</Keyword>
<Keyword>
主控台</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
<Keyword>
</Keyword>
</Keywords>
<Description>
Windows 終端機是一種現代化、快速、高效、功能強大且具生產力的終端應用程式,適合命令列工具和 Shell (像是命令提示字元、PowerShell 和 WSL) 的使用者。主要功能包括多個索引標籤、窗格、Unicode 和 UTF-8 字元支援、GPU 加速的文字呈現引擎,以及自訂主題、樣式和設定。
這是開放原始碼的專案,我們歡迎參與社群。若要參與,請瀏覽 https://github.com/microsoft/terminal </Description>
<ShortDescription>
<!-- Only used for games. This description appears in the Information section of the Game Hub on Xbox One, and helps customers understand more about your game. -->
</ShortDescription>
<ShortTitle>
<!-- A shorter version of your product's name. If provided, this shorter name may appear in various places on Xbox One (during installation, in Achievements, etc.) in place of the full title of your product. -->
</ShortTitle>
<SortTitle>
<!-- If your product could be alphabetized in different ways, you can enter another version here. This may help customers find the product more quickly when searching. -->
</SortTitle>
<VoiceTitle>
<!-- An alternate name for your product that, if provided, may be used in the audio experience on Xbox One when using Kinect or a headset. -->
</VoiceTitle>
<DevStudio>
<!-- Specify this value if you want to include a "Developed by" field in the listing. (The "Published by" field will list the publisher display name associated with your account, whether or not you provide a devStudio value.) -->
</DevStudio>
<ReleaseNotes>
版本 __VERSION_NUMBER__
如需詳細資訊,請參閱我們的 GitHub 版本頁面。
</ReleaseNotes>
<ScreenshotCaptions>
<!-- Valid length: 200 character limit, up to 9 elements per platform -->
<!-- Valid attributes: any of DesktopImage, MobileImage, XboxImage, SurfaceHubImage, and HoloLensImage -->
<Caption DesktopImage="acrylic-emoji.png">
</Caption>
<Caption DesktopImage="panes.png">
</Caption>
<Caption DesktopImage="htop.png">
</Caption>
</ScreenshotCaptions>
<AdditionalAssets>
<!-- Valid elements:-->
<!-- HeroImage414x180, HeroImage846x468, HeroImage558x756, HeroImage414x468, HeroImage558x558, HeroImage2400x1200,-->
<!-- ScreenshotWXGA, ScreenshotHD720, ScreenshotWVGA, Doublewide, Panoramic, Square,-->
<!-- SmallMobileTile, SmallXboxLiveTile, LargeMobileTile, LargeXboxLiveTile, Tile,-->
<!-- DesktopIcon, Icon (use this value for the 1:1 300x300 pixels logo), AchievementIcon,-->
<!-- ChallengePromoIcon, RewardDisplayIcon, Icon150X150, Icon71X71,-->
<!-- BoxArt, BrandedKeyArt, PosterArt, FeaturedPromotionalArt, PromotionalArt16x9, TitledHeroArt-->
<!-- There is no content for any of these elements, just a single attribute called FileName. -->
<PosterArt FileName="Store Poster Art.png"/>
<BoxArt FileName="Store Box Art.png"/>
<PromotionalArt16x9 FileName="Store Thumbnail.png"/>
</AdditionalAssets>
<Trailers>
<!-- Maximum number of trailers permitted: 15 -->
<Trailer FileName="CC0605_CommandLine_Teaser_WEB_MASTER_H264_1080p_23.976_-16LKFS_-3dbTP_ST.mp4">
<Title>
新的 Windows 終端機</Title>
<Images>
<!-- Current maximum of 1 image per trailer permitted. -->
<Image FileName="Store Thumbnail.png">
</Image>
</Images>
</Trailer>
</Trailers>
<AppFeatures>
<!-- Valid length: 200 character limit, up to 20 elements -->
<AppFeature>
多重索引標籤</AppFeature>
<AppFeature>
完整 Unicode 支援</AppFeature>
<AppFeature>
GPU 加速的文字呈現</AppFeature>
<AppFeature>
完整自訂能力</AppFeature>
<AppFeature>
分割窗格</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
<AppFeature>
</AppFeature>
</AppFeatures>
<RecommendedHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
<Recommendation>
鍵盤</Recommendation>
</RecommendedHardware>
<MinimumHardware>
<!-- Valid length: 200 character limit, up to 11 elements -->
</MinimumHardware>
<CopyrightAndTrademark>
Copyright (c) Microsoft Corporation</CopyrightAndTrademark>
<AdditionalLicenseTerms>
</AdditionalLicenseTerms>
<WebsiteURL>
https://github.com/microsoft/terminal</WebsiteURL>
<SupportContactInfo>
https://github.com/microsoft/terminal/issues/new</SupportContactInfo>
<PrivacyPolicyURL>
https://go.microsoft.com/fwlink/?LinkID=521839</PrivacyPolicyURL>
</ProductDescription>

View File

@@ -0,0 +1,67 @@
{
"helpUri": "https:\\\\aka.ms\\StoreBroker_Config",
"schemaVersion": 2,
"packageParameters": {
"PDPRootPath": "PDPs",
"Release": "",
"PDPInclude": ["PDP.xml"],
"PDPExclude": [],
"LanguageExclude": [
"default",
"qps-ploc",
"qps-ploca",
"qps-plocm"
],
"MediaRootPath": "..\\Media",
"MediaFallbackLanguage": "en-us",
"PackagePath": [],
"OutPath": "..\\SubmissionPackages",
"OutName": "WindowsTerminal",
"DisableAutoPackageNameFormatting": false
},
"appSubmission": {
"productId": "00013926773940052066",
"targetPublishMode": "NotSet",
"targetPublishDate": null,
"visibility": "NotSet",
"pricing": {
"priceId": "NotAvailable",
"trialPeriod": "NoFreeTrial",
"marketSpecificPricings": {},
"sales": []
},
"allowTargetFutureDeviceFamilies": {
"Xbox": false,
"Team": false,
"Holographic": false,
"Desktop": false,
"Mobile": false
},
"allowMicrosoftDecideAppAvailabilityToFutureDeviceFamilies": false,
"enterpriseLicensing": "None",
"applicationCategory": "NotSet",
"hardwarePreferences": [],
"hasExternalInAppProducts": false,
"meetAccessibilityGuidelines": false,
"canInstallOnRemovableMedia": false,
"automaticBackupEnabled": false,
"isGameDvrEnabled": false,
"gamingOptions": [
{
"genres": [],
"isLocalMultiplayer": false,
"isLocalCooperative": false,
"isOnlineMultiplayer": false,
"isOnlineCooperative": false,
"localMultiplayerMinPlayers": 0,
"localMultiplayerMaxPlayers": 0,
"localCooperativeMinPlayers": 0,
"localCooperativeMaxPlayers": 0,
"isBroadcastingPrivilegeGranted": false,
"isCrossPlayEnabled": false,
"kinectDataForExternal": "Disabled"
}
],
"notesForCertification": ""
}
}

View File

@@ -1,30 +1,32 @@
trigger:
batch: true
# branches:
# include:
# - main
# - feature/*
# - gh-readonly-queue/*
# paths:
# exclude:
# - doc/*
# - samples/*
# - tools/*
branches:
include:
- main
- feature/*
- gh-readonly-queue/*
paths:
exclude:
- doc/*
- samples/*
- tools/*
#pr:
# branches:
# include:
# - main
# - feature/*
# paths:
# exclude:
# - doc/*
# - samples/*
# - tools/*
pr:
branches:
include:
- main
- feature/*
paths:
exclude:
- doc/*
- samples/*
- tools/*
variables:
- name: runCodesignValidationInjectionBG
value: false
- name: EnablePipelineCache
value: true
# 0.0.yyMM.dd##
# 0.0.1904.0900
@@ -55,10 +57,10 @@ stages:
- template: ./templates-v2/job-build-project.yml
parameters:
pool:
${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
name: SHINE-OSS-L
${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
${{ if eq(variables['System.CollectionId'], 'cb55739e-4afe-46a3-970f-1b49d8ee7564') }}:
name: SHINE-INT-L
${{ else }}:
name: SHINE-OSS-L
buildPlatforms: [x64]
buildConfigurations: [AuditMode]
buildEverything: true
@@ -72,15 +74,17 @@ stages:
- template: ./templates-v2/job-build-project.yml
parameters:
pool:
${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
name: SHINE-OSS-L
${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
${{ if eq(variables['System.CollectionId'], 'cb55739e-4afe-46a3-970f-1b49d8ee7564') }}:
name: SHINE-INT-L
${{ else }}:
name: SHINE-OSS-L
buildPlatforms:
- ${{ platform }}
buildConfigurations: [Release]
buildEverything: true
keepAllExpensiveBuildOutputs: false
${{ if eq(variables['System.PullRequest.IsFork'], 'False') }}:
enableCaching: true
- ${{ if eq(parameters.runTests, true) }}:
- stage: Test_${{ platform }}

View File

@@ -55,10 +55,10 @@ stages:
- template: ./templates-v2/job-build-project.yml
parameters:
pool:
${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
name: SHINE-OSS-L
${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
${{ if eq(variables['System.CollectionId'], 'cb55739e-4afe-46a3-970f-1b49d8ee7564') }}:
name: SHINE-INT-L
${{ else }}:
name: SHINE-OSS-L
buildPlatforms: [x64]
buildConfigurations: [AuditMode]
buildEverything: true
@@ -78,10 +78,10 @@ stages:
- template: ./templates-v2/job-build-project.yml
parameters:
pool:
${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
name: SHINE-OSS-L
${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
${{ if eq(variables['System.CollectionId'], 'cb55739e-4afe-46a3-970f-1b49d8ee7564') }}:
name: SHINE-INT-L
${{ else }}:
name: SHINE-OSS-L
buildPlatforms:
- ${{ platform }}
buildConfigurations: [Release]
@@ -100,10 +100,3 @@ stages:
platform: ${{ platform }}
# The tests might be run more than once; log one artifact per attempt.
outputArtifactStem: -$(System.JobAttempt)
- ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
- stage: CodeIndexer
displayName: GitHub CodeNav Indexer
dependsOn: []
jobs:
- template: ./templates-v2/job-index-github-codenav.yml

View File

@@ -13,6 +13,14 @@ parameters:
- name: targetBranch
type: string
default: "automated/loc-update"
- name: submitToTouchdown
displayName: Send New Strings to Touchdown
type: boolean
default: true
- name: checkInLocOutputs
displayName: Submit Pull Request
type: boolean
default: true
pool:
vmImage: windows-2019
@@ -22,10 +30,6 @@ resources:
- repository: self
type: git
ref: main
- repository: internal
type: git
name: Terminal.Internal
ref: main
steps:
@@ -35,14 +39,6 @@ steps:
fetchDepth: 1 # Don't need a deep checkout for loc files!
fetchTags: false # Tags still result in depth > 1 fetch; we don't need them here
persistCredentials: true
path: s # Adding a second repo made Azure DevOps change where we're checked out.
- checkout: internal
clean: true
submodules: false
fetchDepth: 1
persistCredentials: true
path: s/Terminal.Internal
- pwsh: |-
Install-Module PSGitHub -Scope CurrentUser -Force
@@ -59,50 +55,55 @@ steps:
authType: SubjectNameIssuer
resourceFilePath: |
**\en-US\*.resw
Terminal.Internal\PDPs\Stable\PDPs\en-us\PDP.xml
Terminal.Internal\PDPs\Preview\PDPs\en-us\PDP.xml
build\StoreSubmission\Stable\PDPs\en-us\PDP.xml
build\StoreSubmission\Preview\PDPs\en-us\PDP.xml
outputDirectoryRoot: LocOutput
appendRelativeDir: true
pseudoSetting: Included
localizationTarget: true
localizationTarget: ${{ parameters.submitToTouchdown }}
- pwsh: |-
Remove-Item -EA:Ignore -R -Force LocOutput\Terminal.Internal
$Files = Get-ChildItem LocOutput -R -Include 'ContextMenu.resw','Resources.resw' | ? FullName -Like '*en-US\*\*.resw'
$Files = Get-ChildItem LocOutput -R -Include 'ContextMenu.resw','Resources.resw','PDP.xml' | ? FullName -Like '*en-US\*\*.*'
$Files | % { Move-Item -Verbose $_.Directory $_.Directory.Parent.Parent -EA:Ignore }
& tar.exe -c -f LocOutputMunged.tar -C LocOutput .
& tar.exe -x -v -f LocOutputMunged.tar
rm LocOutputMunged.tar
rm -r -fo LocOutput
& ./build/scripts/Copy-ContextMenuResourcesToCascadiaPackage.ps1
& ./build/scripts/Generate-PseudoLocalizations.ps1
displayName: Move Loc files to the right places
- pwsh: |-
git add **/*.resw
git status
git diff --quiet --cached --exit-code
If ($LASTEXITCODE -Ne 0) {
$Now = Get-Date
git commit -m "Localization Updates - $Now"
git push origin HEAD:refs/heads/${{parameters.targetBranch}} -f
Write-Host "##vso[task.setvariable variable=ChangesPushedToRepo]1"
} Else {
Write-Host "##vso[task.setvariable variable=ChangesPushedToRepo]0"
}
displayName: git commit and push
- publish: LocOutputMunged.tar
artifact: loc-outputs
displayName: Publish Loc Outputs for inspection
- pwsh: |-
Import-Module PSGitHub
$BaseBranch = "$(Build.SourceBranch)" -Replace "^refs/heads/",""
Write-Host "Preparing PR against $BaseBranch"
$PSDefaultParameterValues['*GitHub*:Owner'] = "microsoft"
$PSDefaultParameterValues['*GitHub*:RepositoryName'] = "terminal"
$PSDefaultParameterValues['*GitHub*:Token'] = ("$(GithubPullRequestToken)" | ConvertTo-SecureString -AsPlainText -Force)
$existingPr = Get-GitHubPullRequest -HeadBranch "${{parameters.targetBranch}}" -BaseBranch $BaseBranch
If ($null -Eq $existingPr) {
$Now = Get-Date
New-GitHubPullRequest -Head "${{parameters.targetBranch}}" -Base $BaseBranch -Title "Localization Updates - $BaseBranch - $Now" -Verbose
}
displayName: Publish pull request
condition: and(eq(variables['ChangesPushedToRepo'], '1'), succeeded())
- ${{ if eq(parameters.checkInLocOutputs, true) }}:
- pwsh: |-
git add **/*.resw
git add build/StoreSubmission/**/*.xml
git status
git diff --quiet --cached --exit-code
If ($LASTEXITCODE -Ne 0) {
$Now = Get-Date
git commit -m "Localization Updates - $Now"
git push origin HEAD:refs/heads/${{parameters.targetBranch}} -f
Write-Host "##vso[task.setvariable variable=ChangesPushedToRepo]1"
} Else {
Write-Host "##vso[task.setvariable variable=ChangesPushedToRepo]0"
}
displayName: git commit and push
- pwsh: |-
Import-Module PSGitHub
$BaseBranch = "$(Build.SourceBranch)" -Replace "^refs/heads/",""
Write-Host "Preparing PR against $BaseBranch"
$PSDefaultParameterValues['*GitHub*:Owner'] = "microsoft"
$PSDefaultParameterValues['*GitHub*:RepositoryName'] = "terminal"
$PSDefaultParameterValues['*GitHub*:Token'] = ("$(GithubPullRequestToken)" | ConvertTo-SecureString -AsPlainText -Force)
$existingPr = Get-GitHubPullRequest -HeadBranch "${{parameters.targetBranch}}" -BaseBranch $BaseBranch
If ($null -Eq $existingPr) {
$Now = Get-Date
New-GitHubPullRequest -Head "${{parameters.targetBranch}}" -Base $BaseBranch -Title "Localization Updates - $BaseBranch - $Now" -Verbose
}
displayName: Publish pull request
condition: and(eq(variables['ChangesPushedToRepo'], '1'), succeeded())

View File

@@ -24,10 +24,10 @@ stages:
- template: ./templates-v2/job-build-project.yml
parameters:
pool:
${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
name: SHINE-OSS-L
${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
${{ if eq(variables['System.CollectionId'], 'cb55739e-4afe-46a3-970f-1b49d8ee7564') }}:
name: SHINE-INT-L
${{ else }}:
name: SHINE-OSS-L
buildPlatforms: [x64]
buildConfigurations: [Fuzzing]
buildEverything: true

View File

@@ -40,10 +40,10 @@ stages:
- template: ./templates-v2/job-build-project.yml
parameters:
pool:
${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
name: SHINE-OSS-L
${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
${{ if eq(variables['System.CollectionId'], 'cb55739e-4afe-46a3-970f-1b49d8ee7564') }}:
name: SHINE-INT-L
${{ else }}:
name: SHINE-OSS-L
branding: ${{ parameters.branding }}
buildPlatforms: ${{ parameters.buildPlatforms }}
buildConfigurations: [Release]

View File

@@ -68,6 +68,9 @@ parameters:
- name: signingIdentity
type: object
default: {}
- name: enableCaching
type: boolean
default: false
jobs:
- job: ${{ parameters.jobName }}
@@ -95,6 +98,7 @@ jobs:
# Yup.
BuildTargetParameter: ' '
SelectedSigningFragments: ' '
MSBuildCacheParameters: ' '
# When building the unpackaged distribution, build it in portable mode if it's Canary-branded
${{ if eq(parameters.branding, 'Canary') }}:
UnpackagedBuildArguments: -PortableMode
@@ -111,6 +115,7 @@ jobs:
clean: true
submodules: true
persistCredentials: True
# This generates either nothing for BuildTargetParameter, or /t:X;Y;Z, to control targets later.
- pwsh: |-
If (-Not [bool]::Parse("${{ parameters.buildEverything }}")) {
@@ -139,6 +144,17 @@ jobs:
}
displayName: Prepare Build and Sign Targets
- ${{ if eq(parameters.enableCaching, true) }}:
- pwsh: |-
$MSBuildCacheParameters = ""
$MSBuildCacheParameters += " -graph"
$MSBuildCacheParameters += " -reportfileaccesses"
$MSBuildCacheParameters += " -p:MSBuildCacheEnabled=true"
$MSBuildCacheParameters += " -p:MSBuildCacheLogDirectory=$(Build.SourcesDirectory)\MSBuildCacheLogs"
Write-Host "MSBuildCacheParameters: $MSBuildCacheParameters"
Write-Host "##vso[task.setvariable variable=MSBuildCacheParameters]$MSBuildCacheParameters"
displayName: Prepare MSBuildCache variables
- pwsh: |-
.\build\scripts\Generate-ThirdPartyNotices.ps1 -MarkdownNoticePath .\NOTICE.md -OutputPath .\src\cascadia\CascadiaPackage\NOTICE.html
displayName: Generate NOTICE.html from NOTICE.md
@@ -160,21 +176,37 @@ jobs:
${{ parameters.additionalBuildOptions }}
/bl:$(Build.SourcesDirectory)\msbuild.binlog
$(BuildTargetParameter)
$(MSBuildCacheParameters)
platform: $(BuildPlatform)
configuration: $(BuildConfiguration)
msbuildArchitecture: x64
maximumCpuCount: true
${{ if eq(parameters.enableCaching, true) }}:
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
- ${{ if eq(parameters.publishArtifacts, true) }}:
- publish: $(Build.SourcesDirectory)/msbuild.binlog
artifact: logs-$(BuildPlatform)-$(BuildConfiguration)${{ parameters.artifactStem }}
condition: always()
displayName: Publish Build Log
- ${{ if eq(parameters.enableCaching, true) }}:
- publish: $(Build.SourcesDirectory)\MSBuildCacheLogs
artifact: logs-msbuildcache-$(BuildPlatform)-$(BuildConfiguration)${{ parameters.artifactStem }}
condition: always()
displayName: Publish MSBuildCache Logs
- ${{ else }}:
- task: CopyFiles@2
displayName: Copy Build Log
inputs:
contents: $(Build.SourcesDirectory)/msbuild.binlog
TargetFolder: $(Terminal.BinDir)
- ${{ if eq(parameters.enableCaching, true) }}:
- task: CopyFiles@2
displayName: Copy MSBuildCache Logs
inputs:
contents: $(Build.SourcesDirectory)/MSBuildCacheLogs/**
TargetFolder: $(Terminal.BinDir)/MSBuildCacheLogs
# This saves ~2GiB per architecture. We won't need these later.
# Removes:

View File

@@ -1,16 +0,0 @@
jobs:
- job: CodeNavIndexer
displayName: Run GitHub CodeNav Indexer
pool: { vmImage: windows-2022 }
steps:
- checkout: self
fetchDepth: 1
fetchTags: false # Tags still result in depth > 1 fetch; we don't need them here
submodules: false
clean: true
- task: RichCodeNavIndexer@0
inputs:
languages: 'cpp,csharp'
continueOnError: true

View File

@@ -13,16 +13,16 @@ jobs:
OutputBuildPlatform: ${{ parameters.buildPlatform }}
Terminal.BinDir: $(Build.SourcesDirectory)/bin/$(OutputBuildPlatform)/$(BuildConfiguration)
pool:
${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
${{ if ne(parameters.buildPlatform, 'ARM64') }}:
name: SHINE-OSS-Testing-x64
${{ else }}:
name: SHINE-OSS-Testing-arm64
${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
${{ if eq(variables['System.CollectionId'], 'cb55739e-4afe-46a3-970f-1b49d8ee7564') }}:
${{ if ne(parameters.buildPlatform, 'ARM64') }}:
name: SHINE-INT-Testing-x64
${{ else }}:
name: SHINE-INT-Testing-arm64
${{ else }}:
${{ if ne(parameters.buildPlatform, 'ARM64') }}:
name: SHINE-OSS-Testing-x64
${{ else }}:
name: SHINE-OSS-Testing-arm64
steps:
- checkout: self

View File

@@ -17,16 +17,16 @@ jobs:
OutputBuildPlatform: ${{ parameters.platform }}
Terminal.BinDir: $(Build.SourcesDirectory)/bin/$(OutputBuildPlatform)/$(BuildConfiguration)
pool:
${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
${{ if ne(parameters.platform, 'ARM64') }}:
name: SHINE-OSS-Testing-x64
${{ else }}:
name: SHINE-OSS-Testing-arm64
${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}:
${{ if eq(variables['System.CollectionId'], 'cb55739e-4afe-46a3-970f-1b49d8ee7564') }}:
${{ if ne(parameters.platform, 'ARM64') }}:
name: SHINE-INT-Testing-x64
${{ else }}:
name: SHINE-INT-Testing-arm64
${{ else }}:
${{ if ne(parameters.platform, 'ARM64') }}:
name: SHINE-OSS-Testing-x64
${{ else }}:
name: SHINE-OSS-Testing-arm64
steps:
- checkout: self

View File

@@ -106,6 +106,11 @@ extends:
- stage: Build
displayName: Build
dependsOn: []
variables:
# This was set by the parent build, but we need to override it to select a specific compiler version
- template: ./build/pipelines/templates-v2/variables-onebranch-config.yml@self
parameters:
containerVersion: 1.0.02566.28
jobs:
- template: ./build/pipelines/templates-v2/job-build-project.yml@self
parameters:

View File

@@ -1,2 +1,7 @@
parameters:
- name: containerVersion
type: string
default: latest
variables:
WindowsContainerImage: 'onebranch.azurecr.io/windows/ltsc2022/vse2022:1.0.02566.28'
WindowsContainerImage: 'onebranch.azurecr.io/windows/ltsc2022/vse2022:${{ parameters.containerVersion }}'

View File

@@ -41,6 +41,7 @@ ForEach ($pair in $Languages.GetEnumerator()) {
$writerSettings = [System.Xml.XmlWriterSettings]::new()
$writerSettings.NewLineChars = "`r`n"
$writerSettings.Indent = $true
$writerSettings.Encoding = [System.Text.UTF8Encoding]::new($false) # suppress the BOM
$writer = [System.Xml.XmlWriter]::Create($ResPath, $writerSettings)
$XmlDocument.Save($writer)
$writer.Flush()

View File

@@ -1,5 +1,5 @@
Get-ChildItem -Recurse -Filter *.resw
| Where-Object { $_.Directory.Name.StartsWith("qps-ploc") }
Get-ChildItem -Recurse -Directory -Filter qps-ploc*
| Get-ChildItem -Include *.resw,*.xml
| ForEach-Object {
$source = Join-Path $_.Directory "../en-US/$($_.Name)"
$target = $_
@@ -9,6 +9,7 @@ Get-ChildItem -Recurse -Filter *.resw
$writerSettings = [System.Xml.XmlWriterSettings]::new()
$writerSettings.NewLineChars = "`r`n"
$writerSettings.Indent = $true
$writerSettings.Encoding = [System.Text.UTF8Encoding]::new($false) # suppress the BOM
$writer = [System.Xml.XmlWriter]::Create($target, $writerSettings)
$ploc.Save($writer)
$writer.Flush()

View File

@@ -17,4 +17,9 @@
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net45" />
<package id="Selenium.Support" version="3.5.0" targetFramework="net45" />
<package id="Selenium.WebDriver" version="3.5.0" targetFramework="net45" />
<!-- MSBuildCache -->
<package id="Microsoft.MSBuildCache.AzurePipelines" version="0.1.273-preview" />
<package id="Microsoft.MSBuildCache.Local" version="0.1.273-preview" />
<package id="Microsoft.MSBuildCache.SharedCompilation" version="0.1.273-preview" />
</packages>

View File

@@ -4,12 +4,8 @@
All of the following ✅ marks must be fulfilled during manual testing:
* ASCII input
* Chinese input (中文維基百科)
* Resizing the window properly wraps/unwraps wide glyphs ❌
Broken due to `TextBuffer::Reflow` bugs
* Surrogate pair input (🙂) ❔
* Resizing the window properly wraps/unwraps surrogate pairs ❌
Broken due to `TextBuffer::Reflow` bugs
* Chinese input (中文維基百科)
* Surrogate pair input (🙂) ✅
* In cmd.exe
* Create 2 file: "a😊b.txt" and "a😟b.txt"
* Press tab: Autocomplete to "a😊b.txt" ✅
@@ -62,21 +58,20 @@ All of the following ✅ marks must be fulfilled during manual testing:
* F6 inserts Ctrl+Z ✅
* F7 without modifiers starts "command list" prompt ✅
* Escape dismisses prompt ✅
* Minimum size of 40x10 characters
* Width expands to fit the widest history command ✅
* Entries wider than the window width are truncated
* Height expands up to 20 rows with longer histories ✅
* F9 starts "command number" prompt ✅
* Left/Right paste replace the buffer with the given command ✅
* Left/Right replace the buffer with the given command ✅
* And put cursor at the end of the buffer ✅
* Up/Down navigate selection through history ✅
* Stops at start/end with <10 entries ✅
* Stops at start/end with >20 entries ✅
* Wide text rendering during pagination with >20 entries
* Scrolls through the entries if there are too many
* Shift+Up/Down moves history items around ✅
* Home navigates to first entry ✅
* End navigates to last entry ✅
* PageUp navigates by 20 items at a time or to first ✅
* PageDown navigates by 20 items at a time or to last ✅
* PageUp navigates by $height items at a time or to first ✅
* PageDown navigates by $height items at a time or to last ✅
* Alt+F7 clears command history ✅
* F8 cycles through commands that start with the same text as
the current buffer up until the current cursor position ✅

View File

@@ -2519,7 +2519,6 @@
},
"keybindings": {
"description": "A list of keychords bound to action IDs",
"deprecated": true,
"items": {
"$ref": "#/$defs/Keybinding"
},

View File

@@ -0,0 +1,648 @@
---
author: Mike Griese
created on: 2022-08-22
last updated: 2024-06-13
issue id: 1595
---
# Windows Terminal - Snippets <!-- nee "Tasks" -->
## Abstract
The command line is a highly powerful tool. However, its power is dependent on
the user's knowledge of the specific commands, flags and parameters needed to
perform tasks from the command-line. For simple everyday commands, this might
not be so hard. For longer commands, or ones used less frequently, there's quite
a bit of mental overhead trying to recall the exact syntax. For teams, it might
be helpful to share these tasks with everyone on the project. The Terminal can
be an avenue by which complicated tasks can be remembered, shared, discovered,
and recalled by the user simply thinking **"what do I want to do"**, rather than
"how do I do it".
## Background
> **Note**:
>
> This largely builds off of work in the [Suggestions UI], for displaying these
> tasks to the user. Make sure to read that spec first.
### Inspiration
The primordial version of this idea was probably [#keep] - a command-line tool I
wrote for stashing long command-lines and directories, and recalling them with
just a number. We've had many variations on this idea over the years - [#1595]
was probably the first such request on the Terminal repo. ITerm2 also had [a
similar feature](https://iterm2.com/images/CommandHistory.png). Theirs was more
directly tied to shell integration (that menu is populated from commands that
they know were run in the shell). In the absence of shell integration though, it
should be able to save these commands to a menu manually.
Consider [VsCode Tasks]. These are files which can be placed in the root of
a workspace, and share common tasks between users of that workspace. They've got
support for starting processes, with a set of args. These args can also be
picked at runtime, and custom sets of arguments can be specified for individual
arguments.
It is hard to say that the ultimate vision here isn't partially inspired by the
"[workflows]" of [Warp], or by [Fig]. These are modern tools that seek to
augment the command-line experience, by making the command-line more
approachable. Warp quite clearly has the same concept in "workflows" - scripts
which the user can build and Warp (a Terminal emulator) can insert quickly. Fig,
on the other hand, is more focused on just simplifying the command-line
experience. Fig is more about providing additional metadata to the user as
they're typing. They are [also working on workflows], so there's clearly quite a
bit of ecosystem-wide demand for more discoverable command-line tooling.
We've had verbatim feedback that developers already attempt to record useful
commandlines in various different ways - in OneNotes, in shell scripts, in
aliases. Furthermore, developers often share these commands with the rest of
their teams. Providing a unified way to easily store, browse, and use these
command lines should be valuable to developers already doing this. A static
file in their project containing commands for the whole team seems like a simple
solution to this problem.
### User Stories
Story | Size | Description
--|-----------|--
A | ✅ Done | Users can bring up a menu of command line tasks and quickly execute them
B | ✅ Done | Fragment apps can provide tasks to a users settings
C | 🚶 Walk | The user can save commands straight to their settings with a `wt` command
D | 🚶 Walk | Users can have different tasks enabled for different profiles(/shells?)
E | 🚶 Walk | The Terminal displays a Snippets Pane for easy browsing of relevant snippets
F | 🏃‍♂️ Run | The terminal can automatically look for command fragments in the tree of the CWD
G | 🏃‍♂️ Run | Snippets with multiple lines can be sent only conditionally on the success of the previous command (with shell integration)
H | ✅ Done | Snippets can be filtered by text the user has already typed
I | 🚀 Sprint | Snippets can have prompt-able sections of input
J | 🚀 Sprint | Community tasks are hosted in a public GH repo
K | 🚀 Sprint | A simple UX (either web or in Terminal) is exposed for interacting with public GH repo of tasks
### Elevator Pitch
The Terminal can remember long command-lines and display them with user-friendly
descriptions of _what they actually do_. These tasks can be searched by intent,
rather than the particular combination of flags. They can be shared with members
of your team, so everyone has easy access to common tasks for a project.
### Why not just aliases / native script files?
Why not just take these tasks and put them into a shell alias? For longer tasks,
why not just stick them in a `.ps1`/`.bat`/`.sh`/etc file? This is an option
that's existed since the time immemorial. However, this still requires the user
to remember that they've created these aliases/scripts, remember where they're
stored, and remember how they work.
By providing a dedicated UI for these command-lines, they can always be at your
fingertips. No need to remember what the alias for a particular command-line is -
just look up what you want to do. Aliases and scripts are no longer scattered
across `.bashrc`, `.bash_profile`, `.profile`, etc, they can all be stashed in
the Terminal config, or in the project they're relevant to. By stashing them
alongside the code, then anyone else coming to work on the code can have
immediate access to useful sets of tasks.
Aliases have a tendency towards more experienced shell users. This proposal
instead brings the power of these aliases and scripts right to the foreground,
with a cross-shell mechanism of exposing them to even beginners. With fragment
extensions, tools can bundle common workflows together with their application so
the Terminal can automatically load them for the user.
## Business Justification
It will delight developers.
## Scenario Details
### Implementation Details
For the most part, this is already implemented as the `sendInput` action. These
actions send text to the terminal already, and work quite well as snippets.
#### Basics
We'll want to also augment `sendInput` to add support for `input` as an array of
strings, not only a single string value. When the input is a list of strings,
then the terminal can send each string, separated by the <kbd>enter</kbd> key.
We can also add a `waitForSuccess` parameter to `sendInput` (with a default
value of `false`). If that's set to `true`, **and shell integration is enabled**,
then the Terminal will wait to send each command until the previous command
exits.
As another minor improvement, we'll add a `description` property to Commands.
This will allow users to add additional information to snippets which we can
surface. Additionally, extension authors could provide more details as well.
As a matter of renaming, we'll also update `"source": "tasks"` for the
`SuggestionsSource` enum to instead be `snippets` (and gracefully update that
where we find it). "tasks" was an older name for this feature, and "snippets"
will better align with our partners in VsCode.
##### Multi-line snippets example
Consider the [following script](https://gist.github.com/zadjii-msft/b598eebd6c5601328498e3e7acc581a7):
```pwsh
$s=Invoke-GitHubGraphQlApi "query{organization(login:`"Microsoft`"){projectV2(number: 159) { id } } }"
$tasks = get-GitHubIssue -Labels "Issue-Task" -state open
$bugs = get-GitHubIssue -Labels "Issue-Bug" -state open
$issues = $tasks + $bugs
$issues | ? {$_.labels.Name -NotContains "Needs-Triage" } | ? { $_.milestone.title -Ne "Icebox ❄" } | ? type -Ne "PullRequest" | select -expand node_id | % {
$resp = Add-GitHubBetaProjectItem -ProjectNodeId $s.organization.projectV2.id -ContentNodeId $_ ;
}
```
As just a raw sendInput action with a single `input`, this would look like the following:
```jsonc
{
"command":
{
"action": "sendInput",
"input": "$s=Invoke-GitHubGraphQlApi \"query{organization(login:`\"Microsoft`\"){projectV2(number: 159) { id } } }\"\r\n$tasks = get-GitHubIssue -Labels \"Issue-Task\" -state open\r\n$bugs = get-GitHubIssue -Labels \"Issue-Bug\" -state open\r\n$issues = $tasks + $bugs\r\n$issues | ? {$_.labels.Name -NotContains \"Needs-Triage\" } | ? { $_.milestone.title -Ne \"Icebox ❄\" } | ? type -Ne \"PullRequest\" | select -expand node_id | % {\r\n $resp = Add-GitHubBetaProjectItem -ProjectNodeId $s.organization.projectV2.id -ContentNodeId $_ ;\r\n}"
},
"name": "Upload to project board",
"description": "Sync all our issues and bugs that have been triaged and are actually on the backlog to the big-ol project",
},
```
This JSON is basically entirely unusable. Since JSON doesn't support multiline
strings, then every line has to be joined to a single line, separated by `\r\n`.
Instead, the following version of this command uses an array for the `input`
parameter. This then implies that each string should be sent in sequence, with
<kbd>enter</kbd> between them.
```jsonc
{
"command":
{
"action": "sendInput",
"input":
[
"$s=Invoke-GitHubGraphQlApi \"query{organization(login:`\"Microsoft`\"){projectV2(number: 159) { id } } }\"",
"$tasks = get-GitHubIssue -Labels \"Issue-Task\" -state open",
"$bugs = get-GitHubIssue -Labels \"Issue-Bug\" -state open",
"$issues = $tasks + $bugs",
"$issues | ? {$_.labels.Name -NotContains \"Needs-Triage\" } | ? { $_.milestone.title -Ne \"Icebox ❄\" } | ? type -Ne \"PullRequest\" | select -expand node_id | % {",
" $resp = Add-GitHubBetaProjectItem -ProjectNodeId $s.organization.projectV2.id -ContentNodeId $_ ;",
"}",
""
]
},
"name": "Upload to project board",
"description": "Sync all our issues and bugs that have been triaged and are actually on the backlog to the big-ol project",
},
```
This is slightly more maintainable. Assuming the user also has shell integration
enabled, they could also set `"waitForSuccess": true`, and if any part of the
script fails, then the rest of it won't be sent to the shell[[1](#footnote-1)].
#### Fragment actions
This was already added in [#16185]. These will allow third-party developers to
create apps which add additional snippets to the Terminal. These will require
app developers to add `id`s to each action they add in this way. Users can then
bind that action `id` to a keybinding, if they so choose.
Case in point:
https://github.com/abduvik/just-enough-series/tree/master/courses/docker+docker-compose.
Something like that should be able to be easily added directly to the Terminal.
### Snippets pane
With non-terminal content landing in 1.21 Preview, it's now simple to add
additional types of panes to add to the Terminal. We'll support a new pane
`"type": "snippets"`, to support opening the Snippets pane.
This will be a pane with a `TreeView` in it and a text box to filter results
(ala the Command Palette).
Each item in the TreeView will be a kind of `FilteredCommand`, with a play
button to support quickly running the command.
This pane could also support all the different suggestion sources that the
Suggestions UI supports - `recentCommands` could be plumbed into it from the
currently active This pane could also support checkboxes to filter different
suggestion sources.
### Per-Project Snippets (`.wt.json`)
Users may also want to leave snippets in the root of their repo, for others to
use as well. To support this, the Terminal will automatically look for a
`.wt.json` file in any directories that are parents of the CWD of the shell, and
load actions from that file as well. The syntax for this file will be a modified
version of the standard settings schema. As an example:
```json
{
"$version": "1.0.0",
"snippets":
[
{
"input": "bx",
"name": "Build project",
"description": "Build the project in the CWD"
},
{
"input": "bcz",
"name": "Clean & build solution",
"icon": "\uE8e6",
"description": "Start over. Go get your coffee. "
},
{
"input": "nuget push -ApiKey az -source TerminalDependencies %userprofile%\\Downloads" ,
"name": "Upload package to nuget feed",
"icon": "\uE898",
"description": "Go download a .nupkg, put it in ~/Downloads, and use this to push to our private feed."
},
]
}
```
Instead of `actions`, the top-level list is `snippets`. These snippet objects
are a simplification of the `Command` object. They have a `name`, `description`,
and `icon` properties, just like a `Command`. However, instead of an arbitrary
`action`, we will just have the `SendInput` action's args as properties directly
in the object.
Additionally, we'll also support a `$version` field, in case we ever want to
make breaking changes to the schema. When this is missing, we'll just assume the
version to be `1.0.0`, which is this originally proposed schema.
By default, a `TermControl` is always initialized with the CWD set to the
`startingDirectory` of a profile. So, even for users that don't have shell
integration enabled, the Terminal will still be able to load snippets from the
`.wt.json` in the profile's `startingDirectory`. If the user has shell
integration configured to tell the Terminal about the CWD, then we'll refresh
that list as the user changes directories.
* In `Terminal.Settings.Model`, we will store a cached map of path->actions.
* that if multiple panes are all in the same CWD, they don't need to
individually re-read the file from disk and regenerate that part of the map.
* I believe it should be impossible for a keybinding to be bound to a local
action. Even if it has an ID, the file won't be loaded when we build the
keymap, and we don't really want the keymap changing based on CWD. Also, with
the actions living in an entirely separate map of CWD->actions, the
keybindings in the main map won't be able to easily get to them. See also
[Security considerations](#security) for more.
* If the Snippets pane or Suggestions UI is opened with `snippets` as a source,
then we'll just append the appropriate list of suggestions for the active
control's CWD.
* We don't need to have the control raise an event when the CWD changes - we
can lazy-load these actions when a UI element that requires it is first
invoked.
* These _local_ snippets will not be included in the Command Palette.
(`sendInput` actions in the settings file and in fragments still will be,
however)
* The Command Palette is quite tightly bound to our own ActionMap settings
model, accumulated through complicated layering of defaults, fragments, and
user settings. It's not trivially mutable at runtime in the way that
context-sensitive snippets would require.
* The Suggestions UI and Snippets pane are both surfaces that are better
equipped to handle context-relevant actions, especially where the context is
a `TermControl`.
* The Suggestions UI and snippets pane will give us more flexibility in
customizing the experience specifically for snippets. Case in point - we'll
want to filter the suggestions UI based on both the `Name` _and_ the `Input`
of the send input command. Contrast that with the Command Palette which is
currently only capable of filtering based on names.
* If we find multiple `.wt.json` files in the ancestors of the CWD (e.g. for
`c:\a\b\c\d\`, there's a `c:\a\.wt.json` and a `c:\a\b\c\.wt.json`), then
we'll add each one separately to the map of paths->directories. When
requesting the actual actions for `c:\a\b\c\d\`, we'll layer the ones from
`c:\a\` before the ones from `c:\a\b\c`, so that deeper descendants take
precedence.
* For example, `c:\a\.wt.json` has a snippet with `input: "foo", name:
"Build"`, and `c:\a\b\c\.wt.json` has a snippet with `input: "bar", name:
"Build"`. When the user is under `c:\a\b\c`, the Terminal will show `bar`
when the user selects the `Build` suggestion. Otherwise, if the user is
under `c:\a`, then the Terminal will show `foo`.
* If we fail to parse the `.wt.json` file, then we'll ignore it. For parsing
errors, we'll want to display warnings to the user:
* If the user had opened the suggestions UI, we can display a Toast the first
time we fail to load it to show the error.
* In the snippets pane, we can have static text along the lines of "failed to
parse snippets found in `path/to/file`" at the top of the pane.
### Saving snippets from the commandline
_This has already been prototyped in [#16513]_
Users should be able to save commands as snippets directly from the commandline.
Consider: you've just run the command that worked the way you need it to. You
shouldn't have to open the settings to then separately copy-paste the command in
to save it. It should be as easy as <kbd>Up</kbd>, <kbd>Home</kbd>, `wt x-save `,
<kbd>Enter</kbd>.
This will be powered by a `saveSnippet` action behind the scenes. However, we
won't actually parse these actions from a user's settings file. They don't
really make sense to have the action to save a snippet to the settings file, in
the settings file already.
The exact syntax of `x-save` is as follows:
#### `x-save` subcommand
`x-save [--name,-n name][--description,-d description][-- commandline]`
Saves a given commandline as a sendInput action to the Terminal settings file.
This will immediately write the Terminal settings file.
**Parameters**:
* `--name,-n name`: The name to assign to the `name` parameter of the saved
command. If omitted, then the parameter will be left blank, and the command
will use the auto-generated "Send input:..." name in menus.
* `--description,-d`: The description to optionally assign to the command.
* `commandline`: The commandline to save as the `input` of the `sendInput` action.
If the `save` subcommand is ran without any other subcommands, the Terminal will
imply the `-w 0` arguments, to attempt to send this action to the current
Terminal window (unless of course, `-w` was manually provided on the
commandline). This is done to avoid a new terminal window popping up, just to
inform the user a command was saved. When run with other subcommands, then the
action will just be ran in the same window as all the other subcommands.
> [!NOTE]
> In team discussions, we've decided to accept this for now as
> experimental. We have some concerns about how effective we'll be at dealing
> with all the weird edge cases of string escaping. For now, we'll keep this
> subcommand as `x-save`, where `x-` implies "experimental".
>
> Perhaps once we add a dialog for saving these snippets, we can promote it out of experimental.
### UI/UX Design
For the most part, we'll be using the [Suggestions UI] to display tasks to the
user. This is a text cursor-relative UI surface that can quickly display actions
to the user, in the context of what they're working on.
The following are some examples from VsCode and Warp. These are meant to be
illustrative of what these menus already look like in the wild:
![VS Code demo of tasks](img/vscode-tasks-000.gif)
![Warp demo of workflows](img/warp-workflows-000.gif)
A prototype of saving a command directly to the user's settings, then invoking
it via the suggestions UI
![Example of using `wt save foo bar --baz` to save the command, then invoke the saved command via the suggestions UI](img/save-command.gif)
A prototype of reading tasks from the CWD
![navigate into a folder with a .wt.json file, view that it's populated, then invoke a snippet from that file using the suggestions UI](img/tasks-from-cwd.gif)
The initial version of the snippets pane:
![snippets-pane](https://github.com/microsoft/terminal/assets/18356694/f4aee6f8-dbaa-4a70-a2ac-98244eb0e4f1)
## Tenets
<table>
<tr><td><strong>Compatibility</strong></td><td>
I considered supporting YAML for local snippets (`.wt.json`), instead of JSON.
JSON is not super friendly to command-lines - since everything's gotta be
encapsulated as a string. Embedding tabs `\t`, newlines `\r`, escape characters,
is fairly straightforward. However, quotes can get complicated fast in JSON,
since they've got to be escaped too, and with many CLI utilities also having
separate quote-parsing rules, JSON can get unwieldy quickly.
However, supporting YAML directly would require us to spec out a YAML syntax for
these files, and also find an OSS YAML parser and implement support for it. That
would be quite a bit more expensive than JSON.
</td></tr>
<tr><td><strong>Accessibility</strong></td><td>
Nothing particular to call out here. The Snippets pane will need to be a11y
tested, like most of our other UI surfaces.
</td></tr>
<tr><td><strong>Sustainability</strong></td><td>
No substantial climate impacts expected here. We're not using expensive compute
resources for this feature, so the impact should be comparable to any other
Terminal feature.
</td></tr>
<tr><td><strong>Localization</strong></td><td>
I'm mildly worried here about the potential for community-driven tasks to have
non-localized descriptions. We may need to accept a `description:{ en-us:"",
pt-br:"", ...}`-style map of language->string descriptions. That may just need
to be a future consideration for now.
</td></tr>
<tr><td><a name="security"></a><strong>Security</strong></td><td>
Another reason we shouldn't support keys being able to be lazy-bound to local
snippets: It's entirely too easy for `malicious.exe` to create a file in
`%HomePath%` that creates a snippet for `\u003pwn-your-machine.exe\r` (or
similar). Any app can read your settings file, and it is again too easy for that
malicious app to set it's own action `id` to the same as some other well-meaning
local snippet's ID which you DO have bound to a key.
When we first load the snippets from the `.wt.json` file, we'll want to also ask
them if they trust that folder. This is similar to the way that VsCode et. al.
If they accept, then we'll add that folder to a list of trusted folders (and
store permanently in `state.json`). If they don't, then we'll just ignore that
file. To make things easier for the user, we can also add a checkbox to "trust
the parent folder" in the dialog (again, similar to VsCode).
We'll also want to engage our security partners to see if there's anything extra
we'll need to do to ensure we're securely parsing random JSON files that we
don't own.
</td></tr>
</table>
### Other potential issues
Something like `wt save ping 8.8.8.8 > foo.txt` isn't going to work the way
users want. The shell is gonna get the first crack at parsing that commandline,
and is going to try and redirect the _output of `wt`_ to `foo.txt`.
Predictably, local snippets won't work over ssh or other remote connections.
Terminal is only able to read files off the local filesystem. We'll at best be
able to read snippets from the directory they `ssh`'d _from_ locally.
## Implementation Plan
### 🐣 Crawl
* [ ] The Command Palette and Suggestions UI need to be able to display both the
command name and a tooltip for the comment
- This will need to be reconciled with [#7039], which tracks displaying
non-localized names in the command palette
- It won't be a TeachingTip, since those are an unmitigated disaster. But we
can just fake it with another text box.
- A prototype can be found in [#17376]
* [X] [#1595] Add the Suggestions UI, with support for `tasks`
* [x] Fragments can add **actions** to a user's settings
### 🚶 Walk
* [ ] The terminal can look for a settings file of tasks in a profile's
`startingDirectory` (regardless of shell integration being enabled)
* [ ] [#5790] - profile specific actions
* [ ] [#12857] Ability to save selected text as a `sendInput` action
* [x] [#12861] Re-evaluate showing some sort of "ghost text" or other preview for snippets
### 🏃‍♂️ Run
* [ ] When the user `cd`s to a directory (with shell integration enabled), the
terminal can load the tasks from that directory tree
* [ ] [#10436] Users can manage all their fragments extensions directly in the Settings UI
* [ ] The suggestions UI & snippets pane can filter not only on name of a
command, but for snippets, the input as well.
* [ ] [#12927] Enlighten the suggestions UI to support (_a yet undeclared syntax
for_) snippets with prompt-able sections in them
<!--
These are perhaps too vague to be included in the official spec, but they are left here for posterity:
### 🚀 Sprint
* [ ] Fork of [#12927] - prompt-able sections can accept a command to
dynamically populate options, a la VsCode's tasks.json
* [ ] Stand up a dedicated repo for `terminal-snippets`
* [ ] Pull those down, or compile them in, or so -->
## Conclusion
Snippets are something that developers immediately understand the value of.
After talking with users, everyone we talked with immediately understood the
concept, and you could see the gears turning on ways to integrate this into
their own workflows.
### Future Considerations
* We may want to add additional params to the `save` subcommand in the future,
to configure where the snippet is saved:
* `--local`: Save to the `.wt.json` in the CWD, if there is one (or create
one)
* `--parent`: Save to the `.wt.json` in the first ancestor of the CWD, if
there is one. Otherwise create one here.
* `--settings`: Manually save to the settings file?
* `--profile`: save to this profile???? Not sure if this is actually possible.
Maybe with the `WT_SESSION_ID` env var to figure out which profile is in use
for the pane with that ID
* This would probably require per-profile actions, which are woefully under specified
* `--local`/`--parent`/`--settings` was well received in team discussion -
maybe we should just do them now.
* Longer workflows might be better exposed as notebooks. We've already got a
mind to support [markdown in a notebook-like
experience](https://github.com/microsoft/terminal/issues/16495) in the
Terminal. For longer scripts that may need rich markup between commands, that
will likely be a better UX.
* For what it is worth, [Warp] uses .yaml files for their "workflows". As an
example, see
[`clone_all_repos_in_org.yaml`](https://github.com/warpdotdev/workflows/blob/main/specs/git/clone_all_repos_in_org.yaml).
We may want to straight up just seamlessly support that syntax as well.
* Converting them to WT-compatible json is fairly trivial [[2](#footnote-2)].
* We may want to consider supporting YAML like this for `wt import`, ala [#10083]
* Similarly, we could import the YAML in the settings UI in a fashion similar
to how we import color schemes:
* Furthermore, the commands are all licensed under Apache 2.0, which means they
can be easily consumed by other OSS projects and shared with other developers.
* This leads us to the next future consideration:
* Discoverability will be important. Perhaps the actions page could have a
toggle to immediately filter to "snippets"? Which then also displays some text
like "Tip: save snippets directly from the commandline with
`wt save <the commandline>`".
* We should easily be able to put "Save command as snippet" into the quick fix
menu next to an individual prompt, when shell integration is enabled.
* We should most definitely add a dialog for saving snippets directly in the Terminal.
* We'd have inputs for the commandline, name, description.
* Obviously, it'd be easy to have a "Add new" button (to open that dialog) on
the snippets pane.
* We could have `wt save` open that dialog pre-populated, rather than just
saving the command directly.
* We could even also find a way to pre-populate that dialog with the recent
commands (from shell integration)!
* As a potential v2.0 of the snippets file schema, we may look to the
`.vscode/tasks.json` schema for inspiration. That file supports much more
complex task definitions. Notably, with the ability to prompt the user for
different inputs, for different parameter values. This is something that would
play well off of [#12927]
* We may want to consider a future property of snippets like `shell`, which
specifies which shells a snippet can be used with. We could then only filter
to the snippets that will work with the current shell. This is left for the
future because we don't have a reliable way of knowing what shell application
the user is currently running.
* We may want to consider promoting `sendInput` actions to a top-level
`snippets` array in `settings.json` in the future. That might make sharing
them from one user's settings, to a `.wt.json`, and back, a little easier.
#### Community Snippets
_The big stretch version of this feature._
It would be supremely cool to have a community curated list of Snippets, for
various tools. Stored publicly on a GitHub repo (a la the winget-pkgs repo).
Users can submit Snippets with descriptions of what the Snippet does. The
Terminal can plug into that repo automatically and fetch the latest community
commands, immediately giving the user access to a wide berth of common
Snippets. That could easily be done as another suggestion source.
#### Profiles in `.wt.json`
If we've got a `.wt.json` in a given directory, should we be dynamically
adding/removing other settings too? Wouldn't profiles also make sense? Take for
example, the Terminal repo. We've got a PowerShell build environment and a CMD
one. What if we could drop two profiles in the `.wt.json` file, with the
`commandline`'s set up to call those scripts as needed?
However, what does that even mean? We wouldn't know that file exists till we see
it the first time. Maybe there's room to integrate that with Dev Home ala
[microsoft/DevHome/3005]. Though, that probably makes the most sense as a winget
DSC to create a fragment profile instead.
## Resources
### Footnotes
<a name="footnote-1"></a>[1]: Shell integration would be a strict requirement
for that parameter to work as intended. Without also enabling shell integration,
then the Terminal would only send the first line of the script, then wait
forever for a `FTCS_COMMAND_FINISHED`.
<a name="footnote-2"></a>[2]: For your consideration, I made a python script
that will take the Warp workflow YAML and convert it into json that the Terminal
can load. Go checkout [`dump_workflows.py`](./dump-workflows.py) to see it. It's
super straightforward.
[Fig]: https://github.com/withfig/autocomplete
[Warp]: https://www.warp.dev/
[workflows]: https://docs.warp.dev/features/workflows
[also working on workflows]: https://fig.io/user-manual/workflows
[winget script]: https://github.com/microsoft/PowerToys/blob/main/.github/workflows/package-submissions.yml
[#1595]: https://github.com/microsoft/terminal/issues/1595
[#7039]: https://github.com/microsoft/terminal/issues/7039
[#3121]: https://github.com/microsoft/terminal/issues/3121
[#10436]: https://github.com/microsoft/terminal/issues/10436
[#12927]: https://github.com/microsoft/terminal/issues/12927
[#12857]: https://github.com/microsoft/terminal/issues/12857
[#5790]: https://github.com/microsoft/terminal/issues/5790
[Notebooks]: ./Markdown%20Notebooks.md
[Suggestions UI]: ./Suggestions-UI.md
[#keep]: https://github.com/zadjii/keep
[VsCode Tasks]: https://github.com/microsoft/terminal/blob/main/.vscode/tasks.json
[#16185]: https://github.com/microsoft/terminal/pull/16185
[#16513]: https://github.com/microsoft/terminal/pull/16513
[#12861]: https://github.com/microsoft/terminal/issues/12861
[#16495]: https://github.com/microsoft/terminal/issues/16495
[#17376]: https://github.com/microsoft/terminal/pull/17376
[#10083]: https://github.com/microsoft/terminal/issues/10083
[#8639]: https://github.com/microsoft/terminal/issues/8639
[microsoft/DevHome/3005]: https://github.com/microsoft/DevHome/issues/3005

View File

@@ -0,0 +1,45 @@
import yaml
import json
import sys
import os
def parse_yaml_files(tool, directory):
json_data = {}
json_data["name"] = f"{tool}..."
json_data["commands"] = []
for filename in os.listdir(directory):
if filename.endswith(".yaml") or filename.endswith(".yml"):
file_path = os.path.join(directory, filename)
with open(file_path, 'r', encoding="utf-8") as file:
try:
yaml_data = yaml.safe_load(file)
new_obj = {}
command = {}
command["input"] = yaml_data["command"]
command["action"] ="sendInput"
new_obj["command"]=command
new_obj["name"] = yaml_data["name"]
new_obj["description"] = yaml_data["description"] if "description" in yaml_data else ""
json_data["commands"].append(new_obj)
except yaml.YAMLError as e:
print(f"Error parsing {filename}: {e}")
sys.exit(-1)
return json_data
def main(directory) -> int:
json_data = {}
json_data["actions"] = []
for tool_dir in os.listdir(directory):
# print(tool_dir)
json_data["actions"].append(parse_yaml_files(tool_dir, os.path.join(directory, tool_dir)))
print(json.dumps(json_data, indent=4))
return 0
if __name__ == '__main__':
# Write this output to something like
# "%localappdata%\Microsoft\Windows Terminal\Fragments\warp-workflows\actions.json"
sys.exit(main("d:\\dev\\public\\workflows\\specs"))

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 965 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 868 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 858 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1008 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 KiB

View File

@@ -0,0 +1,73 @@
---
author: Carlos Zamora @carlos-zamora
created on: 2024-04-01
last updated: 2024-05-08
issue id: #16599
---
# Quick Fix
## Solution Design
Quick Fix will be a new UI surface that allows the user to interact with the terminal and leverage the context of a specific command being executed. The UI is discussed in the [UI/UX Design section](#ui/ux-design).
The UI itself will live in the TerminalControl layer, but it can be populated by both the TerminalControl and the TerminalApp layer (similar to the context menu). The suggestions will be appended as top-level items. Only one Quick Fix menu will be available at a time as it only appears on the latest prompt if an error occurred; this is in alignment with VS Code's design.
The actual suggestions will be populated from various sources such as the following:
- WinGet Command Not Found OSC Sequence:
- `OSC 9001; CmdNotFound; <missingCmd>` will be used by the attached CLI app to notify the terminal that a command `missingCmd` wasn't found. The TerminalControl layer will notify the TerminalApp layer that this VT sequence as received and the TerminalApp layer will use WinGet's API to search for any packages that would remediate this error and construct a list of suggested packages to be installed.
`OSC 9001` can be expanded on to add more suggestions via VT sequences from the underlying CLI app; for more on this, read the [Future considerations section](#future-considerations).
TerminalApp will be notified upon receiving an `OSC 9001; CmdNotFound`. At this point, we'll know that a Quick Fix menu must be shown at the next prompt, and we can use the WinGet API to convert the given `missingCmd` into a list of suggestions (in this case, of the form `winget install...`). These suggestions will be handed back down to the TerminalControl layer to be added to the Quick Fix menu as entries. Since we're in the TerminalControl layer, the suggestions may not need to be converted into SendInput actions, as we already have access to the `RawWriteString()` api. The menu will simply use `RawWriteString()` to inject the string into the prompt.
A corner case that VS Code handles is that if there is already text in the prompt area, it sends a `^C`, then injects the suggestion, then executes it. In Windows Terminal, for simplicity, we'll always send a ^C, inject the suggestion, and execute it.[^5]
An additional corner case is handling a buffer resize and reflow. Since there will only ever be one Quick Fix menu and it will be displayed at the prompt, we'll simply use the cursor position to figure out where the prompt is.
The WinGet API to convert the given `missingCmd` into a list of suggestions may be relatively slow as we have to query the WinGet database. Performing the search when the quick fix menu is open would not be ideal as the user may have to wait for WinGet to finish searching. Instead, the conversion should happen around the time that the prompt is introduced (whether from output or a reflow scenario) asynchronously, off the output thread.
## UI/UX Design
A Quick Fix icon will be displayed immediately left of the prompt. If the icon fits in the left-padding region (a `padding` value where the left side is 16 or greater), it will be drawn there. Otherwise, a thin accent-colored vertical bar will be displayed overlapping the text region; when the icon is hovered over, the icon will appear more clear by becoming more opaque and enlarging to overlap with the text region.
When the icon (exposed as a button) is invoked, the Quick Fix menu (exposed as a flyout menu) will be displayed. This menu will include the following:
- WinGet Command Not Found:
- If a command wasn't found in the immediately previous output (between prompts), this entry will be enabled. It includes a nested menu of all the WinGet suggestions. If no suggestions were found or the previous output didn't have a missing command, this entry will be disabled.
- App Suggestions:
- The underlying CLI app could specifically recommend a command using a custom VT Sequence. For more information, read the [Future considerations section](#future-considerations).
These suggestions will be displayed as "Run: \<command\>", which aligns with the design used in VS Code's Quick Fix menu.
### Mockups
The design is based on VS Code's Quick Fix feature, which looks like the following:
![VS Code Quick Fix feature](vscode-quickfix.gif)
When the Quick Fix button fits in the gutter, it will look like the following:
![Normal version of Quick Fix menu](quickFix-normal.gif)
If the Quick Fix button doesn't fit well in the gutter, it will be collapsed and expand when the mouse hovers over it. It will look like the following:
![Collapsed version of Quick Fix menu](quickFix-collapsed.gif)
## Accessibility
When a Quick Fix is available, an accessibility notification should be dispatched to alert the user that it is available. Aside from that, Quick Fix must be keyboard accessible via a default key binding. The UI will be a WinUI flyout menu, so it will be accessible by default once it is displayed and under focus.
## Future considerations
If the user has shell integration enabled in the session, we should be able to detect if the user has typed in the prompt. This way, we can be smarter about when to send the `^C` instead of always sending it.
The Quick Fix menu can also be a home for future extensions to live. We can and should take inspiration from VS Code's implementation[^2] [^3].
Other possible sources of suggestions in the quick fix menu include the following:
- App Suggestions:
- `OSC 9001; SuggestInput; <cmd>; <description>` will be used by the attached CLI app to directly make suggestions to the terminal. The TermControl layer will stuff the `cmd` parameter into a new entry in `Suggestions`. An optional `description` can be provided to display in the UI for additional information.
- Triggers and Pattern Matchers[^4] (Similar to VS Code's Terminal[^1])
- when `git push` fails due to an upstream not being set, suggest to push with the upstream set.
- When a `git` subcommand fails with a similar command error, suggest to use the similar command(s).
- When `git push` results in a suggestion to create a GitHub PR, suggest to open the link.
As more sources of suggestions are added, `IVector<String> GetQuickFixContext(UInt32 Row)` will be modified to return `IVector<QuickFixSuggestion>` instead, where the `QuickFixSuggestion` will be able to include additional metadata like the optional description above, an icon, or anything we feel is necessary in the future.A nested design can be revisited to organize the suggestions better too.
This paradigm can be extended to gutter marks for shell integration as well.
The Quick Fix menu can also include an entry to redirect the user to Terminal Chat. VS Code has a similar feature that looks like this:
![VS Code Copilot](vscode-copilot.png)
## Resources
[^1]: [VS Code: Terminal Quick Fix Documentation](https://code.visualstudio.com/docs/terminal/shell-integration#_quick-fixes)
[^2]: [VS Code: Expose shell integration command knowledge to extensions](https://github.com/microsoft/vscode/issues/145234)
[^3]: [VS Code: Terminal quick fix API](https://github.com/microsoft/vscode/issues/162950)
[^4]: [Triggers and Custom Clickable Links Spec](https://github.com/microsoft/terminal/pull/15700)
[^5]: If the user has shell integration enabled in the session, we should be able to detect if the user has typed in the prompt. This way, we can be smarter about when to send the `^C` instead of always sending it.

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
@@ -120,4 +120,4 @@
<data name="AppDescription" xml:space="preserve">
<value>Ά śςґàτсн ąρφ ƒоř ΧΆΜĻ Ìŝļàиđś τёşτś !!! !!! !!! !</value>
</data>
</root>
</root>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
@@ -120,4 +120,4 @@
<data name="AppDescription" xml:space="preserve">
<value>Ά śςґàτсн ąρφ ƒоř ΧΆΜĻ Ìŝļàиđś τёşτś !!! !!! !!! !</value>
</data>
</root>
</root>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
@@ -120,4 +120,4 @@
<data name="AppDescription" xml:space="preserve">
<value>Ά śςґàτсн ąρφ ƒоř ΧΆΜĻ Ìŝļàиđś τёşτś !!! !!! !!! !</value>
</data>
</root>
</root>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
@@ -117,4 +117,4 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
</root>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
@@ -117,4 +117,4 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
</root>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
@@ -117,4 +117,4 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
</root>

View File

@@ -0,0 +1,245 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
#include "precomp.h"
#include "ImageSlice.hpp"
#include "Row.hpp"
#include "textBuffer.hpp"
ImageSlice::ImageSlice(const til::size cellSize) noexcept :
_cellSize{ cellSize }
{
}
til::size ImageSlice::CellSize() const noexcept
{
return _cellSize;
}
til::CoordType ImageSlice::ColumnOffset() const noexcept
{
return _columnBegin;
}
til::CoordType ImageSlice::PixelWidth() const noexcept
{
return _pixelWidth;
}
std::span<const RGBQUAD> ImageSlice::Pixels() const noexcept
{
return _pixelBuffer;
}
const RGBQUAD* ImageSlice::Pixels(const til::CoordType columnBegin) const noexcept
{
const auto pixelOffset = (columnBegin - _columnBegin) * _cellSize.width;
return &til::at(_pixelBuffer, pixelOffset);
}
RGBQUAD* ImageSlice::MutablePixels(const til::CoordType columnBegin, const til::CoordType columnEnd)
{
// IF the buffer is empty or isn't large enough for the requested range, we'll need to resize it.
if (_pixelBuffer.empty() || columnBegin < _columnBegin || columnEnd > _columnEnd)
{
const auto oldColumnBegin = _columnBegin;
const auto oldPixelWidth = _pixelWidth;
const auto existingData = !_pixelBuffer.empty();
_columnBegin = existingData ? std::min(_columnBegin, columnBegin) : columnBegin;
_columnEnd = existingData ? std::max(_columnEnd, columnEnd) : columnEnd;
_pixelWidth = (_columnEnd - _columnBegin) * _cellSize.width;
_pixelWidth = (_pixelWidth + 3) & ~3; // Renderer needs this as a multiple of 4
const auto bufferSize = _pixelWidth * _cellSize.height;
if (existingData)
{
// If there is existing data in the buffer, we need to copy it
// across to the appropriate position in the new buffer.
auto newPixelBuffer = std::vector<RGBQUAD>(bufferSize);
const auto newPixelOffset = (oldColumnBegin - _columnBegin) * _cellSize.width;
auto newIterator = std::next(newPixelBuffer.data(), newPixelOffset);
auto oldIterator = _pixelBuffer.data();
// Because widths are rounded up to multiples of 4, it's possible
// that the old width will extend past the right border of the new
// buffer, so the range that we copy must be clamped to fit.
const auto newPixelRange = std::min(oldPixelWidth, _pixelWidth - newPixelOffset);
for (auto i = 0; i < _cellSize.height; i++)
{
std::memcpy(newIterator, oldIterator, newPixelRange * sizeof(RGBQUAD));
std::advance(oldIterator, oldPixelWidth);
std::advance(newIterator, _pixelWidth);
}
_pixelBuffer = std::move(newPixelBuffer);
}
else
{
// Otherwise we just initialize the buffer to the correct size.
_pixelBuffer.resize(bufferSize);
}
}
const auto pixelOffset = (columnBegin - _columnBegin) * _cellSize.width;
return &til::at(_pixelBuffer, pixelOffset);
}
void ImageSlice::CopyBlock(const TextBuffer& srcBuffer, const til::rect srcRect, TextBuffer& dstBuffer, const til::rect dstRect)
{
// If the top of the source is less than the top of the destination, we copy
// the rows from the bottom upwards, to avoid the possibility of the source
// being overwritten if it were to overlap the destination range.
if (srcRect.top < dstRect.top)
{
for (auto y = srcRect.height(); y-- > 0;)
{
const auto& srcRow = srcBuffer.GetRowByOffset(srcRect.top + y);
auto& dstRow = dstBuffer.GetMutableRowByOffset(dstRect.top + y);
CopyCells(srcRow, srcRect.left, dstRow, dstRect.left, dstRect.right);
}
}
else
{
for (auto y = 0; y < srcRect.height(); y++)
{
const auto& srcRow = srcBuffer.GetRowByOffset(srcRect.top + y);
auto& dstRow = dstBuffer.GetMutableRowByOffset(dstRect.top + y);
CopyCells(srcRow, srcRect.left, dstRow, dstRect.left, dstRect.right);
}
}
}
void ImageSlice::CopyRow(const ROW& srcRow, ROW& dstRow)
{
const auto& srcSlice = srcRow.GetImageSlice();
auto& dstSlice = dstRow.GetMutableImageSlice();
dstSlice = srcSlice ? std::make_unique<ImageSlice>(*srcSlice) : nullptr;
}
void ImageSlice::CopyCells(const ROW& srcRow, const til::CoordType srcColumn, ROW& dstRow, const til::CoordType dstColumnBegin, const til::CoordType dstColumnEnd)
{
// If there's no image content in the source row, we're essentially copying
// a blank image into the destination, which is the same thing as an erase.
// Also if the line renditions are different, there's no meaningful way to
// copy the image content, so we also just treat that as an erase.
const auto& srcSlice = srcRow.GetImageSlice();
if (!srcSlice || srcRow.GetLineRendition() != dstRow.GetLineRendition()) [[likely]]
{
ImageSlice::EraseCells(dstRow, dstColumnBegin, dstColumnEnd);
}
else
{
auto& dstSlice = dstRow.GetMutableImageSlice();
if (!dstSlice)
{
dstSlice = std::make_unique<ImageSlice>(srcSlice->CellSize());
}
const auto scale = srcRow.GetLineRendition() != LineRendition::SingleWidth ? 1 : 0;
if (dstSlice->_copyCells(*srcSlice, srcColumn << scale, dstColumnBegin << scale, dstColumnEnd << scale))
{
// If _copyCells returns true, that means the destination was
// completely erased, so we can delete this slice.
dstSlice = nullptr;
}
}
}
bool ImageSlice::_copyCells(const ImageSlice& srcSlice, const til::CoordType srcColumn, const til::CoordType dstColumnBegin, const til::CoordType dstColumnEnd)
{
const auto srcColumnEnd = srcColumn + dstColumnEnd - dstColumnBegin;
// First we determine the portions of the copy range that are currently in use.
const auto srcUsedBegin = std::max(srcColumn, srcSlice._columnBegin);
const auto srcUsedEnd = std::max(std::min(srcColumnEnd, srcSlice._columnEnd), srcUsedBegin);
const auto dstUsedBegin = std::max(dstColumnBegin, _columnBegin);
const auto dstUsedEnd = std::max(std::min(dstColumnEnd, _columnEnd), dstUsedBegin);
// The used source projected into the destination is the range we must overwrite.
const auto projectedOffset = dstColumnBegin - srcColumn;
const auto dstWriteBegin = srcUsedBegin + projectedOffset;
const auto dstWriteEnd = srcUsedEnd + projectedOffset;
if (dstWriteBegin < dstWriteEnd)
{
auto dstIterator = MutablePixels(dstWriteBegin, dstWriteEnd);
auto srcIterator = srcSlice.Pixels(srcUsedBegin);
const auto writeCellCount = dstWriteEnd - dstWriteBegin;
const auto writeByteCount = sizeof(RGBQUAD) * writeCellCount * _cellSize.width;
for (auto y = 0; y < _cellSize.height; y++)
{
std::memmove(dstIterator, srcIterator, writeByteCount);
std::advance(srcIterator, srcSlice._pixelWidth);
std::advance(dstIterator, _pixelWidth);
}
}
// The used destination before and after the written area must be erased.
if (dstUsedBegin < dstWriteBegin)
{
_eraseCells(dstUsedBegin, dstWriteBegin);
}
if (dstUsedEnd > dstWriteEnd)
{
_eraseCells(dstWriteEnd, dstUsedEnd);
}
// If the beginning column is now not less than the end, that means the
// content has been entirely erased, so we return true to let the caller
// know that the slice should be deleted.
return _columnBegin >= _columnEnd;
}
void ImageSlice::EraseBlock(TextBuffer& buffer, const til::rect rect)
{
for (auto y = rect.top; y < rect.bottom; y++)
{
auto& row = buffer.GetMutableRowByOffset(y);
EraseCells(row, rect.left, rect.right);
}
}
void ImageSlice::EraseCells(TextBuffer& buffer, const til::point at, const size_t distance)
{
auto& row = buffer.GetMutableRowByOffset(at.y);
EraseCells(row, at.x, gsl::narrow_cast<til::CoordType>(at.x + distance));
}
void ImageSlice::EraseCells(ROW& row, const til::CoordType columnBegin, const til::CoordType columnEnd)
{
auto& imageSlice = row.GetMutableImageSlice();
if (imageSlice) [[unlikely]]
{
const auto scale = row.GetLineRendition() != LineRendition::SingleWidth ? 1 : 0;
if (imageSlice->_eraseCells(columnBegin << scale, columnEnd << scale))
{
// If _eraseCells returns true, that means the image was
// completely erased, so we can delete this slice.
imageSlice = nullptr;
}
}
}
bool ImageSlice::_eraseCells(const til::CoordType columnBegin, const til::CoordType columnEnd)
{
if (columnBegin <= _columnBegin && columnEnd >= _columnEnd)
{
// If we're erasing the entire range that's in use, we return true to
// indicate that there is now nothing left. We don't bother altering
// the buffer because the caller is now expected to delete this slice.
return true;
}
else
{
const auto eraseBegin = std::max(columnBegin, _columnBegin);
const auto eraseEnd = std::min(columnEnd, _columnEnd);
if (eraseBegin < eraseEnd)
{
const auto eraseOffset = (eraseBegin - _columnBegin) * _cellSize.width;
const auto eraseLength = (eraseEnd - eraseBegin) * _cellSize.width;
auto eraseIterator = std::next(_pixelBuffer.data(), eraseOffset);
for (auto y = 0; y < _cellSize.height; y++)
{
std::memset(eraseIterator, 0, eraseLength * sizeof(RGBQUAD));
std::advance(eraseIterator, _pixelWidth);
}
}
return false;
}
}

View File

@@ -0,0 +1,53 @@
/*++
Copyright (c) Microsoft Corporation
Licensed under the MIT license.
Module Name:
- ImageSlice.hpp
Abstract:
- This serves as a structure to represent a slice of an image covering one textbuffer row.
--*/
#pragma once
#include "til.h"
#include <span>
#include <vector>
class ROW;
class TextBuffer;
class ImageSlice
{
public:
using Pointer = std::unique_ptr<ImageSlice>;
ImageSlice(const ImageSlice& rhs) = default;
ImageSlice(const til::size cellSize) noexcept;
til::size CellSize() const noexcept;
til::CoordType ColumnOffset() const noexcept;
til::CoordType PixelWidth() const noexcept;
std::span<const RGBQUAD> Pixels() const noexcept;
const RGBQUAD* Pixels(const til::CoordType columnBegin) const noexcept;
RGBQUAD* MutablePixels(const til::CoordType columnBegin, const til::CoordType columnEnd);
static void CopyBlock(const TextBuffer& srcBuffer, const til::rect srcRect, TextBuffer& dstBuffer, const til::rect dstRect);
static void CopyRow(const ROW& srcRow, ROW& dstRow);
static void CopyCells(const ROW& srcRow, const til::CoordType srcColumn, ROW& dstRow, const til::CoordType dstColumnBegin, const til::CoordType dstColumnEnd);
static void EraseBlock(TextBuffer& buffer, const til::rect rect);
static void EraseCells(TextBuffer& buffer, const til::point at, const size_t distance);
static void EraseCells(ROW& row, const til::CoordType columnBegin, const til::CoordType columnEnd);
private:
bool _copyCells(const ImageSlice& srcSlice, const til::CoordType srcColumn, const til::CoordType dstColumnBegin, const til::CoordType dstColumnEnd);
bool _eraseCells(const til::CoordType columnBegin, const til::CoordType columnEnd);
til::size _cellSize;
std::vector<RGBQUAD> _pixelBuffer;
til::CoordType _columnBegin = 0;
til::CoordType _columnEnd = 0;
til::CoordType _pixelWidth = 0;
};

View File

@@ -33,6 +33,7 @@ public:
using pointer = OutputCellView*;
using reference = OutputCellView&;
OutputCellIterator() = default;
OutputCellIterator(const wchar_t& wch, const size_t fillLimit = 0) noexcept;
OutputCellIterator(const TextAttribute& attr, const size_t fillLimit = 0) noexcept;
OutputCellIterator(const wchar_t& wch, const TextAttribute& attr, const size_t fillLimit = 0) noexcept;

View File

@@ -25,6 +25,7 @@ Revision History:
class OutputCellView
{
public:
OutputCellView() = default;
OutputCellView(const std::wstring_view view,
const DbcsAttribute dbcsAttr,
const TextAttribute textAttr,

View File

@@ -5,10 +5,8 @@
#include "Row.hpp"
#include <isa_availability.h>
#include <til/unicode.h>
#include "textBuffer.hpp"
#include "../../types/inc/GlyphWidth.hpp"
#include "../../types/inc/CodepointWidthDetector.hpp"
// It would be nice to add checked array access in the future, but it's a little annoying to do so without impacting
// performance (including Debug performance). Other languages are a little bit more ergonomic there than C++.
@@ -227,6 +225,7 @@ void ROW::Reset(const TextAttribute& attr) noexcept
// Constructing and then moving objects into place isn't free.
// Modifying the existing object is _much_ faster.
*_attr.runs().unsafe_shrink_to_size(1) = til::rle_pair{ attr, _columnCount };
_imageSlice = nullptr;
_lineRendition = LineRendition::SingleWidth;
_wrapForced = false;
_doubleBytePadded = false;
@@ -568,6 +567,7 @@ void ROW::ReplaceAttributes(const til::CoordType beginIndex, const til::CoordTyp
void ROW::ReplaceCharacters(til::CoordType columnBegin, til::CoordType width, const std::wstring_view& chars)
try
{
assert(width >= 1 && width <= 2);
WriteHelper h{ *this, columnBegin, _columnCount, chars };
if (!h.IsValid())
{
@@ -666,56 +666,91 @@ catch (...)
[[msvc::forceinline]] void ROW::WriteHelper::_replaceTextUnicode(size_t ch, std::wstring_view::const_iterator it) noexcept
{
const auto end = chars.end();
auto& cwd = CodepointWidthDetector::Singleton();
while (it != end)
// Check if the new text joins with the existing contents of the row to form a single grapheme cluster.
if (it == chars.begin())
{
unsigned int width = 1;
auto ptr = &*it;
const auto wch = *ptr;
size_t advance = 1;
++it;
// Even in our slow-path we can avoid calling IsGlyphFullWidth if the current character is ASCII.
// It also allows us to skip the surrogate pair decoding at the same time.
if (wch >= 0x80)
auto colPrev = colBeg;
while (colPrev > 0 && row._uncheckedIsTrailer(--colPrev))
{
if (til::is_surrogate(wch))
}
const auto chPrev = row._uncheckedCharOffset(colPrev);
const std::wstring_view charsPrev{ row._chars.data() + chPrev, ch - chPrev };
GraphemeState state;
cwd.GraphemeNext(state, charsPrev);
cwd.GraphemeNext(state, chars);
if (state.len > 0)
{
colBegDirty = colPrev;
colEnd = colPrev;
const auto width = std::max(1, state.width);
const auto colEndNew = gsl::narrow_cast<uint16_t>(colEnd + width);
if (colEndNew > colLimit)
{
if (it != end && til::is_leading_surrogate(wch) && til::is_trailing_surrogate(*it))
{
advance = 2;
++it;
}
else
{
ptr = &UNICODE_REPLACEMENT;
}
colEndDirty = colLimit;
charsConsumed = ch - chBeg;
return;
}
width = IsGlyphFullWidth({ ptr, advance }) + 1u;
}
// Fill our char-offset buffer with 1 entry containing the mapping from the
// current column (colEnd) to the start of the glyph in the string (ch)...
til::at(row._charOffsets, colEnd++) = gsl::narrow_cast<uint16_t>(chPrev);
// ...followed by 0-N entries containing an indication that the
// columns are just a wide-glyph extension of the preceding one.
while (colEnd < colEndNew)
{
til::at(row._charOffsets, colEnd++) = gsl::narrow_cast<uint16_t>(chPrev | CharOffsetsTrailer);
}
const auto colEndNew = gsl::narrow_cast<uint16_t>(colEnd + width);
if (colEndNew > colLimit)
ch += state.len;
it += state.len;
}
}
else
{
// The non-ASCII character we have encountered may be a combining mark, like "a^" which is then displayed as "â".
// In order to recognize both characters as a single grapheme, we need to back up by 1 ASCII character
// and let MeasureNext() find the next proper grapheme boundary.
--colEnd;
--ch;
--it;
}
if (const auto end = chars.end(); it != end)
{
GraphemeState state{ .beg = &*it };
do
{
colEndDirty = colLimit;
charsConsumed = ch - chBeg;
return;
}
cwd.GraphemeNext(state, chars);
// Fill our char-offset buffer with 1 entry containing the mapping from the
// current column (colEnd) to the start of the glyph in the string (ch)...
til::at(row._charOffsets, colEnd++) = gsl::narrow_cast<uint16_t>(ch);
// ...followed by 0-N entries containing an indication that the
// columns are just a wide-glyph extension of the preceding one.
while (colEnd < colEndNew)
{
til::at(row._charOffsets, colEnd++) = gsl::narrow_cast<uint16_t>(ch | CharOffsetsTrailer);
}
const auto width = std::max(1, state.width);
const auto colEndNew = gsl::narrow_cast<uint16_t>(colEnd + width);
if (colEndNew > colLimit)
{
colEndDirty = colLimit;
charsConsumed = ch - chBeg;
return;
}
ch += advance;
// Fill our char-offset buffer with 1 entry containing the mapping from the
// current column (colEnd) to the start of the glyph in the string (ch)...
til::at(row._charOffsets, colEnd++) = gsl::narrow_cast<uint16_t>(ch);
// ...followed by 0-N entries containing an indication that the
// columns are just a wide-glyph extension of the preceding one.
while (colEnd < colEndNew)
{
til::at(row._charOffsets, colEnd++) = gsl::narrow_cast<uint16_t>(ch | CharOffsetsTrailer);
}
ch += state.len;
it += state.len;
} while (it != end);
}
colEndDirty = colEnd;
@@ -930,6 +965,16 @@ std::vector<uint16_t> ROW::GetHyperlinks() const
return ids;
}
const ImageSlice::Pointer& ROW::GetImageSlice() const noexcept
{
return _imageSlice;
}
ImageSlice::Pointer& ROW::GetMutableImageSlice() noexcept
{
return _imageSlice;
}
uint16_t ROW::size() const noexcept
{
return _columnCount;
@@ -940,14 +985,15 @@ uint16_t ROW::size() const noexcept
til::CoordType ROW::GetLastNonSpaceColumn() const noexcept
{
const auto text = GetText();
const auto beg = text.begin();
const auto end = text.end();
const auto beg = text.data();
const auto end = beg + text.size();
#pragma warning(suppress : 26429) // Symbol 'it' is never tested for nullness, it can be marked as not_null (f.23).
auto it = end;
for (; it != beg; --it)
{
// it[-1] is safe as `it` is always greater than `beg` (loop invariant).
if (til::at(it, -1) != L' ')
if (it[-1] != L' ')
{
break;
}
@@ -1058,7 +1104,7 @@ std::wstring_view ROW::GetText() const noexcept
std::wstring_view ROW::GetText(til::CoordType columnBegin, til::CoordType columnEnd) const noexcept
{
const til::CoordType columns = _columnCount;
const auto columns = GetReadableColumnCount();
const auto colBeg = clamp(columnBegin, 0, columns);
const auto colEnd = clamp(columnEnd, colBeg, columns);
const size_t chBeg = _uncheckedCharOffset(gsl::narrow_cast<size_t>(colBeg));

View File

@@ -5,6 +5,7 @@
#include <til/rle.h>
#include "ImageSlice.hpp"
#include "LineRendition.hpp"
#include "OutputCell.hpp"
#include "OutputCellIterator.hpp"
@@ -151,6 +152,8 @@ public:
const til::small_rle<TextAttribute, uint16_t, 1>& Attributes() const noexcept;
TextAttribute GetAttrByColumn(til::CoordType column) const;
std::vector<uint16_t> GetHyperlinks() const;
const ImageSlice::Pointer& GetImageSlice() const noexcept;
ImageSlice::Pointer& GetMutableImageSlice() noexcept;
uint16_t size() const noexcept;
til::CoordType GetLastNonSpaceColumn() const noexcept;
til::CoordType MeasureLeft() const noexcept;
@@ -296,6 +299,8 @@ private:
til::small_rle<TextAttribute, uint16_t, 1> _attr;
// The width of the row in visual columns.
uint16_t _columnCount = 0;
// Stores any image content covering the row.
ImageSlice::Pointer _imageSlice;
// Stores double-width/height (DECSWL/DECDWL/DECDHL) attributes.
LineRendition _lineRendition = LineRendition::SingleWidth;
// Occurs when the user runs out of text in a given row and we're forced to wrap the cursor to the next line

View File

@@ -20,7 +20,6 @@ Cursor::Cursor(const ULONG ulSize, TextBuffer& parentBuffer) noexcept :
_fBlinkingAllowed(true),
_fDelay(false),
_fIsConversionArea(false),
_fIsPopupShown(false),
_fDelayedEolWrap(false),
_fDeferCursorRedraw(false),
_fHaveDeferredCursorRedraw(false),
@@ -66,11 +65,6 @@ bool Cursor::IsConversionArea() const noexcept
return _fIsConversionArea;
}
bool Cursor::IsPopupShown() const noexcept
{
return _fIsPopupShown;
}
bool Cursor::GetDelay() const noexcept
{
return _fDelay;
@@ -126,13 +120,6 @@ void Cursor::SetIsConversionArea(const bool fIsConversionArea) noexcept
_RedrawCursorAlways();
}
void Cursor::SetIsPopupShown(const bool fIsPopupShown) noexcept
{
// Functionally the same as "Hide cursor"
_fIsPopupShown = fIsPopupShown;
_RedrawCursorAlways();
}
void Cursor::SetDelay(const bool fDelay) noexcept
{
_fDelay = fDelay;

View File

@@ -44,7 +44,6 @@ public:
bool IsBlinkingAllowed() const noexcept;
bool IsDouble() const noexcept;
bool IsConversionArea() const noexcept;
bool IsPopupShown() const noexcept;
bool GetDelay() const noexcept;
ULONG GetSize() const noexcept;
til::point GetPosition() const noexcept;
@@ -61,7 +60,6 @@ public:
void SetBlinkingAllowed(const bool fIsOn) noexcept;
void SetIsDouble(const bool fIsDouble) noexcept;
void SetIsConversionArea(const bool fIsConversionArea) noexcept;
void SetIsPopupShown(const bool fIsPopupShown) noexcept;
void SetDelay(const bool fDelay) noexcept;
void SetSize(const ULONG ulSize) noexcept;
void SetStyle(const ULONG ulSize, const CursorType type) noexcept;
@@ -99,7 +97,6 @@ private:
bool _fBlinkingAllowed; //Whether or not the cursor is allowed to blink at all. only set through VT (^[[?12h/l)
bool _fDelay; // don't blink scursor on next timer message
bool _fIsConversionArea; // is attached to a conversion area so it doesn't actually need to display the cursor.
bool _fIsPopupShown; // if a popup is being shown, turn off, stop blinking.
bool _fDelayedEolWrap; // don't wrap at EOL till the next char comes in.
til::point _coordDelayedAt; // coordinate the EOL wrap was delayed at.

View File

@@ -12,6 +12,7 @@
<Import Project="$(SolutionDir)src\common.nugetversions.props" />
<ItemGroup>
<ClCompile Include="..\cursor.cpp" />
<ClCompile Include="..\ImageSlice.cpp" />
<ClCompile Include="..\OutputCell.cpp" />
<ClCompile Include="..\OutputCellIterator.cpp" />
<ClCompile Include="..\OutputCellRect.cpp" />
@@ -31,7 +32,7 @@
<ItemGroup>
<ClInclude Include="..\cursor.h" />
<ClInclude Include="..\DbcsAttribute.hpp" />
<ClInclude Include="..\ICharRow.hpp" />
<ClInclude Include="..\ImageSlice.hpp" />
<ClInclude Include="..\LineRendition.hpp" />
<ClInclude Include="..\OutputCell.hpp" />
<ClInclude Include="..\OutputCellIterator.hpp" />
@@ -50,4 +51,4 @@
<!-- Careful reordering these. Some default props (contained in these files) are order sensitive. -->
<Import Project="$(SolutionDir)src\common.build.post.props" />
<Import Project="$(SolutionDir)src\common.nugetversions.targets" />
</Project>
</Project>

View File

@@ -30,6 +30,7 @@ PRECOMPILED_INCLUDE = ..\precomp.h
SOURCES= \
..\cursor.cpp \
..\ImageSlice.cpp \
..\OutputCell.cpp \
..\OutputCellIterator.cpp \
..\OutputCellRect.cpp \

View File

@@ -2,14 +2,12 @@
// Licensed under the MIT license.
#include "precomp.h"
#include "textBuffer.hpp"
#include <til/hash.h>
#include <til/unicode.h>
#include "UTextAdapter.h"
#include "../../types/inc/GlyphWidth.hpp"
#include "../../types/inc/CodepointWidthDetector.hpp"
#include "../renderer/base/renderer.hpp"
#include "../types/inc/utils.hpp"
#include "search.h"
@@ -48,7 +46,7 @@ TextBuffer::TextBuffer(til::size screenBufferSize,
const TextAttribute defaultAttributes,
const UINT cursorSize,
const bool isActiveBuffer,
Microsoft::Console::Render::Renderer& renderer) :
Microsoft::Console::Render::Renderer* renderer) :
_renderer{ renderer },
_currentAttributes{ defaultAttributes },
// This way every TextBuffer will start with a ""unique"" _lastMutationId
@@ -373,52 +371,26 @@ TextBufferCellIterator TextBuffer::GetCellDataAt(const til::point at, const View
return TextBufferCellIterator(*this, at, limit);
}
//Routine Description:
// - Call before inserting a character into the buffer.
// - This will ensure a consistent double byte state (KAttrs line) within the text buffer
// - It will attempt to correct the buffer if we're inserting an unexpected double byte character type
// and it will pad out the buffer if we're going to split a double byte sequence across two rows.
//Arguments:
// - dbcsAttribute - Double byte information associated with the character about to be inserted into the buffer
//Return Value:
// - true if we successfully prepared the buffer and moved the cursor
// - false otherwise (out of memory)
void TextBuffer::_PrepareForDoubleByteSequence(const DbcsAttribute dbcsAttribute)
{
// Now compensate if we don't have enough space for the upcoming double byte sequence
// We only need to compensate for leading bytes
if (dbcsAttribute == DbcsAttribute::Leading)
{
const auto cursorPosition = GetCursor().GetPosition();
const auto lineWidth = GetLineWidth(cursorPosition.y);
// If we're about to lead on the last column in the row, we need to add a padding space
if (cursorPosition.x == lineWidth - 1)
{
// set that we're wrapping for double byte reasons
auto& row = GetMutableRowByOffset(cursorPosition.y);
row.SetDoubleBytePadded(true);
// then move the cursor forward and onto the next row
IncrementCursor();
}
}
}
// Given the character offset `position` in the `chars` string, this function returns the starting position of the next grapheme.
// For instance, given a `chars` of L"x\uD83D\uDE42y" and a `position` of 1 it'll return 3.
// GraphemePrev would do the exact inverse of this operation.
// In the future, these functions are expected to also deliver information about how many columns a grapheme occupies.
// (I know that mere UTF-16 code point iteration doesn't handle graphemes, but that's what we're working towards.)
size_t TextBuffer::GraphemeNext(const std::wstring_view& chars, size_t position) noexcept
{
return til::utf16_iterate_next(chars, position);
auto& cwd = CodepointWidthDetector::Singleton();
#pragma warning(suppress : 26481) // Don't use pointer arithmetic. Use span instead (bounds.1).
GraphemeState state{ .beg = chars.data() + position };
cwd.GraphemeNext(state, chars);
return position + state.len;
}
// It's the counterpart to GraphemeNext. See GraphemeNext.
size_t TextBuffer::GraphemePrev(const std::wstring_view& chars, size_t position) noexcept
{
return til::utf16_iterate_prev(chars, position);
auto& cwd = CodepointWidthDetector::Singleton();
#pragma warning(suppress : 26481) // Don't use pointer arithmetic. Use span instead (bounds.1).
GraphemeState state{ .beg = chars.data() + position };
cwd.GraphemePrev(state, chars);
return position - state.len;
}
// Ever wondered how much space a piece of text needs before inserting it? This function will tell you!
@@ -445,7 +417,7 @@ size_t TextBuffer::FitTextIntoColumns(const std::wstring_view& chars, til::Coord
{
}
const auto dist = gsl::narrow_cast<size_t>(it - beg);
auto dist = gsl::narrow_cast<size_t>(it - beg);
auto col = gsl::narrow_cast<til::CoordType>(dist);
if (it == asciiEnd) [[likely]]
@@ -455,33 +427,25 @@ size_t TextBuffer::FitTextIntoColumns(const std::wstring_view& chars, til::Coord
}
// Unicode slow-path where we need to count text and columns separately.
for (;;)
auto& cwd = CodepointWidthDetector::Singleton();
const auto len = chars.size();
// The non-ASCII character we have encountered may be a combining mark, like "a^" which is then displayed as "â".
// In order to recognize both characters as a single grapheme, we need to back up by 1 ASCII character
// and let GraphemeNext() find the next proper grapheme boundary.
if (dist != 0)
{
auto ptr = &*it;
const auto wch = *ptr;
size_t len = 1;
dist--;
col--;
}
col++;
#pragma warning(suppress : 26481) // Don't use pointer arithmetic. Use span instead (bounds.1).
GraphemeState state{ .beg = chars.data() + dist };
// Even in our slow-path we can avoid calling IsGlyphFullWidth if the current character is ASCII.
// It also allows us to skip the surrogate pair decoding at the same time.
if (wch >= 0x80)
{
if (til::is_surrogate(wch))
{
const auto it2 = it + 1;
if (til::is_leading_surrogate(wch) && it2 != end && til::is_trailing_surrogate(*it2))
{
len = 2;
}
else
{
ptr = &UNICODE_REPLACEMENT;
}
}
col += IsGlyphFullWidth({ ptr, len });
}
while (dist < len)
{
cwd.GraphemeNext(state, chars);
col += state.width;
// If we ran out of columns, we need to always return `columnLimit` and not `cols`,
// because if we tried inserting a wide glyph into just 1 remaining column it will
@@ -490,17 +454,15 @@ size_t TextBuffer::FitTextIntoColumns(const std::wstring_view& chars, til::Coord
if (col > columnLimit)
{
columns = columnLimit;
return gsl::narrow_cast<size_t>(it - beg);
return dist;
}
// But if we simply ran out of text we just need to return the actual number of columns.
it += len;
if (it == end)
{
columns = col;
return chars.size();
}
dist += state.len;
}
// But if we simply ran out of text we just need to return the actual number of columns.
columns = col;
return chars.size();
}
// Pretend as if `position` is a regular cursor in the TextBuffer.
@@ -568,6 +530,7 @@ void TextBuffer::Replace(til::CoordType row, const TextAttribute& attributes, Ro
auto& r = GetMutableRowByOffset(row);
r.ReplaceText(state);
r.ReplaceAttributes(state.columnBegin, state.columnEnd, attributes);
ImageSlice::EraseCells(r, state.columnBegin, state.columnEnd);
TriggerRedraw(Viewport::FromExclusive({ state.columnBeginDirty, row, state.columnEndDirty, row + 1 }));
}
@@ -596,7 +559,11 @@ void TextBuffer::Insert(til::CoordType row, const TextAttribute& attributes, Row
const auto& scratchAttr = scratch.Attributes();
const auto restoreAttr = scratchAttr.slice(gsl::narrow<uint16_t>(state.columnBegin), gsl::narrow<uint16_t>(state.columnBegin + copyAmount));
rowAttr.replace(gsl::narrow<uint16_t>(restoreState.columnBegin), gsl::narrow<uint16_t>(restoreState.columnEnd), restoreAttr);
// If there is any image content, that needs to be copied too.
ImageSlice::CopyCells(r, state.columnBegin, r, restoreState.columnBegin, restoreState.columnEnd);
}
// Image content at the insert position needs to be erased.
ImageSlice::EraseCells(r, state.columnBegin, restoreState.columnBegin);
TriggerRedraw(Viewport::FromExclusive({ state.columnBeginDirty, row, restoreState.columnEndDirty, row + 1 }));
}
@@ -651,6 +618,7 @@ void TextBuffer::FillRect(const til::rect& rect, const std::wstring_view& fill,
auto& r = GetMutableRowByOffset(y);
r.CopyTextFrom(state);
r.ReplaceAttributes(rect.left, rect.right, attributes);
ImageSlice::EraseCells(r, rect.left, rect.right);
TriggerRedraw(Viewport::FromExclusive({ state.columnBeginDirty, y, state.columnEndDirty, y + 1 }));
}
}
@@ -740,144 +708,6 @@ OutputCellIterator TextBuffer::WriteLine(const OutputCellIterator givenIt,
return newIt;
}
//Routine Description:
// - Inserts one codepoint into the buffer at the current cursor position and advances the cursor as appropriate.
//Arguments:
// - chars - The codepoint to insert
// - dbcsAttribute - Double byte information associated with the codepoint
// - bAttr - Color data associated with the character
//Return Value:
// - true if we successfully inserted the character
// - false otherwise (out of memory)
void TextBuffer::InsertCharacter(const std::wstring_view chars,
const DbcsAttribute dbcsAttribute,
const TextAttribute attr)
{
// Ensure consistent buffer state for double byte characters based on the character type we're about to insert
_PrepareForDoubleByteSequence(dbcsAttribute);
// Get the current cursor position
const auto iRow = GetCursor().GetPosition().y; // row stored as logical position, not array position
const auto iCol = GetCursor().GetPosition().x; // column logical and array positions are equal.
// Get the row associated with the given logical position
auto& Row = GetMutableRowByOffset(iRow);
// Store character and double byte data
switch (dbcsAttribute)
{
case DbcsAttribute::Leading:
Row.ReplaceCharacters(iCol, 2, chars);
break;
case DbcsAttribute::Trailing:
Row.ReplaceCharacters(iCol - 1, 2, chars);
break;
default:
Row.ReplaceCharacters(iCol, 1, chars);
break;
}
// Store color data
Row.SetAttrToEnd(iCol, attr);
IncrementCursor();
}
//Routine Description:
// - Inserts one ucs2 codepoint into the buffer at the current cursor position and advances the cursor as appropriate.
//Arguments:
// - wch - The codepoint to insert
// - dbcsAttribute - Double byte information associated with the codepoint
// - bAttr - Color data associated with the character
//Return Value:
// - true if we successfully inserted the character
// - false otherwise (out of memory)
void TextBuffer::InsertCharacter(const wchar_t wch, const DbcsAttribute dbcsAttribute, const TextAttribute attr)
{
InsertCharacter({ &wch, 1 }, dbcsAttribute, attr);
}
//Routine Description:
// - Finds the current row in the buffer (as indicated by the cursor position)
// and specifies that we have forced a line wrap on that row
//Arguments:
// - <none> - Always sets to wrap
//Return Value:
// - <none>
void TextBuffer::_SetWrapOnCurrentRow()
{
_AdjustWrapOnCurrentRow(true);
}
//Routine Description:
// - Finds the current row in the buffer (as indicated by the cursor position)
// and specifies whether or not it should have a line wrap flag.
//Arguments:
// - fSet - True if this row has a wrap. False otherwise.
//Return Value:
// - <none>
void TextBuffer::_AdjustWrapOnCurrentRow(const bool fSet)
{
// The vertical position of the cursor represents the current row we're manipulating.
const auto uiCurrentRowOffset = GetCursor().GetPosition().y;
// Set the wrap status as appropriate
GetMutableRowByOffset(uiCurrentRowOffset).SetWrapForced(fSet);
}
//Routine Description:
// - Increments the cursor one position in the buffer as if text is being typed into the buffer.
// - NOTE: Will introduce a wrap marker if we run off the end of the current row
//Arguments:
// - <none>
//Return Value:
// - true if we successfully moved the cursor.
// - false otherwise (out of memory)
void TextBuffer::IncrementCursor()
{
// Cursor position is stored as logical array indices (starts at 0) for the window
// Buffer Size is specified as the "length" of the array. It would say 80 for valid values of 0-79.
// So subtract 1 from buffer size in each direction to find the index of the final column in the buffer
const auto iFinalColumnIndex = GetLineWidth(GetCursor().GetPosition().y) - 1;
// Move the cursor one position to the right
GetCursor().IncrementXPosition(1);
// If we've passed the final valid column...
if (GetCursor().GetPosition().x > iFinalColumnIndex)
{
// Then mark that we've been forced to wrap
_SetWrapOnCurrentRow();
// Then move the cursor to a new line
NewlineCursor();
}
}
//Routine Description:
// - Increments the cursor one line down in the buffer and to the beginning of the line
//Arguments:
// - <none>
//Return Value:
// - true if we successfully moved the cursor.
void TextBuffer::NewlineCursor()
{
const auto iFinalRowIndex = GetSize().BottomInclusive();
// Reset the cursor position to 0 and move down one line
GetCursor().SetXPosition(0);
GetCursor().IncrementYPosition(1);
// If we've passed the final valid row...
if (GetCursor().GetPosition().y > iFinalRowIndex)
{
// Stay on the final logical/offset row of the buffer.
GetCursor().SetYPosition(iFinalRowIndex);
// Instead increment the circular buffer to move us into the "oldest" row of the backing buffer
IncrementCircularBuffer();
}
}
//Routine Description:
// - Increments the circular buffer by one. Circular buffer is represented by FirstRow variable.
//Arguments:
@@ -888,9 +718,9 @@ void TextBuffer::IncrementCircularBuffer(const TextAttribute& fillAttributes)
{
// FirstRow is at any given point in time the array index in the circular buffer that corresponds
// to the logical position 0 in the window (cursor coordinates and all other coordinates).
if (_isActiveBuffer)
if (_isActiveBuffer && _renderer)
{
_renderer.TriggerFlush(true);
_renderer->TriggerFlush(true);
}
// Prune hyperlinks to delete obsolete references
@@ -954,38 +784,6 @@ til::point TextBuffer::GetLastNonSpaceCharacter(const Viewport* viewOptional) co
return coordEndOfText;
}
// Routine Description:
// - Retrieves the position of the previous character relative to the current cursor position
// Arguments:
// - <none>
// Return Value:
// - Coordinate position in screen coordinates of the character just before the cursor.
// - NOTE: Will return 0,0 if already in the top left corner
til::point TextBuffer::_GetPreviousFromCursor() const
{
auto coordPosition = GetCursor().GetPosition();
// If we're not at the left edge, simply move the cursor to the left by one
if (coordPosition.x > 0)
{
coordPosition.x--;
}
else
{
// Otherwise, only if we're not on the top row (e.g. we don't move anywhere in the top left corner. there is no previous)
if (coordPosition.y > 0)
{
// move the cursor up one line
coordPosition.y--;
// and to the right edge
coordPosition.x = GetLineWidth(coordPosition.y) - 1;
}
}
return coordPosition;
}
const til::CoordType TextBuffer::GetFirstRowIndex() const noexcept
{
return _firstRow;
@@ -993,7 +791,7 @@ const til::CoordType TextBuffer::GetFirstRowIndex() const noexcept
const Viewport TextBuffer::GetSize() const noexcept
{
return Viewport::FromDimensions({ _width, _height });
return Viewport::FromDimensions({}, { _width, _height });
}
void TextBuffer::_SetFirstRowIndex(const til::CoordType FirstRowIndex) noexcept
@@ -1067,10 +865,18 @@ void TextBuffer::ScrollRows(const til::CoordType firstRow, til::CoordType size,
for (; y != end; y += step)
{
GetMutableRowByOffset(y + delta).CopyFrom(GetRowByOffset(y));
CopyRow(y, y + delta, *this);
}
}
void TextBuffer::CopyRow(const til::CoordType srcRowIndex, const til::CoordType dstRowIndex, TextBuffer& dstBuffer) const
{
auto& dstRow = dstBuffer.GetMutableRowByOffset(dstRowIndex);
const auto& srcRow = GetRowByOffset(srcRowIndex);
dstRow.CopyFrom(srcRow);
ImageSlice::CopyRow(srcRow, dstRow);
}
Cursor& TextBuffer::GetCursor() noexcept
{
return _cursor;
@@ -1111,6 +917,8 @@ void TextBuffer::SetCurrentLineRendition(const LineRendition lineRendition, cons
row.SetLineRendition(lineRendition);
// If the line rendition has changed, the row can no longer be wrapped.
row.SetWrapForced(false);
// And all image content on the row is removed.
row.GetMutableImageSlice().reset();
// And if it's no longer single width, the right half of the row should be erased.
if (lineRendition != LineRendition::SingleWidth)
{
@@ -1238,7 +1046,7 @@ void TextBuffer::ResizeTraditional(til::size newSize)
for (; dstRow < copyableRows; ++dstRow, ++srcRow)
{
newBuffer.GetMutableRowByOffset(dstRow).CopyFrom(GetRowByOffset(srcRow));
CopyRow(srcRow, dstRow, newBuffer);
}
// NOTE: Keep this in sync with _reserve().
@@ -1265,56 +1073,56 @@ bool TextBuffer::IsActiveBuffer() const noexcept
return _isActiveBuffer;
}
Microsoft::Console::Render::Renderer& TextBuffer::GetRenderer() noexcept
Microsoft::Console::Render::Renderer* TextBuffer::GetRenderer() noexcept
{
return _renderer;
}
void TextBuffer::NotifyPaintFrame() noexcept
{
if (_isActiveBuffer)
if (_isActiveBuffer && _renderer)
{
_renderer.NotifyPaintFrame();
_renderer->NotifyPaintFrame();
}
}
void TextBuffer::TriggerRedraw(const Viewport& viewport)
{
if (_isActiveBuffer)
if (_isActiveBuffer && _renderer)
{
_renderer.TriggerRedraw(viewport);
_renderer->TriggerRedraw(viewport);
}
}
void TextBuffer::TriggerRedrawAll()
{
if (_isActiveBuffer)
if (_isActiveBuffer && _renderer)
{
_renderer.TriggerRedrawAll();
_renderer->TriggerRedrawAll();
}
}
void TextBuffer::TriggerScroll()
{
if (_isActiveBuffer)
if (_isActiveBuffer && _renderer)
{
_renderer.TriggerScroll();
_renderer->TriggerScroll();
}
}
void TextBuffer::TriggerScroll(const til::point delta)
{
if (_isActiveBuffer)
if (_isActiveBuffer && _renderer)
{
_renderer.TriggerScroll(&delta);
_renderer->TriggerScroll(&delta);
}
}
void TextBuffer::TriggerNewTextNotification(const std::wstring_view newText)
{
if (_isActiveBuffer)
if (_isActiveBuffer && _renderer)
{
_renderer.TriggerNewTextNotification(newText);
_renderer->TriggerNewTextNotification(newText);
}
}
@@ -1597,7 +1405,7 @@ til::point TextBuffer::_GetWordEndForSelection(const til::point target, const st
}
}
bufferSize.IncrementInBoundsCircular(result);
bufferSize.IncrementInBounds(result);
}
if (_GetDelimiterClassAt(result, wordDelimiters) != initialDelimiter)
@@ -2999,6 +2807,12 @@ void TextBuffer::Reflow(TextBuffer& oldBuffer, TextBuffer& newBuffer, const View
};
newRow.CopyTextFrom(state);
// If we're at the start of the old row, copy its image content.
if (oldX == 0)
{
ImageSlice::CopyRow(oldRow, newRow);
}
const auto& oldAttr = oldRow.Attributes();
auto& newAttr = newRow.Attributes();
const auto attributes = oldAttr.slice(gsl::narrow_cast<uint16_t>(oldX), oldAttr.size());

Some files were not shown because too many files have changed in this diff Show More