2021-03-30 00:09:38 +02:00
|
|
|
<!--
|
|
|
|
Copyright (c) Microsoft Corporation. All rights reserved. Licensed under
|
|
|
|
the MIT License. See LICENSE in the project root for license information.
|
|
|
|
-->
|
|
|
|
<Page x:Class="TerminalApp.TerminalPage"
|
|
|
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
|
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
|
|
xmlns:local="using:TerminalApp"
|
|
|
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
|
|
xmlns:mux="using:Microsoft.UI.Xaml.Controls"
|
2021-09-20 19:08:13 +02:00
|
|
|
Background="Transparent"
|
2021-03-30 00:09:38 +02:00
|
|
|
mc:Ignorable="d">
|
|
|
|
|
|
|
|
<Grid x:Name="Root"
|
2021-09-20 19:08:13 +02:00
|
|
|
Background="Transparent">
|
2021-03-30 00:09:38 +02:00
|
|
|
<Grid.RowDefinitions>
|
Make sure the infobar is inserted before the tab content, not on top of (#11609)
Fixes #11606
This is weird, but the infobars would appear totally on top of the
TerminalPage when `showTabsInTitlebar:false`. This would result in the infobar
obscuring the tabs.
Now, the infobars are strictly inserted after the tabs, before the content. So
when they appear, they will reduce the amount of space usable for the control.
That is a little annoying, but preferable to the tabs totally not existing.
Relevant conversation notes from #10798:
> > If the info bar is not local to the tab, then its location between the tab
> > bar (when the title bar is hidden) and the terminal panes feels
> > misleading. Should it instead be above the tab bar or below the terminal
> > panes?
>
> You're... not wrong here. It's maybe not the best place for it, but _on top_
> of the tabs would look insane, and probably wouldn't even work easily, given
> the way we reparent the tab row into the titlebar.
>
> In the pane itself would make more sense, but that runs abreast of all sorts
> of things like #9024, #4998, which might make more sense.
I'm just gonna go with this now, because it's _better_ than before, while we
work out what's _best_.
![gh-11606-fix](https://user-images.githubusercontent.com/18356694/138729178-b96b7003-0dd2-4521-8fff-0fd2a5989f22.gif)
2021-10-26 22:12:22 +02:00
|
|
|
<RowDefinition Height="Auto" />
|
2021-03-30 00:09:38 +02:00
|
|
|
<RowDefinition Height="Auto" />
|
|
|
|
<RowDefinition Height="*" />
|
|
|
|
</Grid.RowDefinitions>
|
|
|
|
|
|
|
|
<local:TabRowControl x:Name="TabRow"
|
|
|
|
Grid.Row="0" />
|
|
|
|
|
Make sure the infobar is inserted before the tab content, not on top of (#11609)
Fixes #11606
This is weird, but the infobars would appear totally on top of the
TerminalPage when `showTabsInTitlebar:false`. This would result in the infobar
obscuring the tabs.
Now, the infobars are strictly inserted after the tabs, before the content. So
when they appear, they will reduce the amount of space usable for the control.
That is a little annoying, but preferable to the tabs totally not existing.
Relevant conversation notes from #10798:
> > If the info bar is not local to the tab, then its location between the tab
> > bar (when the title bar is hidden) and the terminal panes feels
> > misleading. Should it instead be above the tab bar or below the terminal
> > panes?
>
> You're... not wrong here. It's maybe not the best place for it, but _on top_
> of the tabs would look insane, and probably wouldn't even work easily, given
> the way we reparent the tab row into the titlebar.
>
> In the pane itself would make more sense, but that runs abreast of all sorts
> of things like #9024, #4998, which might make more sense.
I'm just gonna go with this now, because it's _better_ than before, while we
work out what's _best_.
![gh-11606-fix](https://user-images.githubusercontent.com/18356694/138729178-b96b7003-0dd2-4521-8fff-0fd2a5989f22.gif)
2021-10-26 22:12:22 +02:00
|
|
|
<StackPanel Grid.Row="1">
|
|
|
|
<mux:InfoBar x:Name="KeyboardServiceWarningInfoBar"
|
|
|
|
x:Load="False"
|
|
|
|
IsClosable="True"
|
|
|
|
IsIconVisible="True"
|
|
|
|
IsOpen="False"
|
|
|
|
Message="{x:Bind KeyboardServiceDisabledText, Mode=OneWay}"
|
|
|
|
Severity="Warning">
|
|
|
|
<mux:InfoBar.ActionButton>
|
|
|
|
<Button x:Uid="InfoBarDismissButton"
|
|
|
|
Click="_KeyboardServiceWarningInfoDismissHandler" />
|
|
|
|
</mux:InfoBar.ActionButton>
|
|
|
|
</mux:InfoBar>
|
|
|
|
|
|
|
|
<mux:InfoBar x:Name="CloseOnExitInfoBar"
|
|
|
|
x:Uid="CloseOnExitInfoBar"
|
|
|
|
x:Load="False"
|
|
|
|
IsClosable="True"
|
|
|
|
IsIconVisible="True"
|
|
|
|
IsOpen="False"
|
|
|
|
Severity="Informational">
|
|
|
|
<mux:InfoBar.ActionButton>
|
|
|
|
<Button x:Uid="InfoBarDismissButton"
|
|
|
|
Click="_CloseOnExitInfoDismissHandler" />
|
|
|
|
</mux:InfoBar.ActionButton>
|
|
|
|
</mux:InfoBar>
|
|
|
|
|
|
|
|
<mux:InfoBar x:Name="SetAsDefaultInfoBar"
|
|
|
|
x:Uid="SetAsDefaultInfoBar"
|
|
|
|
x:Load="False"
|
|
|
|
CloseButtonClick="_SetAsDefaultDismissHandler"
|
|
|
|
IsClosable="True"
|
|
|
|
IsIconVisible="True"
|
|
|
|
IsOpen="False"
|
|
|
|
Severity="Informational">
|
|
|
|
<mux:InfoBar.ActionButton>
|
|
|
|
<HyperlinkButton x:Uid="SetAsDefaultTip_OpenSettingsLink"
|
|
|
|
Click="_SetAsDefaultOpenSettingsHandler" />
|
|
|
|
</mux:InfoBar.ActionButton>
|
|
|
|
</mux:InfoBar>
|
|
|
|
</StackPanel>
|
|
|
|
|
2021-03-30 00:09:38 +02:00
|
|
|
<Grid x:Name="TabContent"
|
Make sure the infobar is inserted before the tab content, not on top of (#11609)
Fixes #11606
This is weird, but the infobars would appear totally on top of the
TerminalPage when `showTabsInTitlebar:false`. This would result in the infobar
obscuring the tabs.
Now, the infobars are strictly inserted after the tabs, before the content. So
when they appear, they will reduce the amount of space usable for the control.
That is a little annoying, but preferable to the tabs totally not existing.
Relevant conversation notes from #10798:
> > If the info bar is not local to the tab, then its location between the tab
> > bar (when the title bar is hidden) and the terminal panes feels
> > misleading. Should it instead be above the tab bar or below the terminal
> > panes?
>
> You're... not wrong here. It's maybe not the best place for it, but _on top_
> of the tabs would look insane, and probably wouldn't even work easily, given
> the way we reparent the tab row into the titlebar.
>
> In the pane itself would make more sense, but that runs abreast of all sorts
> of things like #9024, #4998, which might make more sense.
I'm just gonna go with this now, because it's _better_ than before, while we
work out what's _best_.
![gh-11606-fix](https://user-images.githubusercontent.com/18356694/138729178-b96b7003-0dd2-4521-8fff-0fd2a5989f22.gif)
2021-10-26 22:12:22 +02:00
|
|
|
Grid.Row="2"
|
2021-03-30 00:09:38 +02:00
|
|
|
HorizontalAlignment="Stretch"
|
|
|
|
VerticalAlignment="Stretch" />
|
|
|
|
|
|
|
|
<ContentDialog x:Name="AboutDialog"
|
|
|
|
x:Uid="AboutDialog"
|
|
|
|
x:Load="False"
|
|
|
|
DefaultButton="Close">
|
|
|
|
<StackPanel Orientation="Vertical">
|
|
|
|
<TextBlock IsTextSelectionEnabled="True">
|
|
|
|
<Run Text="{x:Bind ApplicationDisplayName}" /> <LineBreak />
|
|
|
|
<Run x:Uid="AboutDialog_VersionLabel" />
|
|
|
|
<Run Text="{x:Bind ApplicationVersion}" />
|
|
|
|
</TextBlock>
|
|
|
|
<HyperlinkButton x:Uid="AboutDialog_DocumentationLink"
|
|
|
|
NavigateUri="https://go.microsoft.com/fwlink/?linkid=2125416" />
|
|
|
|
<HyperlinkButton x:Uid="AboutDialog_ReleaseNotesLink"
|
|
|
|
NavigateUri="https://go.microsoft.com/fwlink/?linkid=2125417" />
|
|
|
|
<HyperlinkButton x:Uid="AboutDialog_PrivacyPolicyLink"
|
|
|
|
NavigateUri="https://go.microsoft.com/fwlink/?linkid=2125418" />
|
|
|
|
<HyperlinkButton x:Uid="AboutDialog_ThirdPartyNoticesLink"
|
|
|
|
Click="_ThirdPartyNoticesOnClick" />
|
|
|
|
</StackPanel>
|
|
|
|
</ContentDialog>
|
|
|
|
|
2021-09-09 16:03:03 +02:00
|
|
|
<ContentDialog x:Name="QuitDialog"
|
|
|
|
x:Uid="QuitDialog"
|
|
|
|
x:Load="False"
|
|
|
|
DefaultButton="Primary" />
|
|
|
|
|
2021-03-30 00:09:38 +02:00
|
|
|
<ContentDialog x:Name="CloseAllDialog"
|
|
|
|
x:Uid="CloseAllDialog"
|
|
|
|
x:Load="False"
|
|
|
|
DefaultButton="Primary" />
|
|
|
|
|
|
|
|
<ContentDialog x:Name="CloseReadOnlyDialog"
|
|
|
|
x:Uid="CloseReadOnlyDialog"
|
|
|
|
x:Load="False"
|
|
|
|
DefaultButton="Close" />
|
|
|
|
|
|
|
|
<ContentDialog x:Name="MultiLinePasteDialog"
|
|
|
|
x:Uid="MultiLinePasteDialog"
|
|
|
|
x:Load="False"
|
|
|
|
DefaultButton="Primary">
|
|
|
|
<StackPanel>
|
|
|
|
<TextBlock x:Uid="MultiLineWarningText"
|
|
|
|
TextWrapping="Wrap" />
|
|
|
|
<TextBlock x:Uid="ClipboardTextHeader"
|
|
|
|
Margin="0,16,0,0" />
|
|
|
|
<ScrollViewer x:Name="ClipboardContentScrollViewer"
|
|
|
|
MaxHeight="100"
|
|
|
|
Margin="0,8,0,0">
|
|
|
|
<TextBlock x:Name="ClipboardText"
|
|
|
|
FontFamily="Cascadia Mono"
|
|
|
|
TextWrapping="Wrap" />
|
|
|
|
</ScrollViewer>
|
|
|
|
</StackPanel>
|
|
|
|
</ContentDialog>
|
|
|
|
|
|
|
|
<ContentDialog x:Name="LargePasteDialog"
|
|
|
|
x:Uid="LargePasteDialog"
|
|
|
|
x:Load="False"
|
|
|
|
DefaultButton="Primary" />
|
|
|
|
|
|
|
|
<ContentDialog x:Name="ControlNoticeDialog"
|
|
|
|
x:Uid="ControlNoticeDialog"
|
|
|
|
x:Load="False"
|
|
|
|
DefaultButton="Primary">
|
|
|
|
<TextBlock IsTextSelectionEnabled="True"
|
|
|
|
TextWrapping="WrapWholeWords">
|
|
|
|
<Run x:Name="NoticeMessage" />
|
|
|
|
</TextBlock>
|
|
|
|
</ContentDialog>
|
|
|
|
|
|
|
|
<ContentDialog x:Name="CouldNotOpenUriDialog"
|
|
|
|
x:Uid="CouldNotOpenUriDialog"
|
|
|
|
x:Load="False"
|
|
|
|
DefaultButton="Primary">
|
|
|
|
<TextBlock IsTextSelectionEnabled="True"
|
|
|
|
TextWrapping="WrapWholeWords">
|
|
|
|
<Run x:Name="CouldNotOpenUriReason" /> <LineBreak />
|
|
|
|
<Run x:Name="UnopenedUri"
|
|
|
|
FontFamily="Cascadia Mono" />
|
|
|
|
</TextBlock>
|
|
|
|
</ContentDialog>
|
|
|
|
|
|
|
|
<local:CommandPalette x:Name="CommandPalette"
|
2021-11-02 14:45:57 +01:00
|
|
|
Grid.Row="2"
|
2021-03-30 00:09:38 +02:00
|
|
|
VerticalAlignment="Stretch"
|
|
|
|
PreviewKeyDown="_KeyDownHandler"
|
|
|
|
Visibility="Collapsed" />
|
|
|
|
|
2021-03-30 18:08:03 +02:00
|
|
|
<!--
|
|
|
|
A TeachingTip with IsLightDismissEnabled="True" will immediately
|
|
|
|
dismiss itself if the window is unfocused (In Xaml Islands). This is
|
|
|
|
tracked by MUX#4382
|
|
|
|
-->
|
|
|
|
<mux:TeachingTip x:Name="WindowIdToast"
|
|
|
|
Title="{x:Bind WindowIdForDisplay}"
|
|
|
|
x:Load="False"
|
|
|
|
IsLightDismissEnabled="True"
|
Add support for renaming windows (#9662)
## Summary of the Pull Request
This PR adds support for renaming windows.
![window-renaming-000](https://user-images.githubusercontent.com/18356694/113034344-9a30be00-9157-11eb-9443-975f3c294f56.gif)
![window-renaming-001](https://user-images.githubusercontent.com/18356694/113034452-b5033280-9157-11eb-9e35-e5ac80fef0bc.gif)
It does so through two new actions:
* `renameWindow` takes a `name` parameter, and attempts to set the window's name
to the provided name. This is useful if you always want to hit <kbd>F3</kbd>
and rename a window to "foo" (READ: probably not that useful)
* `openWindowRenamer` is more interesting: it opens a `TeachingTip` with a
`TextBox`. When the user hits Ok, it'll request a rename for the provided
value. This lets the user pick a new name for the window at runtime.
In both cases, if there's already a window with that name, then the monarch will
reject the rename, and pop a `Toast` in the window informing the user that the
rename failed. Nifty!
## References
* Builds on the toasts from #9523
* #5000 - process model megathread
## PR Checklist
* [x] Closes https://github.com/microsoft/terminal/projects/5#card-50771747
* [x] I work here
* [x] Tests addded (and pass with the help of #9660)
* [ ] Requires documentation to be updated
## Detailed Description of the Pull Request / Additional comments
I'm sending this PR while finishing up the tests. I figured I'll have time to sneak them in before I get the necessary reviews.
> PAIN: We can't immediately focus the textbox in the TeachingTip. It's
> not technically focusable until it is opened. However, it doesn't
> provide an even tto tell us when it is opened. That's tracked in
> microsoft/microsoft-ui-xaml#1607. So for now, the user _needs_ to
> click on the text box manually.
> We're also not using a ContentDialog for this, because in Xaml
> Islands a text box in a ContentDialog won't recieve _any_ keypresses.
> Fun!
## Validation Steps Performed
I've been playing with
```json
{ "keys": "f1", "command": "identifyWindow" },
{ "keys": "f2", "command": "identifyWindows" },
{ "keys": "f3", "command": "openWindowRenamer" },
{ "keys": "f4", "command": { "action": "renameWindow", "name": "foo" } },
{ "keys": "f5", "command": { "action": "renameWindow", "name": "bar" } },
```
and they seem to work as expected
2021-04-02 18:00:04 +02:00
|
|
|
Subtitle="{x:Bind WindowNameForDisplay, Mode=OneWay}" />
|
|
|
|
|
|
|
|
<mux:TeachingTip x:Name="RenameFailedToast"
|
|
|
|
x:Uid="RenameFailedToast"
|
|
|
|
x:Load="False"
|
|
|
|
IsLightDismissEnabled="True" />
|
|
|
|
|
|
|
|
<mux:TeachingTip x:Name="WindowRenamer"
|
|
|
|
x:Uid="WindowRenamer"
|
|
|
|
Title="{x:Bind WindowIdForDisplay}"
|
|
|
|
x:Load="False"
|
2021-04-06 21:25:18 +02:00
|
|
|
ActionButtonClick="_WindowRenamerActionClick"
|
2021-04-07 02:12:41 +02:00
|
|
|
ActionButtonStyle="{ThemeResource AccentButtonStyle}"
|
|
|
|
IsLightDismissEnabled="True">
|
Add support for renaming windows (#9662)
## Summary of the Pull Request
This PR adds support for renaming windows.
![window-renaming-000](https://user-images.githubusercontent.com/18356694/113034344-9a30be00-9157-11eb-9443-975f3c294f56.gif)
![window-renaming-001](https://user-images.githubusercontent.com/18356694/113034452-b5033280-9157-11eb-9e35-e5ac80fef0bc.gif)
It does so through two new actions:
* `renameWindow` takes a `name` parameter, and attempts to set the window's name
to the provided name. This is useful if you always want to hit <kbd>F3</kbd>
and rename a window to "foo" (READ: probably not that useful)
* `openWindowRenamer` is more interesting: it opens a `TeachingTip` with a
`TextBox`. When the user hits Ok, it'll request a rename for the provided
value. This lets the user pick a new name for the window at runtime.
In both cases, if there's already a window with that name, then the monarch will
reject the rename, and pop a `Toast` in the window informing the user that the
rename failed. Nifty!
## References
* Builds on the toasts from #9523
* #5000 - process model megathread
## PR Checklist
* [x] Closes https://github.com/microsoft/terminal/projects/5#card-50771747
* [x] I work here
* [x] Tests addded (and pass with the help of #9660)
* [ ] Requires documentation to be updated
## Detailed Description of the Pull Request / Additional comments
I'm sending this PR while finishing up the tests. I figured I'll have time to sneak them in before I get the necessary reviews.
> PAIN: We can't immediately focus the textbox in the TeachingTip. It's
> not technically focusable until it is opened. However, it doesn't
> provide an even tto tell us when it is opened. That's tracked in
> microsoft/microsoft-ui-xaml#1607. So for now, the user _needs_ to
> click on the text box manually.
> We're also not using a ContentDialog for this, because in Xaml
> Islands a text box in a ContentDialog won't recieve _any_ keypresses.
> Fun!
## Validation Steps Performed
I've been playing with
```json
{ "keys": "f1", "command": "identifyWindow" },
{ "keys": "f2", "command": "identifyWindows" },
{ "keys": "f3", "command": "openWindowRenamer" },
{ "keys": "f4", "command": { "action": "renameWindow", "name": "foo" } },
{ "keys": "f5", "command": { "action": "renameWindow", "name": "bar" } },
```
and they seem to work as expected
2021-04-02 18:00:04 +02:00
|
|
|
<mux:TeachingTip.Content>
|
|
|
|
<TextBox x:Name="WindowRenamerTextBox"
|
2021-04-06 21:12:08 +02:00
|
|
|
KeyUp="_WindowRenamerKeyUp"
|
Add support for renaming windows (#9662)
## Summary of the Pull Request
This PR adds support for renaming windows.
![window-renaming-000](https://user-images.githubusercontent.com/18356694/113034344-9a30be00-9157-11eb-9443-975f3c294f56.gif)
![window-renaming-001](https://user-images.githubusercontent.com/18356694/113034452-b5033280-9157-11eb-9e35-e5ac80fef0bc.gif)
It does so through two new actions:
* `renameWindow` takes a `name` parameter, and attempts to set the window's name
to the provided name. This is useful if you always want to hit <kbd>F3</kbd>
and rename a window to "foo" (READ: probably not that useful)
* `openWindowRenamer` is more interesting: it opens a `TeachingTip` with a
`TextBox`. When the user hits Ok, it'll request a rename for the provided
value. This lets the user pick a new name for the window at runtime.
In both cases, if there's already a window with that name, then the monarch will
reject the rename, and pop a `Toast` in the window informing the user that the
rename failed. Nifty!
## References
* Builds on the toasts from #9523
* #5000 - process model megathread
## PR Checklist
* [x] Closes https://github.com/microsoft/terminal/projects/5#card-50771747
* [x] I work here
* [x] Tests addded (and pass with the help of #9660)
* [ ] Requires documentation to be updated
## Detailed Description of the Pull Request / Additional comments
I'm sending this PR while finishing up the tests. I figured I'll have time to sneak them in before I get the necessary reviews.
> PAIN: We can't immediately focus the textbox in the TeachingTip. It's
> not technically focusable until it is opened. However, it doesn't
> provide an even tto tell us when it is opened. That's tracked in
> microsoft/microsoft-ui-xaml#1607. So for now, the user _needs_ to
> click on the text box manually.
> We're also not using a ContentDialog for this, because in Xaml
> Islands a text box in a ContentDialog won't recieve _any_ keypresses.
> Fun!
## Validation Steps Performed
I've been playing with
```json
{ "keys": "f1", "command": "identifyWindow" },
{ "keys": "f2", "command": "identifyWindows" },
{ "keys": "f3", "command": "openWindowRenamer" },
{ "keys": "f4", "command": { "action": "renameWindow", "name": "foo" } },
{ "keys": "f5", "command": { "action": "renameWindow", "name": "bar" } },
```
and they seem to work as expected
2021-04-02 18:00:04 +02:00
|
|
|
Text="{x:Bind WindowName, Mode=OneWay}" />
|
|
|
|
</mux:TeachingTip.Content>
|
|
|
|
</mux:TeachingTip>
|
2021-03-30 00:09:38 +02:00
|
|
|
</Grid>
|
|
|
|
</Page>
|