Compare commits
62 Commits
dev/cazamo
...
v1.21.2361
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e8c15683a7 | ||
|
|
6d4ff2e5a7 | ||
|
|
e60afb6f4e | ||
|
|
1519b6feb2 | ||
|
|
6d9fb78bfc | ||
|
|
102181f109 | ||
|
|
b028a5764b | ||
|
|
cf7a6617ab | ||
|
|
f2e9041aa0 | ||
|
|
8e7137dbde | ||
|
|
0cbe706f48 | ||
|
|
8c2c88e44f | ||
|
|
1742dc03ff | ||
|
|
42ab9bbd69 | ||
|
|
cb8a3f6ef1 | ||
|
|
ed08108e32 | ||
|
|
8aa56c25f4 | ||
|
|
e866a6c66f | ||
|
|
2890e8a3d4 | ||
|
|
6b6167ec2b | ||
|
|
5d1638f187 | ||
|
|
2befaa1669 | ||
|
|
83a9baa797 | ||
|
|
5a99621856 | ||
|
|
09aa541d56 | ||
|
|
4040e4c654 | ||
|
|
8f4775df96 | ||
|
|
3ab8921aa7 | ||
|
|
2a15717f69 | ||
|
|
846a8aa7a6 | ||
|
|
9cccef7224 | ||
|
|
196a60c7c2 | ||
|
|
aff77650e4 | ||
|
|
8f3b38fb81 | ||
|
|
d960c89634 | ||
|
|
332c5ad937 | ||
|
|
5f6783b01f | ||
|
|
334335fd43 | ||
|
|
30df31fd9b | ||
|
|
0030a1d52e | ||
|
|
082d166ac6 | ||
|
|
3e661bfad2 | ||
|
|
7b59a9eafb | ||
|
|
8038dc67cd | ||
|
|
bc365c9542 | ||
|
|
0d8e43c697 | ||
|
|
967dcfc5b0 | ||
|
|
e56a557c93 | ||
|
|
52eba74316 | ||
|
|
27de22d0e5 | ||
|
|
52ab4c467a | ||
|
|
ece2ef7f84 | ||
|
|
ef283da5cb | ||
|
|
18c3f72fe0 | ||
|
|
4d1b543a9e | ||
|
|
d838ce5e67 | ||
|
|
1f54562f04 | ||
|
|
f0fc1b5701 | ||
|
|
a6819c5384 | ||
|
|
3c6b2af578 | ||
|
|
fe237afc25 | ||
|
|
3600ee42f0 |
@@ -4,7 +4,7 @@
|
||||
<clear />
|
||||
<!-- Dependencies that we can turn on to force override for testing purposes before uploading. -->
|
||||
<!--<add key="Static Package Dependencies" value="dep\packages" />-->
|
||||
<add key="TerminalDependencies" value="https://pkgs.dev.azure.com/ms/terminal/_packaging/TerminalDependencies/nuget/v3/index.json" />
|
||||
<add key="TerminalDependencies" value="https://pkgs.dev.azure.com/shine-oss/terminal/_packaging/TerminalDependencies/nuget/v3/index.json" />
|
||||
</packageSources>
|
||||
<disabledPackageSources>
|
||||
<clear />
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<!-- Optional, defaults to main. Name of the branch which will be used for calculating branch point. -->
|
||||
<PGOBranch>main</PGOBranch>
|
||||
<PGOBranch>release-1.21</PGOBranch>
|
||||
|
||||
<!-- Mandatory. Name of the NuGet package which will contain PGO databases for consumption by build system. -->
|
||||
<PGOPackageName>Microsoft.Internal.Windows.Terminal.PGODatabase</PGOPackageName>
|
||||
|
||||
@@ -27,7 +27,7 @@ parameters:
|
||||
- name: pgoBuildMode
|
||||
displayName: "PGO Build Mode"
|
||||
type: string
|
||||
default: Optimize
|
||||
default: None # BODGY - OneBranch is on VS 17.10, which is known to be the worst
|
||||
values:
|
||||
- Optimize
|
||||
- Instrument
|
||||
|
||||
@@ -100,36 +100,32 @@ jobs:
|
||||
flattenFolders: true
|
||||
|
||||
- ${{ if eq(parameters.codeSign, true) }}:
|
||||
- task: EsrpCodeSigning@5
|
||||
displayName: Submit *.nupkg to ESRP for code signing
|
||||
inputs:
|
||||
ConnectedServiceName: ${{ parameters.signingIdentity.serviceName }}
|
||||
AppRegistrationClientId: ${{ parameters.signingIdentity.appId }}
|
||||
AppRegistrationTenantId: ${{ parameters.signingIdentity.tenantId }}
|
||||
AuthAKVName: ${{ parameters.signingIdentity.akvName }}
|
||||
AuthCertName: ${{ parameters.signingIdentity.authCertName }}
|
||||
AuthSignCertName: ${{ parameters.signingIdentity.signCertName }}
|
||||
FolderPath: $(Build.ArtifactStagingDirectory)/nupkg
|
||||
Pattern: '*.nupkg'
|
||||
UseMinimatch: true
|
||||
signConfigType: inlineSignParams
|
||||
inlineOperation: >-
|
||||
[
|
||||
{
|
||||
"KeyCode": "CP-401405",
|
||||
"OperationCode": "NuGetSign",
|
||||
"Parameters": {},
|
||||
"ToolName": "sign",
|
||||
"ToolVersion": "1.0"
|
||||
},
|
||||
{
|
||||
"KeyCode": "CP-401405",
|
||||
"OperationCode": "NuGetVerify",
|
||||
"Parameters": {},
|
||||
"ToolName": "sign",
|
||||
"ToolVersion": "1.0"
|
||||
}
|
||||
]
|
||||
- template: steps-esrp-signing.yml
|
||||
parameters:
|
||||
displayName: Submit *.nupkg to ESRP for code signing
|
||||
signingIdentity: ${{ parameters.signingIdentity }}
|
||||
inputs:
|
||||
FolderPath: $(Build.ArtifactStagingDirectory)/nupkg
|
||||
Pattern: '*.nupkg'
|
||||
UseMinimatch: true
|
||||
signConfigType: inlineSignParams
|
||||
inlineOperation: >-
|
||||
[
|
||||
{
|
||||
"KeyCode": "CP-401405",
|
||||
"OperationCode": "NuGetSign",
|
||||
"Parameters": {},
|
||||
"ToolName": "sign",
|
||||
"ToolVersion": "1.0"
|
||||
},
|
||||
{
|
||||
"KeyCode": "CP-401405",
|
||||
"OperationCode": "NuGetVerify",
|
||||
"Parameters": {},
|
||||
"ToolName": "sign",
|
||||
"ToolVersion": "1.0"
|
||||
}
|
||||
]
|
||||
|
||||
- ${{ if eq(parameters.generateSbom, true) }}:
|
||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
||||
|
||||
@@ -242,18 +242,14 @@ jobs:
|
||||
|
||||
# Code-sign everything we just put together.
|
||||
# We run the signing in Terminal.BinDir, because all of the signing batches are relative to the final architecture/configuration output folder.
|
||||
- task: EsrpCodeSigning@5
|
||||
displayName: Submit Signing Request
|
||||
inputs:
|
||||
ConnectedServiceName: ${{ parameters.signingIdentity.serviceName }}
|
||||
AppRegistrationClientId: ${{ parameters.signingIdentity.appId }}
|
||||
AppRegistrationTenantId: ${{ parameters.signingIdentity.tenantId }}
|
||||
AuthAKVName: ${{ parameters.signingIdentity.akvName }}
|
||||
AuthCertName: ${{ parameters.signingIdentity.authCertName }}
|
||||
AuthSignCertName: ${{ parameters.signingIdentity.signCertName }}
|
||||
FolderPath: '$(Terminal.BinDir)'
|
||||
signType: batchSigning
|
||||
batchSignPolicyFile: '$(Build.SourcesDirectory)/ESRPSigningConfig.json'
|
||||
- template: steps-esrp-signing.yml
|
||||
parameters:
|
||||
displayName: Submit Signing Request
|
||||
signingIdentity: ${{ parameters.signingIdentity }}
|
||||
inputs:
|
||||
FolderPath: '$(Terminal.BinDir)'
|
||||
signType: batchSigning
|
||||
batchSignPolicyFile: '$(Build.SourcesDirectory)/ESRPSigningConfig.json'
|
||||
|
||||
# We only need to re-pack the MSIX if we actually signed, so this can stay in the codeSign conditional
|
||||
- ${{ if or(parameters.buildTerminal, parameters.buildEverything) }}:
|
||||
|
||||
@@ -97,45 +97,41 @@ jobs:
|
||||
displayName: Create msixbundle
|
||||
|
||||
- ${{ if eq(parameters.codeSign, true) }}:
|
||||
- task: EsrpCodeSigning@5
|
||||
displayName: Submit *.msixbundle to ESRP for code signing
|
||||
inputs:
|
||||
ConnectedServiceName: ${{ parameters.signingIdentity.serviceName }}
|
||||
AppRegistrationClientId: ${{ parameters.signingIdentity.appId }}
|
||||
AppRegistrationTenantId: ${{ parameters.signingIdentity.tenantId }}
|
||||
AuthAKVName: ${{ parameters.signingIdentity.akvName }}
|
||||
AuthCertName: ${{ parameters.signingIdentity.authCertName }}
|
||||
AuthSignCertName: ${{ parameters.signingIdentity.signCertName }}
|
||||
FolderPath: $(System.ArtifactsDirectory)\bundle
|
||||
Pattern: $(BundleStemName)*.msixbundle
|
||||
UseMinimatch: true
|
||||
signConfigType: inlineSignParams
|
||||
inlineOperation: >-
|
||||
[
|
||||
{
|
||||
"KeyCode": "Dynamic",
|
||||
"CertTemplateName": "WINMSAPP1ST",
|
||||
"CertSubjectName": "CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US",
|
||||
"OperationCode": "SigntoolSign",
|
||||
"Parameters": {
|
||||
"OpusName": "Microsoft",
|
||||
"OpusInfo": "http://www.microsoft.com",
|
||||
"FileDigest": "/fd \"SHA256\"",
|
||||
"TimeStamp": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
|
||||
},
|
||||
"ToolName": "sign",
|
||||
"ToolVersion": "1.0"
|
||||
},
|
||||
{
|
||||
"KeyCode": "Dynamic",
|
||||
"CertTemplateName": "WINMSAPP1ST",
|
||||
"CertSubjectName": "CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US",
|
||||
"OperationCode": "SigntoolVerify",
|
||||
"Parameters": {},
|
||||
"ToolName": "sign",
|
||||
"ToolVersion": "1.0"
|
||||
}
|
||||
]
|
||||
- template: steps-esrp-signing.yml
|
||||
parameters:
|
||||
displayName: Submit *.msixbundle to ESRP for code signing
|
||||
signingIdentity: ${{ parameters.signingIdentity }}
|
||||
inputs:
|
||||
FolderPath: $(System.ArtifactsDirectory)\bundle
|
||||
Pattern: $(BundleStemName)*.msixbundle
|
||||
UseMinimatch: true
|
||||
signConfigType: inlineSignParams
|
||||
inlineOperation: >-
|
||||
[
|
||||
{
|
||||
"KeyCode": "Dynamic",
|
||||
"CertTemplateName": "WINMSAPP1ST",
|
||||
"CertSubjectName": "CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US",
|
||||
"OperationCode": "SigntoolSign",
|
||||
"Parameters": {
|
||||
"OpusName": "Microsoft",
|
||||
"OpusInfo": "http://www.microsoft.com",
|
||||
"FileDigest": "/fd \"SHA256\"",
|
||||
"TimeStamp": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256"
|
||||
},
|
||||
"ToolName": "sign",
|
||||
"ToolVersion": "1.0"
|
||||
},
|
||||
{
|
||||
"KeyCode": "Dynamic",
|
||||
"CertTemplateName": "WINMSAPP1ST",
|
||||
"CertSubjectName": "CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US",
|
||||
"OperationCode": "SigntoolVerify",
|
||||
"Parameters": {},
|
||||
"ToolName": "sign",
|
||||
"ToolVersion": "1.0"
|
||||
}
|
||||
]
|
||||
|
||||
- ${{ if eq(parameters.generateSbom, true) }}:
|
||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
||||
|
||||
@@ -85,36 +85,32 @@ jobs:
|
||||
versionEnvVar: XES_PACKAGEVERSIONNUMBER
|
||||
|
||||
- ${{ if eq(parameters.codeSign, true) }}:
|
||||
- task: EsrpCodeSigning@5
|
||||
displayName: Submit *.nupkg to ESRP for code signing
|
||||
inputs:
|
||||
ConnectedServiceName: ${{ parameters.signingIdentity.serviceName }}
|
||||
AppRegistrationClientId: ${{ parameters.signingIdentity.appId }}
|
||||
AppRegistrationTenantId: ${{ parameters.signingIdentity.tenantId }}
|
||||
AuthAKVName: ${{ parameters.signingIdentity.akvName }}
|
||||
AuthCertName: ${{ parameters.signingIdentity.authCertName }}
|
||||
AuthSignCertName: ${{ parameters.signingIdentity.signCertName }}
|
||||
FolderPath: $(Build.ArtifactStagingDirectory)/nupkg
|
||||
Pattern: '*.nupkg'
|
||||
UseMinimatch: true
|
||||
signConfigType: inlineSignParams
|
||||
inlineOperation: >-
|
||||
[
|
||||
{
|
||||
"KeyCode": "CP-401405",
|
||||
"OperationCode": "NuGetSign",
|
||||
"Parameters": {},
|
||||
"ToolName": "sign",
|
||||
"ToolVersion": "1.0"
|
||||
},
|
||||
{
|
||||
"KeyCode": "CP-401405",
|
||||
"OperationCode": "NuGetVerify",
|
||||
"Parameters": {},
|
||||
"ToolName": "sign",
|
||||
"ToolVersion": "1.0"
|
||||
}
|
||||
]
|
||||
- template: steps-esrp-signing.yml
|
||||
parameters:
|
||||
displayName: Submit *.nupkg to ESRP for code signing
|
||||
signingIdentity: ${{ parameters.signingIdentity }}
|
||||
inputs:
|
||||
FolderPath: $(Build.ArtifactStagingDirectory)/nupkg
|
||||
Pattern: '*.nupkg'
|
||||
UseMinimatch: true
|
||||
signConfigType: inlineSignParams
|
||||
inlineOperation: >-
|
||||
[
|
||||
{
|
||||
"KeyCode": "CP-401405",
|
||||
"OperationCode": "NuGetSign",
|
||||
"Parameters": {},
|
||||
"ToolName": "sign",
|
||||
"ToolVersion": "1.0"
|
||||
},
|
||||
{
|
||||
"KeyCode": "CP-401405",
|
||||
"OperationCode": "NuGetVerify",
|
||||
"Parameters": {},
|
||||
"ToolName": "sign",
|
||||
"ToolVersion": "1.0"
|
||||
}
|
||||
]
|
||||
|
||||
- ${{ if eq(parameters.generateSbom, true) }}:
|
||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
||||
|
||||
22
build/pipelines/templates-v2/steps-esrp-signing.yml
Normal file
@@ -0,0 +1,22 @@
|
||||
parameters:
|
||||
- name: displayName
|
||||
type: string
|
||||
default: ESRP Code Signing
|
||||
- name: inputs
|
||||
type: object
|
||||
default: {}
|
||||
- name: signingIdentity
|
||||
type: object
|
||||
default: {}
|
||||
|
||||
steps:
|
||||
- task: EsrpCodeSigning@5
|
||||
displayName: ${{ parameters.displayName }}
|
||||
inputs:
|
||||
ConnectedServiceName: ${{ parameters.signingIdentity.serviceName }}
|
||||
AppRegistrationClientId: ${{ parameters.signingIdentity.appId }}
|
||||
AppRegistrationTenantId: ${{ parameters.signingIdentity.tenantId }}
|
||||
AuthAKVName: ${{ parameters.signingIdentity.akvName }}
|
||||
AuthCertName: ${{ parameters.signingIdentity.authCertName }}
|
||||
AuthSignCertName: ${{ parameters.signingIdentity.signCertName }}
|
||||
${{ insert }}: ${{ parameters.inputs }}
|
||||
@@ -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 }}'
|
||||
|
||||
@@ -618,6 +618,11 @@
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": "This will override the profile's `elevate` setting."
|
||||
},
|
||||
"reloadEnvironmentVariables": {
|
||||
"type": "boolean",
|
||||
"default": true,
|
||||
"description": "When set to true, a new environment block will be generated when creating a new session. Otherwise, the session will inherit the variables the Terminal was started with."
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
|
||||
@@ -186,12 +186,9 @@ catch (...)
|
||||
static UBool U_CALLCONV utextAccess(UText* ut, int64_t nativeIndex, UBool forward) noexcept
|
||||
try
|
||||
{
|
||||
if (nativeIndex < 0)
|
||||
{
|
||||
nativeIndex = 0;
|
||||
}
|
||||
|
||||
auto neededIndex = nativeIndex;
|
||||
// This will make it simpler for us to search the row that contains the nativeIndex,
|
||||
// because we'll now only need to check for `start<=index<limit` and nothing else.
|
||||
if (!forward)
|
||||
{
|
||||
neededIndex--;
|
||||
@@ -199,10 +196,12 @@ try
|
||||
|
||||
const auto& textBuffer = *static_cast<const TextBuffer*>(ut->context);
|
||||
const auto range = accessRowRange(ut);
|
||||
auto start = ut->chunkNativeStart;
|
||||
auto limit = ut->chunkNativeLimit;
|
||||
const auto startOld = ut->chunkNativeStart;
|
||||
const auto limitOld = ut->chunkNativeLimit;
|
||||
auto start = startOld;
|
||||
auto limit = limitOld;
|
||||
|
||||
if (neededIndex < start || neededIndex >= limit)
|
||||
if (neededIndex < startOld || neededIndex >= limitOld)
|
||||
{
|
||||
auto y = accessCurrentRow(ut);
|
||||
std::wstring_view text;
|
||||
@@ -215,8 +214,7 @@ try
|
||||
--y;
|
||||
if (y < range.begin)
|
||||
{
|
||||
assert(false);
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
||||
const auto& row = textBuffer.GetRowByOffset(y);
|
||||
@@ -235,8 +233,7 @@ try
|
||||
++y;
|
||||
if (y >= range.end)
|
||||
{
|
||||
assert(false);
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
||||
const auto& row = textBuffer.GetRowByOffset(y);
|
||||
@@ -249,38 +246,50 @@ try
|
||||
} while (neededIndex >= limit);
|
||||
}
|
||||
|
||||
if (!wasWrapForced)
|
||||
assert(start >= 0);
|
||||
// If we have already calculated the total length we can also assert that the limit is in range.
|
||||
assert(ut->p == nullptr || static_cast<size_t>(limit) <= accessLength(ut));
|
||||
|
||||
// Even if we went out-of-bounds, we still need to update the chunkContents to contain the first/last chunk.
|
||||
if (limit != limitOld)
|
||||
{
|
||||
const auto newSize = text.size() + 1;
|
||||
const auto buffer = RefcountBuffer::EnsureCapacityForOverwrite(accessBuffer(ut), newSize);
|
||||
if (!wasWrapForced)
|
||||
{
|
||||
const auto newSize = text.size() + 1;
|
||||
const auto buffer = RefcountBuffer::EnsureCapacityForOverwrite(accessBuffer(ut), newSize);
|
||||
|
||||
memcpy(&buffer->data[0], text.data(), text.size() * sizeof(wchar_t));
|
||||
til::at(buffer->data, text.size()) = L'\n';
|
||||
memcpy(&buffer->data[0], text.data(), text.size() * sizeof(wchar_t));
|
||||
til::at(buffer->data, text.size()) = L'\n';
|
||||
|
||||
text = { &buffer->data[0], newSize };
|
||||
accessBuffer(ut) = buffer;
|
||||
}
|
||||
text = { &buffer->data[0], newSize };
|
||||
accessBuffer(ut) = buffer;
|
||||
}
|
||||
|
||||
accessCurrentRow(ut) = y;
|
||||
ut->chunkNativeStart = start;
|
||||
ut->chunkNativeLimit = limit;
|
||||
ut->chunkLength = gsl::narrow_cast<int32_t>(text.size());
|
||||
accessCurrentRow(ut) = y;
|
||||
ut->chunkNativeStart = start;
|
||||
ut->chunkNativeLimit = limit;
|
||||
ut->chunkLength = gsl::narrow_cast<int32_t>(text.size());
|
||||
#pragma warning(suppress : 26490) // Don't use reinterpret_cast (type.1).
|
||||
ut->chunkContents = reinterpret_cast<const char16_t*>(text.data());
|
||||
ut->nativeIndexingLimit = ut->chunkLength;
|
||||
ut->chunkContents = reinterpret_cast<const char16_t*>(text.data());
|
||||
ut->nativeIndexingLimit = ut->chunkLength;
|
||||
}
|
||||
}
|
||||
|
||||
auto offset = gsl::narrow_cast<int32_t>(nativeIndex - start);
|
||||
|
||||
// The ICU documentation is a little bit misleading. It states:
|
||||
// > @param forward [...] If true, start<=index<limit. If false, [...] start<index<=limit.
|
||||
// but that's just for finding the target chunk. The chunkOffset is not actually constrained to that!
|
||||
// std::clamp will perform a<=b<=c, which is what we want.
|
||||
const auto clampedIndex = std::clamp(nativeIndex, start, limit);
|
||||
auto offset = gsl::narrow_cast<int32_t>(clampedIndex - start);
|
||||
// Don't leave the offset on a trailing surrogate pair. See U16_SET_CP_START.
|
||||
// This assumes that the TextBuffer contains valid UTF-16 which may theoretically not be the case.
|
||||
if (offset > 0 && offset < ut->chunkLength && U16_IS_TRAIL(til::at(ut->chunkContents, offset)))
|
||||
{
|
||||
offset--;
|
||||
}
|
||||
|
||||
ut->chunkOffset = offset;
|
||||
return true;
|
||||
|
||||
return neededIndex >= start && neededIndex < limit;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
|
||||
@@ -2789,7 +2789,7 @@ void TextBuffer::Serialize(const wchar_t* destination) const
|
||||
// In other words, we can only skip \x1b[K = Erase in Line, if both the first/last attribute are the default attribute.
|
||||
static constexpr TextAttribute defaultAttr;
|
||||
const auto trimTrailingWhitespaces = it == last && lastCharX < newX;
|
||||
const auto clearToEndOfLine = trimTrailingWhitespaces && beg->value != defaultAttr || beg->value != defaultAttr;
|
||||
const auto clearToEndOfLine = trimTrailingWhitespaces && (beg->value != defaultAttr || last->value != defaultAttr);
|
||||
|
||||
if (trimTrailingWhitespaces)
|
||||
{
|
||||
@@ -3040,6 +3040,15 @@ void TextBuffer::Reflow(TextBuffer& oldBuffer, TextBuffer& newBuffer, const View
|
||||
}
|
||||
}
|
||||
|
||||
// The for loop right after this if condition will copy entire rows of attributes at a time.
|
||||
// This assumes of course that the "write cursor" (newX, newY) is at the start of a row.
|
||||
// If we didn't check for this, we may otherwise copy attributes from a later row into a previous one.
|
||||
if (newX != 0)
|
||||
{
|
||||
newX = 0;
|
||||
newY++;
|
||||
}
|
||||
|
||||
// Finish copying buffer attributes to remaining rows below the last
|
||||
// printable character. This is to fix the `color 2f` scenario, where you
|
||||
// change the buffer colors then resize and everything below the last
|
||||
|
||||
@@ -589,13 +589,13 @@ namespace
|
||||
TestBuffer{
|
||||
{ 2, 5 }, // reduce width aggressively
|
||||
{
|
||||
{ L" ", true },
|
||||
{ L" ", true },
|
||||
{ L" ", true },
|
||||
{ L" ", true },
|
||||
{ L" ", false },
|
||||
{ L" ", true },
|
||||
{ L" ", true },
|
||||
{ L" ", true },
|
||||
{ L" ", true },
|
||||
},
|
||||
{ 1, 0 },
|
||||
{ 1, 4 },
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
BIN
src/cascadia/CascadiaPackage/ProfileIcons/vs-cmd.scale-100.png
Normal file
|
After Width: | Height: | Size: 433 B |
BIN
src/cascadia/CascadiaPackage/ProfileIcons/vs-cmd.scale-150.png
Normal file
|
After Width: | Height: | Size: 804 B |
BIN
src/cascadia/CascadiaPackage/ProfileIcons/vs-cmd.scale-200.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 758 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
BIN
src/cascadia/CascadiaPackage/ProfileIcons/vs-pwsh.scale-100.png
Normal file
|
After Width: | Height: | Size: 819 B |
BIN
src/cascadia/CascadiaPackage/ProfileIcons/vs-pwsh.scale-150.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
src/cascadia/CascadiaPackage/ProfileIcons/vs-pwsh.scale-200.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
@@ -96,7 +96,6 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation
|
||||
|
||||
peasant.ShowNotificationIconRequested([this](auto&&, auto&&) { ShowNotificationIconRequested.raise(*this, nullptr); });
|
||||
peasant.HideNotificationIconRequested([this](auto&&, auto&&) { HideNotificationIconRequested.raise(*this, nullptr); });
|
||||
peasant.QuitAllRequested({ this, &Monarch::_handleQuitAll });
|
||||
|
||||
{
|
||||
std::unique_lock lock{ _peasantsMutex };
|
||||
@@ -134,7 +133,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation
|
||||
// - <none> used
|
||||
// Return Value:
|
||||
// - <none>
|
||||
void Monarch::_handleQuitAll(const winrt::Windows::Foundation::IInspectable& /*sender*/, const winrt::Windows::Foundation::IInspectable& /*args*/)
|
||||
void Monarch::QuitAll()
|
||||
{
|
||||
if (_quitting.exchange(true, std::memory_order_relaxed))
|
||||
{
|
||||
@@ -166,12 +165,6 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation
|
||||
{
|
||||
peasantSearch->second.Quit();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Somehow we don't have our own peasant, this should never happen.
|
||||
// We are trying to quit anyways so just fail here.
|
||||
assert(peasantSearch != _peasants.end());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -86,6 +86,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation
|
||||
|
||||
uint64_t AddPeasant(winrt::Microsoft::Terminal::Remoting::IPeasant peasant);
|
||||
void SignalClose(const uint64_t peasantId);
|
||||
void QuitAll();
|
||||
|
||||
uint64_t GetNumberOfPeasants();
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ namespace Microsoft.Terminal.Remoting
|
||||
void HandleActivatePeasant(WindowActivatedArgs args);
|
||||
void SummonWindow(SummonWindowSelectionArgs args);
|
||||
void SignalClose(UInt64 peasantId);
|
||||
void QuitAll();
|
||||
|
||||
void SummonAllWindows();
|
||||
Boolean DoesQuakeWindowExist();
|
||||
|
||||
@@ -260,22 +260,6 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation
|
||||
TraceLoggingKeyword(TIL_KEYWORD_TRACE));
|
||||
}
|
||||
|
||||
void Peasant::RequestQuitAll()
|
||||
{
|
||||
try
|
||||
{
|
||||
QuitAllRequested.raise(*this, nullptr);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
LOG_CAUGHT_EXCEPTION();
|
||||
}
|
||||
TraceLoggingWrite(g_hRemotingProvider,
|
||||
"Peasant_RequestQuit",
|
||||
TraceLoggingLevel(WINEVENT_LEVEL_VERBOSE),
|
||||
TraceLoggingKeyword(TIL_KEYWORD_TRACE));
|
||||
}
|
||||
|
||||
void Peasant::AttachContentToWindow(Remoting::AttachRequest request)
|
||||
{
|
||||
try
|
||||
|
||||
@@ -56,7 +56,6 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation
|
||||
void RequestRename(const winrt::Microsoft::Terminal::Remoting::RenameRequestArgs& args);
|
||||
void RequestShowNotificationIcon();
|
||||
void RequestHideNotificationIcon();
|
||||
void RequestQuitAll();
|
||||
void Quit();
|
||||
|
||||
void AttachContentToWindow(Remoting::AttachRequest request);
|
||||
@@ -76,7 +75,6 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation
|
||||
|
||||
til::typed_event<> ShowNotificationIconRequested;
|
||||
til::typed_event<> HideNotificationIconRequested;
|
||||
til::typed_event<> QuitAllRequested;
|
||||
til::typed_event<> QuitRequested;
|
||||
|
||||
til::typed_event<winrt::Windows::Foundation::IInspectable, winrt::Microsoft::Terminal::Remoting::AttachRequest> AttachRequested;
|
||||
|
||||
@@ -80,7 +80,6 @@ namespace Microsoft.Terminal.Remoting
|
||||
|
||||
void RequestShowNotificationIcon();
|
||||
void RequestHideNotificationIcon();
|
||||
void RequestQuitAll();
|
||||
void Quit();
|
||||
|
||||
void AttachContentToWindow(AttachRequest request);
|
||||
@@ -95,7 +94,6 @@ namespace Microsoft.Terminal.Remoting
|
||||
|
||||
event Windows.Foundation.TypedEventHandler<Object, Object> ShowNotificationIconRequested;
|
||||
event Windows.Foundation.TypedEventHandler<Object, Object> HideNotificationIconRequested;
|
||||
event Windows.Foundation.TypedEventHandler<Object, Object> QuitAllRequested;
|
||||
event Windows.Foundation.TypedEventHandler<Object, Object> QuitRequested;
|
||||
|
||||
event Windows.Foundation.TypedEventHandler<Object, AttachRequest> AttachRequested;
|
||||
|
||||
@@ -130,6 +130,8 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation
|
||||
// We connected to a monarch instance, not us though. This won't hit
|
||||
// in isolated mode.
|
||||
|
||||
LOG_IF_FAILED(CoAllowSetForegroundWindow(winrt::get_unknown(_monarch), nullptr));
|
||||
|
||||
// Send the commandline over to the monarch process
|
||||
if (_proposeToMonarch(args))
|
||||
{
|
||||
@@ -373,6 +375,18 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation
|
||||
WindowClosed.raise(s, e);
|
||||
}
|
||||
|
||||
void WindowManager::QuitAll()
|
||||
{
|
||||
if (_monarch)
|
||||
{
|
||||
try
|
||||
{
|
||||
_monarch.QuitAll();
|
||||
}
|
||||
CATCH_LOG()
|
||||
}
|
||||
}
|
||||
|
||||
void WindowManager::SignalClose(const Remoting::Peasant& peasant)
|
||||
{
|
||||
if (_monarch)
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace winrt::Microsoft::Terminal::Remoting::implementation
|
||||
Remoting::Peasant CreatePeasant(const Remoting::WindowRequestedArgs& args);
|
||||
|
||||
void SignalClose(const Remoting::Peasant& peasant);
|
||||
void QuitAll();
|
||||
void SummonWindow(const Remoting::SummonWindowSelectionArgs& args);
|
||||
void SummonAllWindows();
|
||||
Windows::Foundation::Collections::IVectorView<winrt::Microsoft::Terminal::Remoting::PeasantInfo> GetPeasantInfos();
|
||||
|
||||
@@ -12,6 +12,7 @@ namespace Microsoft.Terminal.Remoting
|
||||
Peasant CreatePeasant(WindowRequestedArgs args);
|
||||
|
||||
void SignalClose(Peasant p);
|
||||
void QuitAll();
|
||||
|
||||
void UpdateActiveTabTitle(String title, Peasant p);
|
||||
|
||||
|
||||
@@ -27,10 +27,10 @@ static const int CombinedPaneBorderSize = 2 * PaneBorderSize;
|
||||
static const int AnimationDurationInMilliseconds = 200;
|
||||
static const Duration AnimationDuration = DurationHelper::FromTimeSpan(winrt::Windows::Foundation::TimeSpan(std::chrono::milliseconds(AnimationDurationInMilliseconds)));
|
||||
|
||||
Pane::Pane(const IPaneContent& content, const bool lastFocused) :
|
||||
_content{ content },
|
||||
Pane::Pane(IPaneContent content, const bool lastFocused) :
|
||||
_lastActive{ lastFocused }
|
||||
{
|
||||
_setPaneContent(std::move(content));
|
||||
_root.Children().Append(_borderFirst);
|
||||
|
||||
const auto& control{ _content.GetRoot() };
|
||||
@@ -467,7 +467,7 @@ std::shared_ptr<Pane> Pane::NextPane(const std::shared_ptr<Pane> targetPane)
|
||||
std::shared_ptr<Pane> nextPane = nullptr;
|
||||
auto foundTarget = false;
|
||||
|
||||
auto foundNext = WalkTree([&](auto pane) {
|
||||
auto foundNext = WalkTree([&](const auto& pane) {
|
||||
// If we are a parent pane we don't want to move to one of our children
|
||||
if (foundTarget && targetPane->_HasChild(pane))
|
||||
{
|
||||
@@ -985,6 +985,7 @@ void Pane::_ContentLostFocusHandler(const winrt::Windows::Foundation::IInspectab
|
||||
// - <none>
|
||||
void Pane::Close()
|
||||
{
|
||||
_setPaneContent(nullptr);
|
||||
// Fire our Closed event to tell our parent that we should be removed.
|
||||
Closed.raise(nullptr, nullptr);
|
||||
}
|
||||
@@ -996,7 +997,7 @@ void Pane::Shutdown()
|
||||
{
|
||||
if (_IsLeaf())
|
||||
{
|
||||
_content.Close();
|
||||
_setPaneContent(nullptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1341,7 +1342,7 @@ std::shared_ptr<Pane> Pane::DetachPane(std::shared_ptr<Pane> pane)
|
||||
detached->_ApplySplitDefinitions();
|
||||
|
||||
// Trigger the detached event on each child
|
||||
detached->WalkTree([](auto pane) {
|
||||
detached->WalkTree([](const auto& pane) {
|
||||
pane->Detached.raise(pane);
|
||||
});
|
||||
|
||||
@@ -1400,7 +1401,7 @@ void Pane::_CloseChild(const bool closeFirst)
|
||||
_borders = _GetCommonBorders();
|
||||
|
||||
// take the control, profile, id and isDefTermSession of the pane that _wasn't_ closed.
|
||||
_content = remainingChild->_content;
|
||||
_setPaneContent(remainingChild->_takePaneContent());
|
||||
_id = remainingChild->Id();
|
||||
|
||||
// Revoke the old event handlers. Remove both the handlers for the panes
|
||||
@@ -1542,7 +1543,7 @@ void Pane::_CloseChild(const bool closeFirst)
|
||||
{
|
||||
// update our path to our first remaining leaf
|
||||
_parentChildPath = _firstChild;
|
||||
_firstChild->WalkTree([](auto p) {
|
||||
_firstChild->WalkTree([](const auto& p) {
|
||||
if (p->_IsLeaf())
|
||||
{
|
||||
return true;
|
||||
@@ -1705,6 +1706,33 @@ void Pane::_SetupChildCloseHandlers()
|
||||
});
|
||||
}
|
||||
|
||||
// With this method you take ownership of the control from this Pane.
|
||||
// Assign it to another Pane with _setPaneContent() or Close() it.
|
||||
IPaneContent Pane::_takePaneContent()
|
||||
{
|
||||
_closeRequestedRevoker.revoke();
|
||||
return std::move(_content);
|
||||
}
|
||||
|
||||
// This method safely sets the content of the Pane. It'll ensure to revoke and
|
||||
// assign event handlers, and to Close() the existing content if there's any.
|
||||
// The new content can be nullptr to remove any content.
|
||||
void Pane::_setPaneContent(IPaneContent content)
|
||||
{
|
||||
// The IPaneContent::Close() implementation may be buggy and raise the CloseRequested event again.
|
||||
// _takePaneContent() avoids this as it revokes the event handler.
|
||||
if (const auto c = _takePaneContent())
|
||||
{
|
||||
c.Close();
|
||||
}
|
||||
|
||||
if (content)
|
||||
{
|
||||
_content = std::move(content);
|
||||
_closeRequestedRevoker = _content.CloseRequested(winrt::auto_revoke, [this](auto&&, auto&&) { Close(); });
|
||||
}
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Sets up row/column definitions for this pane. There are three total
|
||||
// row/cols. The middle one is for the separator. The first and third are for
|
||||
@@ -2255,8 +2283,7 @@ std::pair<std::shared_ptr<Pane>, std::shared_ptr<Pane>> Pane::_Split(SplitDirect
|
||||
else
|
||||
{
|
||||
// Move our control, guid, isDefTermSession into the first one.
|
||||
_firstChild = std::make_shared<Pane>(_content);
|
||||
_content = nullptr;
|
||||
_firstChild = std::make_shared<Pane>(_takePaneContent());
|
||||
_firstChild->_broadcastEnabled = _broadcastEnabled;
|
||||
}
|
||||
|
||||
@@ -2398,7 +2425,7 @@ void Pane::Id(uint32_t id) noexcept
|
||||
bool Pane::FocusPane(const uint32_t id)
|
||||
{
|
||||
// Always clear the parent child path if we are focusing a leaf
|
||||
return WalkTree([=](auto p) {
|
||||
return WalkTree([=](const auto& p) {
|
||||
p->_parentChildPath.reset();
|
||||
if (p->_id == id)
|
||||
{
|
||||
@@ -2421,7 +2448,7 @@ bool Pane::FocusPane(const uint32_t id)
|
||||
// - true if focus was set
|
||||
bool Pane::FocusPane(const std::shared_ptr<Pane> pane)
|
||||
{
|
||||
return WalkTree([&](auto p) {
|
||||
return WalkTree([&](const auto& p) {
|
||||
if (p == pane)
|
||||
{
|
||||
p->_Focus();
|
||||
@@ -2451,6 +2478,11 @@ bool Pane::_HasChild(const std::shared_ptr<Pane> child)
|
||||
});
|
||||
}
|
||||
|
||||
winrt::TerminalApp::TerminalPaneContent Pane::_getTerminalContent() const
|
||||
{
|
||||
return _IsLeaf() ? _content.try_as<winrt::TerminalApp::TerminalPaneContent>() : nullptr;
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Recursive function that finds a pane with the given ID
|
||||
// Arguments:
|
||||
|
||||
@@ -62,7 +62,7 @@ struct PaneResources
|
||||
class Pane : public std::enable_shared_from_this<Pane>
|
||||
{
|
||||
public:
|
||||
Pane(const winrt::TerminalApp::IPaneContent& content,
|
||||
Pane(winrt::TerminalApp::IPaneContent content,
|
||||
const bool lastFocused = false);
|
||||
|
||||
Pane(std::shared_ptr<Pane> first,
|
||||
@@ -248,13 +248,13 @@ private:
|
||||
|
||||
std::optional<uint32_t> _id;
|
||||
std::weak_ptr<Pane> _parentChildPath{};
|
||||
|
||||
bool _lastActive{ false };
|
||||
winrt::event_token _firstClosedToken{ 0 };
|
||||
winrt::event_token _secondClosedToken{ 0 };
|
||||
|
||||
winrt::Windows::UI::Xaml::UIElement::GotFocus_revoker _gotFocusRevoker;
|
||||
winrt::Windows::UI::Xaml::UIElement::LostFocus_revoker _lostFocusRevoker;
|
||||
winrt::TerminalApp::IPaneContent::CloseRequested_revoker _closeRequestedRevoker;
|
||||
|
||||
Borders _borders{ Borders::None };
|
||||
|
||||
@@ -264,11 +264,10 @@ private:
|
||||
bool _IsLeaf() const noexcept;
|
||||
bool _HasFocusedChild() const noexcept;
|
||||
void _SetupChildCloseHandlers();
|
||||
winrt::TerminalApp::IPaneContent _takePaneContent();
|
||||
void _setPaneContent(winrt::TerminalApp::IPaneContent content);
|
||||
bool _HasChild(const std::shared_ptr<Pane> child);
|
||||
winrt::TerminalApp::TerminalPaneContent _getTerminalContent() const
|
||||
{
|
||||
return _IsLeaf() ? _content.try_as<winrt::TerminalApp::TerminalPaneContent>() : nullptr;
|
||||
}
|
||||
winrt::TerminalApp::TerminalPaneContent _getTerminalContent() const;
|
||||
|
||||
std::pair<std::shared_ptr<Pane>, std::shared_ptr<Pane>> _Split(winrt::Microsoft::Terminal::Settings::Model::SplitDirection splitType,
|
||||
const float splitSize,
|
||||
|
||||
@@ -205,7 +205,7 @@
|
||||
<value>Dividir pestaña</value>
|
||||
</data>
|
||||
<data name="SplitPaneText" xml:space="preserve">
|
||||
<value>Panel dividido</value>
|
||||
<value>Dividir panel</value>
|
||||
</data>
|
||||
<data name="SearchWebText" xml:space="preserve">
|
||||
<value>Búsqueda en la web</value>
|
||||
|
||||
@@ -421,13 +421,13 @@
|
||||
<value>Apri nuova scheda</value>
|
||||
</data>
|
||||
<data name="NewPaneRun.Text" xml:space="preserve">
|
||||
<value>ALT + clic per dividere la finestra corrente</value>
|
||||
<value>ALT+CLIC per dividere la finestra corrente</value>
|
||||
</data>
|
||||
<data name="NewWindowRun.Text" xml:space="preserve">
|
||||
<value>MAIUSC+clic per aprire una nuova finestra</value>
|
||||
<value>MAIUSC+CLIC per aprire una nuova finestra</value>
|
||||
</data>
|
||||
<data name="ElevatedRun.Text" xml:space="preserve">
|
||||
<value>CTRL+Clic per aprire come amministratore</value>
|
||||
<value>CTRL+CLIC per aprire come amministratore</value>
|
||||
</data>
|
||||
<data name="WindowCloseButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Chiudi</value>
|
||||
|
||||
@@ -45,7 +45,6 @@ namespace winrt::TerminalApp::implementation
|
||||
}
|
||||
void ScratchpadContent::Close()
|
||||
{
|
||||
CloseRequested.raise(*this, nullptr);
|
||||
}
|
||||
|
||||
INewContentArgs ScratchpadContent::GetNewTerminalArgs(const BuildStartupKind /* kind */) const
|
||||
|
||||
@@ -47,7 +47,6 @@ namespace winrt::TerminalApp::implementation
|
||||
}
|
||||
void SettingsPaneContent::Close()
|
||||
{
|
||||
CloseRequested.raise(*this, nullptr);
|
||||
}
|
||||
|
||||
INewContentArgs SettingsPaneContent::GetNewTerminalArgs(const BuildStartupKind /*kind*/) const
|
||||
|
||||
@@ -48,7 +48,20 @@ namespace winrt::TerminalApp::implementation
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
return eventArgs.Handled();
|
||||
const auto handled = eventArgs.Handled();
|
||||
|
||||
if (handled)
|
||||
{
|
||||
TraceLoggingWrite(
|
||||
g_hTerminalAppProvider,
|
||||
"ActionDispatched",
|
||||
TraceLoggingDescription("Event emitted when an action was successfully performed"),
|
||||
TraceLoggingValue(static_cast<int>(actionAndArgs.Action()), "Action"),
|
||||
TraceLoggingKeyword(MICROSOFT_KEYWORD_MEASURES),
|
||||
TelemetryPrivacyDataTag(PDT_ProductAndServiceUsage));
|
||||
}
|
||||
|
||||
return handled;
|
||||
}
|
||||
|
||||
bool ShortcutActionDispatch::DoAction(const ActionAndArgs& actionAndArgs)
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
xmlns:model="using:Microsoft.Terminal.Settings.Model"
|
||||
xmlns:mtu="using:Microsoft.Terminal.UI"
|
||||
xmlns:mux="using:Microsoft.UI.Xaml.Controls"
|
||||
MinWidth="256"
|
||||
AllowFocusOnInteraction="True"
|
||||
AutomationProperties.Name="{x:Bind ControlName, Mode=OneWay}"
|
||||
IsTabStop="True"
|
||||
@@ -99,6 +100,24 @@
|
||||
GeneralItemTemplate="{StaticResource GeneralItemTemplate}"
|
||||
NestedItemTemplate="{StaticResource NestedItemTemplate}" />
|
||||
|
||||
<!--
|
||||
Remove all item animations from the suggestions UI. They're
|
||||
entirely too slow to let that UI be usable.
|
||||
-->
|
||||
<Style x:Key="NoAnimationsPlease"
|
||||
TargetType="ListView">
|
||||
<Setter Property="ItemContainerTransitions">
|
||||
<Setter.Value>
|
||||
<TransitionCollection>
|
||||
<!-- (deleted transitions are left for reference for what we removed) -->
|
||||
<ContentThemeTransition />
|
||||
<!--<AddDeleteThemeTransition/>-->
|
||||
<!--<ReorderThemeTransition/>-->
|
||||
<!--<EntranceThemeTransition IsStaggeringEnabled="False"/>-->
|
||||
</TransitionCollection>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
</Style>
|
||||
</ResourceDictionary>
|
||||
</UserControl.Resources>
|
||||
|
||||
@@ -203,7 +222,8 @@
|
||||
ItemClick="_listItemClicked"
|
||||
ItemsSource="{x:Bind FilteredActions}"
|
||||
SelectionChanged="_listItemSelectionChanged"
|
||||
SelectionMode="Single" />
|
||||
SelectionMode="Single"
|
||||
Style="{StaticResource NoAnimationsPlease}" />
|
||||
|
||||
</Grid>
|
||||
|
||||
|
||||
@@ -739,7 +739,7 @@ namespace winrt::TerminalApp::implementation
|
||||
}
|
||||
|
||||
// Clean read-only mode to prevent additional prompt if closing the pane triggers closing of a hosting tab
|
||||
pane->WalkTree([](auto p) {
|
||||
pane->WalkTree([](const auto& p) {
|
||||
if (const auto control{ p->GetTerminalControl() })
|
||||
{
|
||||
if (control.ReadOnly())
|
||||
|
||||
@@ -1899,7 +1899,10 @@ namespace winrt::TerminalApp::implementation
|
||||
|
||||
void TerminalPage::PersistState()
|
||||
{
|
||||
if (_startupState != StartupState::Initialized)
|
||||
// This method may be called for a window even if it hasn't had a tab yet or lost all of them.
|
||||
// We shouldn't persist such windows.
|
||||
const auto tabCount = _tabs.Size();
|
||||
if (_startupState != StartupState::Initialized || tabCount == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -1915,7 +1918,7 @@ namespace winrt::TerminalApp::implementation
|
||||
|
||||
// if the focused tab was not the last tab, restore that
|
||||
auto idx = _GetFocusedTabIndex();
|
||||
if (idx && idx != _tabs.Size() - 1)
|
||||
if (idx && idx != tabCount - 1)
|
||||
{
|
||||
ActionAndArgs action;
|
||||
action.Action(ShortcutAction::SwitchToTab);
|
||||
@@ -3807,7 +3810,7 @@ namespace winrt::TerminalApp::implementation
|
||||
// recipe for disaster. We won't ever open up a tab in this window.
|
||||
newTerminalArgs.Elevate(false);
|
||||
const auto newPane = _MakePane(newTerminalArgs, nullptr, connection);
|
||||
newPane->WalkTree([](auto pane) {
|
||||
newPane->WalkTree([](const auto& pane) {
|
||||
pane->FinalizeConfigurationGivenDefault();
|
||||
});
|
||||
_CreateNewTabFromPane(newPane);
|
||||
|
||||
@@ -78,8 +78,6 @@ namespace winrt::TerminalApp::implementation
|
||||
_bellPlayer = nullptr;
|
||||
_bellPlayerCreated = false;
|
||||
}
|
||||
|
||||
CloseRequested.raise(*this, nullptr);
|
||||
}
|
||||
|
||||
winrt::hstring TerminalPaneContent::Icon() const
|
||||
@@ -239,19 +237,20 @@ namespace winrt::TerminalApp::implementation
|
||||
|
||||
if (_profile)
|
||||
{
|
||||
if (_isDefTermSession && _profile.CloseOnExit() == CloseOnExitMode::Automatic)
|
||||
{
|
||||
// For 'automatic', we only care about the connection state if we were launched by Terminal
|
||||
// Since we were launched via defterm, ignore the connection state (i.e. we treat the
|
||||
// close on exit mode as 'always', see GH #13325 for discussion)
|
||||
Close();
|
||||
}
|
||||
|
||||
const auto mode = _profile.CloseOnExit();
|
||||
if ((mode == CloseOnExitMode::Always) ||
|
||||
((mode == CloseOnExitMode::Graceful || mode == CloseOnExitMode::Automatic) && newConnectionState == ConnectionState::Closed))
|
||||
|
||||
if (
|
||||
// This one is obvious: If the user asked for "always" we do just that.
|
||||
(mode == CloseOnExitMode::Always) ||
|
||||
// Otherwise, and unless the user asked for the opposite of "always",
|
||||
// close the pane when the connection closed gracefully (not failed).
|
||||
(mode != CloseOnExitMode::Never && newConnectionState == ConnectionState::Closed) ||
|
||||
// However, defterm handoff can result in Windows Terminal randomly opening which may be annoying,
|
||||
// so by default we should at least always close the pane, even if the command failed.
|
||||
// See GH #13325 for discussion.
|
||||
(mode == CloseOnExitMode::Automatic && _isDefTermSession))
|
||||
{
|
||||
Close();
|
||||
CloseRequested.raise(nullptr, nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -331,7 +330,7 @@ namespace winrt::TerminalApp::implementation
|
||||
void TerminalPaneContent::_closeTerminalRequestedHandler(const winrt::Windows::Foundation::IInspectable& /*sender*/,
|
||||
const winrt::Windows::Foundation::IInspectable& /*args*/)
|
||||
{
|
||||
Close();
|
||||
CloseRequested.raise(nullptr, nullptr);
|
||||
}
|
||||
|
||||
void TerminalPaneContent::_restartTerminalRequestedHandler(const winrt::Windows::Foundation::IInspectable& /*sender*/,
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace winrt::TerminalApp::implementation
|
||||
|
||||
auto firstId = _nextPaneId;
|
||||
|
||||
_rootPane->WalkTree([&](std::shared_ptr<Pane> pane) {
|
||||
_rootPane->WalkTree([&](const auto& pane) {
|
||||
// update the IDs on each pane
|
||||
if (pane->_IsLeaf())
|
||||
{
|
||||
@@ -203,7 +203,7 @@ namespace winrt::TerminalApp::implementation
|
||||
{
|
||||
ASSERT_UI_THREAD();
|
||||
|
||||
_rootPane->WalkTree([&](std::shared_ptr<Pane> pane) {
|
||||
_rootPane->WalkTree([&](const auto& pane) {
|
||||
// Attach event handlers to each new pane
|
||||
_AttachEventHandlersToPane(pane);
|
||||
if (auto content = pane->GetContent())
|
||||
@@ -275,7 +275,7 @@ namespace winrt::TerminalApp::implementation
|
||||
_UpdateHeaderControlMaxWidth();
|
||||
|
||||
// Update the settings on all our panes.
|
||||
_rootPane->WalkTree([&](auto pane) {
|
||||
_rootPane->WalkTree([&](const auto& pane) {
|
||||
pane->UpdateSettings(settings);
|
||||
return false;
|
||||
});
|
||||
@@ -534,7 +534,7 @@ namespace winrt::TerminalApp::implementation
|
||||
|
||||
// Add the new event handlers to the new pane(s)
|
||||
// and update their ids.
|
||||
pane->WalkTree([&](auto p) {
|
||||
pane->WalkTree([&](const auto& p) {
|
||||
_AttachEventHandlersToPane(p);
|
||||
if (p->_IsLeaf())
|
||||
{
|
||||
@@ -624,7 +624,7 @@ namespace winrt::TerminalApp::implementation
|
||||
// manually.
|
||||
_rootPane->Closed(_rootClosedToken);
|
||||
auto p = _rootPane;
|
||||
p->WalkTree([](auto pane) {
|
||||
p->WalkTree([](const auto& pane) {
|
||||
pane->Detached.raise(pane);
|
||||
});
|
||||
|
||||
@@ -650,7 +650,7 @@ namespace winrt::TerminalApp::implementation
|
||||
|
||||
// Add the new event handlers to the new pane(s)
|
||||
// and update their ids.
|
||||
pane->WalkTree([&](auto p) {
|
||||
pane->WalkTree([&](const auto& p) {
|
||||
_AttachEventHandlersToPane(p);
|
||||
if (p->_IsLeaf())
|
||||
{
|
||||
@@ -947,32 +947,6 @@ namespace winrt::TerminalApp::implementation
|
||||
auto dispatcher = TabViewItem().Dispatcher();
|
||||
ContentEventTokens events{};
|
||||
|
||||
events.CloseRequested = content.CloseRequested(
|
||||
winrt::auto_revoke,
|
||||
[dispatcher, weakThis](auto sender, auto&&) -> winrt::fire_and_forget {
|
||||
// Don't forget! this ^^^^^^^^ sender can't be a reference, this is a async callback.
|
||||
|
||||
// The lambda lives in the `std::function`-style container owned by `control`. That is, when the
|
||||
// `control` gets destroyed the lambda struct also gets destroyed. In other words, we need to
|
||||
// copy `weakThis` onto the stack, because that's the only thing that gets captured in coroutines.
|
||||
// See: https://devblogs.microsoft.com/oldnewthing/20211103-00/?p=105870
|
||||
const auto weakThisCopy = weakThis;
|
||||
co_await wil::resume_foreground(dispatcher);
|
||||
// Check if Tab's lifetime has expired
|
||||
if (auto tab{ weakThisCopy.get() })
|
||||
{
|
||||
if (const auto content{ sender.try_as<TerminalApp::IPaneContent>() })
|
||||
{
|
||||
tab->_rootPane->WalkTree([content](std::shared_ptr<Pane> pane) {
|
||||
if (pane->GetContent() == content)
|
||||
{
|
||||
pane->Close();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
events.TitleChanged = content.TitleChanged(
|
||||
winrt::auto_revoke,
|
||||
[dispatcher, weakThis](auto&&, auto&&) -> winrt::fire_and_forget {
|
||||
|
||||
@@ -134,7 +134,6 @@ namespace winrt::TerminalApp::implementation
|
||||
winrt::TerminalApp::IPaneContent::ConnectionStateChanged_revoker ConnectionStateChanged;
|
||||
winrt::TerminalApp::IPaneContent::ReadOnlyChanged_revoker ReadOnlyChanged;
|
||||
winrt::TerminalApp::IPaneContent::FocusRequested_revoker FocusRequested;
|
||||
winrt::TerminalApp::IPaneContent::CloseRequested_revoker CloseRequested;
|
||||
|
||||
// These events literally only apply if the content is a TermControl.
|
||||
winrt::Microsoft::Terminal::Control::TermControl::KeySent_revoker KeySent;
|
||||
|
||||
@@ -263,7 +263,7 @@ namespace winrt::TerminalApp::implementation
|
||||
AppLogic::Current()->NotifyRootInitialized();
|
||||
}
|
||||
|
||||
void TerminalWindow::Quit()
|
||||
void TerminalWindow::PersistState()
|
||||
{
|
||||
if (_root)
|
||||
{
|
||||
@@ -767,13 +767,22 @@ namespace winrt::TerminalApp::implementation
|
||||
// definitely not on OUR UI thread.
|
||||
winrt::fire_and_forget TerminalWindow::UpdateSettings(winrt::TerminalApp::SettingsLoadEventArgs args)
|
||||
{
|
||||
_settings = args.NewSettings();
|
||||
// GH#17620: We have a bug somewhere where a window doesn't get unregistered from the window list.
|
||||
// This causes UpdateSettings calls where the thread dispatcher is already null.
|
||||
const auto dispatcher = _root->Dispatcher();
|
||||
if (!dispatcher)
|
||||
{
|
||||
co_return;
|
||||
}
|
||||
|
||||
const auto weakThis{ get_weak() };
|
||||
co_await wil::resume_foreground(_root->Dispatcher());
|
||||
co_await wil::resume_foreground(dispatcher);
|
||||
|
||||
// Back on our UI thread...
|
||||
if (auto logic{ weakThis.get() })
|
||||
{
|
||||
_settings = args.NewSettings();
|
||||
|
||||
// Update the settings in TerminalPage
|
||||
// We're on our UI thread right now, so this is safe
|
||||
_root->SetSettings(_settings, true);
|
||||
|
||||
@@ -73,7 +73,7 @@ namespace winrt::TerminalApp::implementation
|
||||
|
||||
void Create();
|
||||
|
||||
void Quit();
|
||||
void PersistState();
|
||||
|
||||
winrt::fire_and_forget UpdateSettings(winrt::TerminalApp::SettingsLoadEventArgs args);
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace TerminalApp
|
||||
Boolean ShouldImmediatelyHandoffToElevated();
|
||||
void HandoffToElevated();
|
||||
|
||||
void Quit();
|
||||
void PersistState();
|
||||
|
||||
Windows.UI.Xaml.UIElement GetRoot();
|
||||
|
||||
|
||||
@@ -180,12 +180,14 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation
|
||||
const HANDLE hRef,
|
||||
const HANDLE hServerProcess,
|
||||
const HANDLE hClientProcess,
|
||||
TERMINAL_STARTUP_INFO startupInfo) :
|
||||
const TERMINAL_STARTUP_INFO& startupInfo) :
|
||||
_rows{ 25 },
|
||||
_cols{ 80 },
|
||||
_inPipe{ hIn },
|
||||
_outPipe{ hOut }
|
||||
{
|
||||
_sessionId = Utils::CreateGuid();
|
||||
|
||||
THROW_IF_FAILED(ConptyPackPseudoConsole(hServerProcess, hRef, hSig, &_hPC));
|
||||
_piClient.hProcess = hClientProcess;
|
||||
|
||||
@@ -429,12 +431,10 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation
|
||||
try
|
||||
{
|
||||
// GH#11556 - make sure to format the error code to this string as an UNSIGNED int
|
||||
winrt::hstring exitText{ fmt::format(std::wstring_view{ RS_(L"ProcessExited") }, fmt::format(_errorFormat, status)) };
|
||||
TerminalOutput.raise(L"\r\n");
|
||||
TerminalOutput.raise(exitText);
|
||||
TerminalOutput.raise(L"\r\n");
|
||||
TerminalOutput.raise(RS_(L"CtrlDToClose"));
|
||||
TerminalOutput.raise(L"\r\n");
|
||||
const auto msg1 = fmt::format(std::wstring_view{ RS_(L"ProcessExited") }, fmt::format(_errorFormat, status));
|
||||
const auto msg2 = RS_(L"CtrlDToClose");
|
||||
const auto msg = fmt::format(FMT_COMPILE(L"\r\n{}\r\n{}\r\n"), msg1, msg2);
|
||||
TerminalOutput.raise(msg);
|
||||
}
|
||||
CATCH_LOG();
|
||||
}
|
||||
@@ -677,7 +677,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation
|
||||
|
||||
void ConptyConnection::closePseudoConsoleAsync(HPCON hPC) noexcept
|
||||
{
|
||||
::ConptyClosePseudoConsoleTimeout(hPC, 0);
|
||||
::ConptyClosePseudoConsole(hPC);
|
||||
}
|
||||
|
||||
HRESULT ConptyConnection::NewHandoff(HANDLE in, HANDLE out, HANDLE signal, HANDLE ref, HANDLE server, HANDLE client, TERMINAL_STARTUP_INFO startupInfo) noexcept
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace winrt::Microsoft::Terminal::TerminalConnection::implementation
|
||||
const HANDLE hRef,
|
||||
const HANDLE hServerProcess,
|
||||
const HANDLE hClientProcess,
|
||||
TERMINAL_STARTUP_INFO startupInfo);
|
||||
const TERMINAL_STARTUP_INFO& startupInfo);
|
||||
|
||||
ConptyConnection() noexcept = default;
|
||||
void Initialize(const Windows::Foundation::Collections::ValueSet& settings);
|
||||
|
||||
@@ -80,7 +80,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
Connection(connection);
|
||||
|
||||
_terminal->SetWriteInputCallback([this](std::wstring_view wstr) {
|
||||
_sendInputToConnection(wstr);
|
||||
_pendingResponses.append(wstr);
|
||||
});
|
||||
|
||||
// GH#8969: pre-seed working directory to prevent potential races
|
||||
@@ -161,7 +161,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
std::chrono::milliseconds{ 100 },
|
||||
[weakTerminal = std::weak_ptr{ _terminal }, weakThis = get_weak(), dispatcher = _dispatcher]() {
|
||||
dispatcher.TryEnqueue(DispatcherQueuePriority::Normal, [weakThis]() {
|
||||
if (const auto self = weakThis.get(); !self->_IsClosing())
|
||||
if (const auto self = weakThis.get(); self && !self->_IsClosing())
|
||||
{
|
||||
self->OutputIdle.raise(*self, nullptr);
|
||||
}
|
||||
@@ -179,7 +179,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
_dispatcher,
|
||||
std::chrono::milliseconds{ 8 },
|
||||
[weakThis = get_weak()](const auto& update) {
|
||||
if (auto core{ weakThis.get() }; !core->_IsClosing())
|
||||
if (auto core{ weakThis.get() }; core && !core->_IsClosing())
|
||||
{
|
||||
core->ScrollPositionChanged.raise(*core, update);
|
||||
}
|
||||
@@ -398,6 +398,17 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
// Return Value:
|
||||
// - <none>
|
||||
void ControlCore::_sendInputToConnection(std::wstring_view wstr)
|
||||
{
|
||||
_connection.WriteInput(wstr);
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Writes the given sequence as input to the active terminal connection,
|
||||
// Arguments:
|
||||
// - wstr: the string of characters to write to the terminal connection.
|
||||
// Return Value:
|
||||
// - <none>
|
||||
void ControlCore::SendInput(const std::wstring_view wstr)
|
||||
{
|
||||
if (wstr.empty())
|
||||
{
|
||||
@@ -414,21 +425,10 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
}
|
||||
else
|
||||
{
|
||||
_connection.WriteInput(wstr);
|
||||
_sendInputToConnection(wstr);
|
||||
}
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - Writes the given sequence as input to the active terminal connection,
|
||||
// Arguments:
|
||||
// - wstr: the string of characters to write to the terminal connection.
|
||||
// Return Value:
|
||||
// - <none>
|
||||
void ControlCore::SendInput(const std::wstring_view wstr)
|
||||
{
|
||||
_sendInputToConnection(wstr);
|
||||
}
|
||||
|
||||
bool ControlCore::SendCharEvent(const wchar_t ch,
|
||||
const WORD scanCode,
|
||||
const ::Microsoft::Terminal::Core::ControlKeyStates modifiers)
|
||||
@@ -464,7 +464,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
}
|
||||
if (out)
|
||||
{
|
||||
_sendInputToConnection(*out);
|
||||
SendInput(*out);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -622,7 +622,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
}
|
||||
if (out)
|
||||
{
|
||||
_sendInputToConnection(*out);
|
||||
SendInput(*out);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -641,7 +641,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
}
|
||||
if (out)
|
||||
{
|
||||
_sendInputToConnection(*out);
|
||||
SendInput(*out);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -1392,7 +1392,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
}
|
||||
|
||||
// It's important to not hold the terminal lock while calling this function as sending the data may take a long time.
|
||||
_sendInputToConnection(filtered);
|
||||
SendInput(filtered);
|
||||
|
||||
const auto lock = _terminal->LockForWriting();
|
||||
_terminal->ClearSelection();
|
||||
@@ -2083,7 +2083,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
// Sending input requires that we're unlocked, because
|
||||
// writing the input pipe may block indefinitely.
|
||||
const auto suspension = _terminal->SuspendLock();
|
||||
_sendInputToConnection(buffer);
|
||||
SendInput(buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2140,6 +2140,12 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
_terminal->Write(hstr);
|
||||
}
|
||||
|
||||
if (!_pendingResponses.empty())
|
||||
{
|
||||
_sendInputToConnection(_pendingResponses);
|
||||
_pendingResponses.clear();
|
||||
}
|
||||
|
||||
// Start the throttled update of where our hyperlinks are.
|
||||
const auto shared = _shared.lock_shared();
|
||||
if (shared->outputIdle)
|
||||
@@ -2235,20 +2241,39 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
|
||||
std::vector<winrt::hstring> commands;
|
||||
const auto bufferCommands{ textBuffer.Commands() };
|
||||
for (const auto& commandInBuffer : bufferCommands)
|
||||
{
|
||||
const auto strEnd = commandInBuffer.find_last_not_of(UNICODE_SPACE);
|
||||
|
||||
auto trimToHstring = [](const auto& s) -> winrt::hstring {
|
||||
const auto strEnd = s.find_last_not_of(UNICODE_SPACE);
|
||||
if (strEnd != std::string::npos)
|
||||
{
|
||||
const auto trimmed = commandInBuffer.substr(0, strEnd + 1);
|
||||
const auto trimmed = s.substr(0, strEnd + 1);
|
||||
return winrt::hstring{ trimmed };
|
||||
}
|
||||
return winrt::hstring{ L"" };
|
||||
};
|
||||
|
||||
commands.push_back(winrt::hstring{ trimmed });
|
||||
const auto currentCommand = _terminal->CurrentCommand();
|
||||
const auto trimmedCurrentCommand = trimToHstring(currentCommand);
|
||||
|
||||
for (const auto& commandInBuffer : bufferCommands)
|
||||
{
|
||||
if (const auto hstr{ trimToHstring(commandInBuffer) };
|
||||
(!hstr.empty() && hstr != trimmedCurrentCommand))
|
||||
{
|
||||
commands.push_back(hstr);
|
||||
}
|
||||
}
|
||||
|
||||
auto context = winrt::make_self<CommandHistoryContext>(std::move(commands));
|
||||
context->CurrentCommandline(winrt::hstring{ _terminal->CurrentCommand() });
|
||||
// If the very last thing in the list of recent commands, is exactly the
|
||||
// same as the current command, then let's not include it in the
|
||||
// history. It's literally the thing the user has typed, RIGHT now.
|
||||
if (!commands.empty() && commands.back() == trimmedCurrentCommand)
|
||||
{
|
||||
commands.pop_back();
|
||||
}
|
||||
|
||||
auto context = winrt::make_self<CommandHistoryContext>(std::move(commands));
|
||||
context->CurrentCommandline(trimmedCurrentCommand);
|
||||
return *context;
|
||||
}
|
||||
|
||||
@@ -2424,7 +2449,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
{
|
||||
// _sendInputToConnection() asserts that we aren't in focus mode,
|
||||
// but window focus events are always fine to send.
|
||||
_connection.WriteInput(*out);
|
||||
_sendInputToConnection(*out);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -307,6 +307,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
winrt::com_ptr<ControlSettings> _settings{ nullptr };
|
||||
|
||||
std::shared_ptr<::Microsoft::Terminal::Core::Terminal> _terminal{ nullptr };
|
||||
std::wstring _pendingResponses;
|
||||
|
||||
// NOTE: _renderEngine must be ordered before _renderer.
|
||||
//
|
||||
|
||||
@@ -217,6 +217,10 @@ Installieren Sie entweder die fehlende Schriftart, oder wählen Sie eine andere
|
||||
<value>Die folgenden Schriftarten wurden nicht gefunden: {0}. Installieren Sie sie, oder wählen Sie andere Schriftarten aus.</value>
|
||||
<comment>{Locked="{0}"} This is a warning dialog shown when the user selects a font that isn't installed.</comment>
|
||||
</data>
|
||||
<data name="RendererErrorMacType" xml:space="preserve">
|
||||
<value>Ihre Version von MacType ist mit dieser Anwendung nicht kompatibel. Bitte aktualisieren Sie auf Version 2023.5.31 oder höher.</value>
|
||||
<comment>{Locked="2023.5.31","MacType"}</comment>
|
||||
</data>
|
||||
<data name="RendererErrorOther" xml:space="preserve">
|
||||
<value>Unerwarteter Rendererfehler: {0:#010x} {1}</value>
|
||||
<comment>{Locked="{0:#010x}","{1}"} {0:#010x} is a placeholder for a Windows error code (e.g. 0x88985002). {1} is the corresponding message.</comment>
|
||||
|
||||
@@ -217,6 +217,10 @@ Please either install the missing font or choose another one.</value>
|
||||
<value>Unable to find the following fonts: {0}. Please either install them or choose different fonts.</value>
|
||||
<comment>{Locked="{0}"} This is a warning dialog shown when the user selects a font that isn't installed.</comment>
|
||||
</data>
|
||||
<data name="RendererErrorMacType" xml:space="preserve">
|
||||
<value>Your version of MacType is incompatible with this application. Please update to version 2023.5.31 or later.</value>
|
||||
<comment>{Locked="2023.5.31","MacType"}</comment>
|
||||
</data>
|
||||
<data name="RendererErrorOther" xml:space="preserve">
|
||||
<value>Renderer encountered an unexpected error: {0:#010x} {1}</value>
|
||||
<comment>{Locked="{0:#010x}","{1}"} {0:#010x} is a placeholder for a Windows error code (e.g. 0x88985002). {1} is the corresponding message.</comment>
|
||||
|
||||
@@ -217,6 +217,10 @@ Instale la fuente que falta o elija otra.</value>
|
||||
<value>No se pueden encontrar las siguientes fuentes: {0}. Instálelas o elija fuentes diferentes.</value>
|
||||
<comment>{Locked="{0}"} This is a warning dialog shown when the user selects a font that isn't installed.</comment>
|
||||
</data>
|
||||
<data name="RendererErrorMacType" xml:space="preserve">
|
||||
<value>Su versión de MacType no es compatible con esta aplicación. Actualice a la versión 2023.5.31 o posterior.</value>
|
||||
<comment>{Locked="2023.5.31","MacType"}</comment>
|
||||
</data>
|
||||
<data name="RendererErrorOther" xml:space="preserve">
|
||||
<value>El representador encontró un error inesperado: {0:#010x} {1}</value>
|
||||
<comment>{Locked="{0:#010x}","{1}"} {0:#010x} is a placeholder for a Windows error code (e.g. 0x88985002). {1} is the corresponding message.</comment>
|
||||
|
||||
@@ -217,6 +217,10 @@ Installez la police manquante ou choisissez-en une autre.</value>
|
||||
<value>Impossible de trouver les polices suivantes : {0}. Installez-les ou choisissez d’autres polices.</value>
|
||||
<comment>{Locked="{0}"} This is a warning dialog shown when the user selects a font that isn't installed.</comment>
|
||||
</data>
|
||||
<data name="RendererErrorMacType" xml:space="preserve">
|
||||
<value>Votre version de MacType est incompatible avec cette application. Veuillez mettre à jour la version 2023.5.31 ou une version ultérieure.</value>
|
||||
<comment>{Locked="2023.5.31","MacType"}</comment>
|
||||
</data>
|
||||
<data name="RendererErrorOther" xml:space="preserve">
|
||||
<value>Le convertisseur a rencontré une erreur inattendue : {0:#010x} {1}</value>
|
||||
<comment>{Locked="{0:#010x}","{1}"} {0:#010x} is a placeholder for a Windows error code (e.g. 0x88985002). {1} is the corresponding message.</comment>
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
<value>Riprendi</value>
|
||||
</data>
|
||||
<data name="HowToOpenRun.Text" xml:space="preserve">
|
||||
<value>CTRL+clic per aprire il collegamento</value>
|
||||
<value>CTRL+CLIC per aprire il collegamento</value>
|
||||
</data>
|
||||
<data name="TermControl_NoMatch" xml:space="preserve">
|
||||
<value>Nessun risultato</value>
|
||||
@@ -217,6 +217,10 @@ Installare il tipo di carattere mancante o sceglierne un altro.</value>
|
||||
<value>Impossibile trovare i tipi di carattere seguenti: {0}. Installarli o scegliere tipi di carattere diversi.</value>
|
||||
<comment>{Locked="{0}"} This is a warning dialog shown when the user selects a font that isn't installed.</comment>
|
||||
</data>
|
||||
<data name="RendererErrorMacType" xml:space="preserve">
|
||||
<value>La versione di MacType è incompatibile con questa applicazione. Aggiornare alla versione 2023.5.31 o successiva.</value>
|
||||
<comment>{Locked="2023.5.31","MacType"}</comment>
|
||||
</data>
|
||||
<data name="RendererErrorOther" xml:space="preserve">
|
||||
<value>Errore imprevisto del renderer: {0:#010x} {1}</value>
|
||||
<comment>{Locked="{0:#010x}","{1}"} {0:#010x} is a placeholder for a Windows error code (e.g. 0x88985002). {1} is the corresponding message.</comment>
|
||||
|
||||
@@ -217,6 +217,10 @@
|
||||
<value>次のフォントが見つかりません: {0}。インストールするか、別のフォントを選択してください。</value>
|
||||
<comment>{Locked="{0}"} This is a warning dialog shown when the user selects a font that isn't installed.</comment>
|
||||
</data>
|
||||
<data name="RendererErrorMacType" xml:space="preserve">
|
||||
<value>お使いのバージョンの MacType は、このアプリケーションと互換性がありません。バージョン 2023.5.31 以降に更新してください。</value>
|
||||
<comment>{Locked="2023.5.31","MacType"}</comment>
|
||||
</data>
|
||||
<data name="RendererErrorOther" xml:space="preserve">
|
||||
<value>レンダラーで予期しないエラーが発生しました: {0:#010x} {1}</value>
|
||||
<comment>{Locked="{0:#010x}","{1}"} {0:#010x} is a placeholder for a Windows error code (e.g. 0x88985002). {1} is the corresponding message.</comment>
|
||||
|
||||
@@ -217,6 +217,10 @@
|
||||
<value>다음 글꼴을 찾을 수 없습니다. {0}. 설치하거나 다른 글꼴을 선택하세요.</value>
|
||||
<comment>{Locked="{0}"} This is a warning dialog shown when the user selects a font that isn't installed.</comment>
|
||||
</data>
|
||||
<data name="RendererErrorMacType" xml:space="preserve">
|
||||
<value>MacType 버전이 이 애플리케이션과 호환되지 않습니다. 버전 2023.5.31 이상으로 업데이트하세요.</value>
|
||||
<comment>{Locked="2023.5.31","MacType"}</comment>
|
||||
</data>
|
||||
<data name="RendererErrorOther" xml:space="preserve">
|
||||
<value>렌더러에서 예기치 않은 오류가 발생했습니다. {0:#010x} {1}</value>
|
||||
<comment>{Locked="{0:#010x}","{1}"} {0:#010x} is a placeholder for a Windows error code (e.g. 0x88985002). {1} is the corresponding message.</comment>
|
||||
|
||||
@@ -217,6 +217,10 @@ Instale a fonte ausente ou escolha outra.</value>
|
||||
<value>Não é possível localizar as seguintes fontes: {0}. Instale-os ou escolha fontes diferentes.</value>
|
||||
<comment>{Locked="{0}"} This is a warning dialog shown when the user selects a font that isn't installed.</comment>
|
||||
</data>
|
||||
<data name="RendererErrorMacType" xml:space="preserve">
|
||||
<value>Sua versão do MacType é incompatível com este aplicativo. Atualize para a versão 2023.5.31 ou posterior.</value>
|
||||
<comment>{Locked="2023.5.31","MacType"}</comment>
|
||||
</data>
|
||||
<data name="RendererErrorOther" xml:space="preserve">
|
||||
<value>O renderizador encontrou um erro inesperado: {0:#010x} {1}</value>
|
||||
<comment>{Locked="{0:#010x}","{1}"} {0:#010x} is a placeholder for a Windows error code (e.g. 0x88985002). {1} is the corresponding message.</comment>
|
||||
|
||||
@@ -217,6 +217,10 @@
|
||||
<value>Цйǻьľė ŧò ƒіņð τнė ƒσℓľоŵíпğ ƒŏптš: {0}. Рĺёąšė èìťђėг ïŋŝţăĺℓ тħēm ôѓ ςђоōѕз ðįƒƒеřęʼnţ ƒóπţś. !!! !!! !!! !!! !!! !!! !!! !!! !!! !</value>
|
||||
<comment>{Locked="{0}"} This is a warning dialog shown when the user selects a font that isn't installed.</comment>
|
||||
</data>
|
||||
<data name="RendererErrorMacType" xml:space="preserve">
|
||||
<value>Ύοϋг νέяšîǿŋ бƒ MacType їš ìⁿçомрāţΐвŀè шιťћ тĥĩѕ ªрφℓíċąţіōņ. Рĺэаşέ űφđаτє τő νзřѕíбʼn 2023.5.31 бŗ ℓâţëґ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</value>
|
||||
<comment>{Locked="2023.5.31","MacType"}</comment>
|
||||
</data>
|
||||
<data name="RendererErrorOther" xml:space="preserve">
|
||||
<value>Гêʼnďěѓēŗ эήçομήťєřĕď åń µŋέхρэсťèð ęґяöя: {0:#010×} {1} !!! !!! !!! !!! !!! !</value>
|
||||
<comment>{Locked="{0:#010x}","{1}"} {0:#010x} is a placeholder for a Windows error code (e.g. 0x88985002). {1} is the corresponding message.</comment>
|
||||
|
||||
@@ -217,6 +217,10 @@
|
||||
<value>Цйǻьľė ŧò ƒіņð τнė ƒσℓľоŵíпğ ƒŏптš: {0}. Рĺёąšė èìťђėг ïŋŝţăĺℓ тħēm ôѓ ςђоōѕз ðįƒƒеřęʼnţ ƒóπţś. !!! !!! !!! !!! !!! !!! !!! !!! !!! !</value>
|
||||
<comment>{Locked="{0}"} This is a warning dialog shown when the user selects a font that isn't installed.</comment>
|
||||
</data>
|
||||
<data name="RendererErrorMacType" xml:space="preserve">
|
||||
<value>Ύοϋг νέяšîǿŋ бƒ MacType їš ìⁿçомрāţΐвŀè шιťћ тĥĩѕ ªрφℓíċąţіōņ. Рĺэаşέ űφđаτє τő νзřѕíбʼn 2023.5.31 бŗ ℓâţëґ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</value>
|
||||
<comment>{Locked="2023.5.31","MacType"}</comment>
|
||||
</data>
|
||||
<data name="RendererErrorOther" xml:space="preserve">
|
||||
<value>Гêʼnďěѓēŗ эήçομήťєřĕď åń µŋέхρэсťèð ęґяöя: {0:#010×} {1} !!! !!! !!! !!! !!! !</value>
|
||||
<comment>{Locked="{0:#010x}","{1}"} {0:#010x} is a placeholder for a Windows error code (e.g. 0x88985002). {1} is the corresponding message.</comment>
|
||||
|
||||
@@ -217,6 +217,10 @@
|
||||
<value>Цйǻьľė ŧò ƒіņð τнė ƒσℓľоŵíпğ ƒŏптš: {0}. Рĺёąšė èìťђėг ïŋŝţăĺℓ тħēm ôѓ ςђоōѕз ðįƒƒеřęʼnţ ƒóπţś. !!! !!! !!! !!! !!! !!! !!! !!! !!! !</value>
|
||||
<comment>{Locked="{0}"} This is a warning dialog shown when the user selects a font that isn't installed.</comment>
|
||||
</data>
|
||||
<data name="RendererErrorMacType" xml:space="preserve">
|
||||
<value>Ύοϋг νέяšîǿŋ бƒ MacType їš ìⁿçомрāţΐвŀè шιťћ тĥĩѕ ªрφℓíċąţіōņ. Рĺэаşέ űφđаτє τő νзřѕíбʼn 2023.5.31 бŗ ℓâţëґ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</value>
|
||||
<comment>{Locked="2023.5.31","MacType"}</comment>
|
||||
</data>
|
||||
<data name="RendererErrorOther" xml:space="preserve">
|
||||
<value>Гêʼnďěѓēŗ эήçομήťєřĕď åń µŋέхρэсťèð ęґяöя: {0:#010×} {1} !!! !!! !!! !!! !!! !</value>
|
||||
<comment>{Locked="{0:#010x}","{1}"} {0:#010x} is a placeholder for a Windows error code (e.g. 0x88985002). {1} is the corresponding message.</comment>
|
||||
|
||||
@@ -217,6 +217,10 @@
|
||||
<value>Не удалось найти следующие шрифты: {0}. Установите их или выберите другие шрифты.</value>
|
||||
<comment>{Locked="{0}"} This is a warning dialog shown when the user selects a font that isn't installed.</comment>
|
||||
</data>
|
||||
<data name="RendererErrorMacType" xml:space="preserve">
|
||||
<value>Эта версия MacType несовместима с этим приложением. Обновите версию до 2023.5.31 или более поздней.</value>
|
||||
<comment>{Locked="2023.5.31","MacType"}</comment>
|
||||
</data>
|
||||
<data name="RendererErrorOther" xml:space="preserve">
|
||||
<value>В обработчике произошла непредвиденная ошибка: {0:#010x} {1}</value>
|
||||
<comment>{Locked="{0:#010x}","{1}"} {0:#010x} is a placeholder for a Windows error code (e.g. 0x88985002). {1} is the corresponding message.</comment>
|
||||
|
||||
@@ -217,6 +217,10 @@
|
||||
<value>找不到以下字体: {0}。请安装它们或选择其他字体。</value>
|
||||
<comment>{Locked="{0}"} This is a warning dialog shown when the user selects a font that isn't installed.</comment>
|
||||
</data>
|
||||
<data name="RendererErrorMacType" xml:space="preserve">
|
||||
<value>你的 MacType 版本与此应用程序不兼容。请更新到版本 2023.5.31 或更高版本。</value>
|
||||
<comment>{Locked="2023.5.31","MacType"}</comment>
|
||||
</data>
|
||||
<data name="RendererErrorOther" xml:space="preserve">
|
||||
<value>呈现器遇到错误: {0:#010x} {1}</value>
|
||||
<comment>{Locked="{0:#010x}","{1}"} {0:#010x} is a placeholder for a Windows error code (e.g. 0x88985002). {1} is the corresponding message.</comment>
|
||||
|
||||
@@ -217,6 +217,10 @@
|
||||
<value>找不到下列字型: {0}。請安裝它們,或選擇其他字型。</value>
|
||||
<comment>{Locked="{0}"} This is a warning dialog shown when the user selects a font that isn't installed.</comment>
|
||||
</data>
|
||||
<data name="RendererErrorMacType" xml:space="preserve">
|
||||
<value>您的 MacType 版本與此應用程式不相容。請更新至 2023.5.31 版或更新版本。</value>
|
||||
<comment>{Locked="2023.5.31","MacType"}</comment>
|
||||
</data>
|
||||
<data name="RendererErrorOther" xml:space="preserve">
|
||||
<value>轉譯器發生意外的錯誤: {0:#010x} {1}</value>
|
||||
<comment>{Locked="{0:#010x}","{1}"} {0:#010x} is a placeholder for a Windows error code (e.g. 0x88985002). {1} is the corresponding message.</comment>
|
||||
|
||||
@@ -154,12 +154,18 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
// search box remains in Visible state (though not really *visible*) during the
|
||||
// first load. So, we only need to apply this check here (after checking that
|
||||
// we're done initializing).
|
||||
if (Visibility() == Visibility::Visible)
|
||||
if (IsOpen())
|
||||
{
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
|
||||
// Stop ongoing close animation if any
|
||||
if (CloseAnimation().GetCurrentState() == Media::Animation::ClockState::Active)
|
||||
{
|
||||
CloseAnimation().Stop();
|
||||
}
|
||||
|
||||
VisualStateManager::GoToState(*this, L"Opened", false);
|
||||
|
||||
// Call the callback only after we're in Opened state. Setting focus
|
||||
@@ -195,6 +201,11 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
}
|
||||
}
|
||||
|
||||
bool SearchBoxControl::IsOpen()
|
||||
{
|
||||
return Visibility() == Visibility::Visible && CloseAnimation().GetCurrentState() != Media::Animation::ClockState::Active;
|
||||
}
|
||||
|
||||
winrt::hstring SearchBoxControl::Text()
|
||||
{
|
||||
return TextBox().Text();
|
||||
|
||||
@@ -34,6 +34,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
void TextBoxKeyDown(const winrt::Windows::Foundation::IInspectable& /*sender*/, const winrt::Windows::UI::Xaml::Input::KeyRoutedEventArgs& e);
|
||||
void Open(std::function<void()> callback);
|
||||
void Close();
|
||||
bool IsOpen();
|
||||
|
||||
winrt::hstring Text();
|
||||
bool GoForward();
|
||||
|
||||
@@ -248,7 +248,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
dispatcher,
|
||||
TerminalWarningBellInterval,
|
||||
[weakThis = get_weak()]() {
|
||||
if (auto control{ weakThis.get() }; !control->_IsClosing())
|
||||
if (auto control{ weakThis.get() }; control && !control->_IsClosing())
|
||||
{
|
||||
control->WarningBell.raise(*control, nullptr);
|
||||
}
|
||||
@@ -258,7 +258,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
dispatcher,
|
||||
ScrollBarUpdateInterval,
|
||||
[weakThis = get_weak()](const auto& update) {
|
||||
if (auto control{ weakThis.get() }; !control->_IsClosing())
|
||||
if (auto control{ weakThis.get() }; control && !control->_IsClosing())
|
||||
{
|
||||
control->_throttledUpdateScrollbar(update);
|
||||
}
|
||||
@@ -301,7 +301,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
_originalSelectedSecondaryElements.Append(e);
|
||||
}
|
||||
ContextMenu().Closed([weakThis = get_weak()](auto&&, auto&&) {
|
||||
if (auto control{ weakThis.get() }; !control->_IsClosing())
|
||||
if (auto control{ weakThis.get() }; control && !control->_IsClosing())
|
||||
{
|
||||
const auto& menu{ control->ContextMenu() };
|
||||
menu.PrimaryCommands().Clear();
|
||||
@@ -317,7 +317,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
}
|
||||
});
|
||||
SelectionContextMenu().Closed([weakThis = get_weak()](auto&&, auto&&) {
|
||||
if (auto control{ weakThis.get() }; !control->_IsClosing())
|
||||
if (auto control{ weakThis.get() }; control && !control->_IsClosing())
|
||||
{
|
||||
const auto& menu{ control->SelectionContextMenu() };
|
||||
menu.PrimaryCommands().Clear();
|
||||
@@ -493,7 +493,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
}
|
||||
}
|
||||
|
||||
if (_searchBox && _searchBox->Visibility() == Visibility::Visible)
|
||||
if (_searchBox && _searchBox->IsOpen())
|
||||
{
|
||||
const auto core = winrt::get_self<ControlCore>(_core);
|
||||
const auto& searchMatches = core->SearchResultRows();
|
||||
@@ -538,13 +538,14 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
// but since code paths differ, extra work is required to ensure correctness.
|
||||
if (!_core.HasMultiLineSelection())
|
||||
{
|
||||
_core.SnapSearchResultToSelection(true);
|
||||
const auto selectedLine{ _core.SelectedText(true) };
|
||||
_searchBox->PopulateTextbox(selectedLine);
|
||||
}
|
||||
}
|
||||
|
||||
_searchBox->Open([weakThis = get_weak()]() {
|
||||
if (const auto self = weakThis.get(); !self->_IsClosing())
|
||||
if (const auto self = weakThis.get(); self && !self->_IsClosing())
|
||||
{
|
||||
self->_searchBox->SetFocusOnTextbox();
|
||||
self->_refreshSearch();
|
||||
@@ -554,13 +555,14 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
}
|
||||
}
|
||||
|
||||
// This is called when a Find Next/Previous Match action is triggered.
|
||||
void TermControl::SearchMatch(const bool goForward)
|
||||
{
|
||||
if (_IsClosing())
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!_searchBox || _searchBox->Visibility() != Visibility::Visible)
|
||||
if (!_searchBox || !_searchBox->IsOpen())
|
||||
{
|
||||
CreateSearchBoxControl();
|
||||
}
|
||||
@@ -597,11 +599,14 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
const bool goForward,
|
||||
const bool caseSensitive)
|
||||
{
|
||||
_handleSearchResults(_core.Search(text, goForward, caseSensitive, false));
|
||||
if (_searchBox && _searchBox->IsOpen())
|
||||
{
|
||||
_handleSearchResults(_core.Search(text, goForward, caseSensitive, false));
|
||||
}
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
// - The handler for the "search criteria changed" event. Clears selection and initiates a new search.
|
||||
// - The handler for the "search criteria changed" event. Initiates a new search.
|
||||
// Arguments:
|
||||
// - text: the text to search
|
||||
// - goForward: indicates whether the search should be performed forward (if set to true) or backward
|
||||
@@ -612,9 +617,12 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
const bool goForward,
|
||||
const bool caseSensitive)
|
||||
{
|
||||
if (_searchBox && _searchBox->Visibility() == Visibility::Visible)
|
||||
if (_searchBox && _searchBox->IsOpen())
|
||||
{
|
||||
_handleSearchResults(_core.Search(text, goForward, caseSensitive, false));
|
||||
// We only want to update the search results based on the new text. Set
|
||||
// `resetOnly` to true so we don't accidentally update the current match index.
|
||||
const auto result = _core.Search(text, goForward, caseSensitive, true);
|
||||
_handleSearchResults(result);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -632,6 +640,19 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
_searchBox->Close();
|
||||
_core.ClearSearch();
|
||||
|
||||
// Clear search highlights scroll marks (by triggering an update after closing the search box)
|
||||
if (_showMarksInScrollbar)
|
||||
{
|
||||
const auto scrollBar = ScrollBar();
|
||||
ScrollBarUpdate update{
|
||||
.newValue = scrollBar.Value(),
|
||||
.newMaximum = scrollBar.Maximum(),
|
||||
.newMinimum = scrollBar.Minimum(),
|
||||
.newViewportSize = scrollBar.ViewportSize(),
|
||||
};
|
||||
_updateScrollBar->Run(update);
|
||||
}
|
||||
|
||||
// Set focus back to terminal control
|
||||
this->Focus(FocusState::Programmatic);
|
||||
}
|
||||
@@ -653,11 +674,14 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
// terminal.
|
||||
co_await wil::resume_foreground(Dispatcher());
|
||||
|
||||
_core.UpdateSettings(settings, unfocusedAppearance);
|
||||
if (auto strongThis{ weakThis.get() })
|
||||
{
|
||||
_core.UpdateSettings(settings, unfocusedAppearance);
|
||||
|
||||
_UpdateSettingsFromUIThread();
|
||||
_UpdateSettingsFromUIThread();
|
||||
|
||||
_UpdateAppearanceFromUIThread(_focused ? _core.FocusedAppearance() : _core.UnfocusedAppearance());
|
||||
_UpdateAppearanceFromUIThread(_focused ? _core.FocusedAppearance() : _core.UnfocusedAppearance());
|
||||
}
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
@@ -666,10 +690,15 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
// - newAppearance: the new appearance to set
|
||||
winrt::fire_and_forget TermControl::UpdateAppearance(IControlAppearance newAppearance)
|
||||
{
|
||||
auto weakThis{ get_weak() };
|
||||
|
||||
// Dispatch a call to the UI thread
|
||||
co_await wil::resume_foreground(Dispatcher());
|
||||
|
||||
_UpdateAppearanceFromUIThread(newAppearance);
|
||||
if (auto strongThis{ weakThis.get() })
|
||||
{
|
||||
_UpdateAppearanceFromUIThread(newAppearance);
|
||||
}
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
@@ -1055,8 +1084,11 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
// MSFT 33353327: We're purposefully not using _initializedTerminal to ensure we're fully initialized.
|
||||
// Doing so makes us return nullptr when XAML requests an automation peer.
|
||||
// Instead, we need to give XAML an automation peer, then fix it later.
|
||||
if (!_IsClosing())
|
||||
if (!_IsClosing() && !_detached)
|
||||
{
|
||||
// It's unexpected that interactivity is null even when we're not closing or in detached state.
|
||||
THROW_HR_IF_NULL(E_UNEXPECTED, _interactivity);
|
||||
|
||||
// create a custom automation peer with this code pattern:
|
||||
// (https://docs.microsoft.com/en-us/windows/uwp/design/accessibility/custom-automation-peers)
|
||||
if (const auto& interactivityAutoPeer{ _interactivity.OnCreateAutomationPeer() })
|
||||
@@ -1120,7 +1152,9 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
co_return;
|
||||
}
|
||||
|
||||
const auto hr = args.Result();
|
||||
// HRESULT is a signed 32-bit integer which would result in a hex output like "-0x7766FFF4",
|
||||
// but canonically HRESULTs are displayed unsigned as "0x8899000C". See GH#11556.
|
||||
const auto hr = std::bit_cast<uint32_t>(args.Result());
|
||||
const auto parameter = args.Parameter();
|
||||
winrt::hstring message;
|
||||
|
||||
@@ -1136,6 +1170,9 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
case DWRITE_E_NOFONT:
|
||||
message = winrt::hstring{ fmt::format(std::wstring_view{ RS_(L"RendererErrorFontNotFound") }, parameter) };
|
||||
break;
|
||||
case ATLAS_ENGINE_ERROR_MAC_TYPE:
|
||||
message = RS_(L"RendererErrorMacType");
|
||||
break;
|
||||
default:
|
||||
{
|
||||
wchar_t buf[512];
|
||||
@@ -1373,61 +1410,8 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
// - Whether the key was handled.
|
||||
bool TermControl::OnDirectKeyEvent(const uint32_t vkey, const uint8_t scanCode, const bool down)
|
||||
{
|
||||
// Short-circuit isReadOnly check to avoid warning dialog
|
||||
if (_core.IsInReadOnlyMode())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
const auto modifiers{ _GetPressedModifierKeys() };
|
||||
auto handled = false;
|
||||
|
||||
if (vkey == VK_MENU && !down)
|
||||
{
|
||||
// Manually generate an Alt KeyUp event into the key bindings or terminal.
|
||||
// This is required as part of GH#6421.
|
||||
(void)_TrySendKeyEvent(VK_MENU, scanCode, modifiers, false);
|
||||
handled = true;
|
||||
}
|
||||
else if ((vkey == VK_F7 || vkey == VK_SPACE) && down)
|
||||
{
|
||||
// Manually generate an F7 event into the key bindings or terminal.
|
||||
// This is required as part of GH#638.
|
||||
// Or do so for alt+space; only send to terminal when explicitly unbound
|
||||
// That is part of #GH7125
|
||||
auto bindings{ _core.Settings().KeyBindings() };
|
||||
auto isUnbound = false;
|
||||
const KeyChord kc = {
|
||||
modifiers.IsCtrlPressed(),
|
||||
modifiers.IsAltPressed(),
|
||||
modifiers.IsShiftPressed(),
|
||||
modifiers.IsWinPressed(),
|
||||
gsl::narrow_cast<WORD>(vkey),
|
||||
0
|
||||
};
|
||||
|
||||
if (bindings)
|
||||
{
|
||||
handled = bindings.TryKeyChord(kc);
|
||||
|
||||
if (!handled)
|
||||
{
|
||||
isUnbound = bindings.IsKeyChordExplicitlyUnbound(kc);
|
||||
}
|
||||
}
|
||||
|
||||
const auto sendToTerminal = vkey == VK_F7 || (vkey == VK_SPACE && isUnbound);
|
||||
|
||||
if (!handled && sendToTerminal)
|
||||
{
|
||||
// _TrySendKeyEvent pretends it didn't handle F7 for some unknown reason.
|
||||
(void)_TrySendKeyEvent(gsl::narrow_cast<WORD>(vkey), scanCode, modifiers, true);
|
||||
// GH#6438: Note that we're _not_ sending the key up here - that'll
|
||||
// get passed through XAML to our KeyUp handler normally.
|
||||
handled = true;
|
||||
}
|
||||
}
|
||||
return handled;
|
||||
return _KeyHandler(gsl::narrow_cast<WORD>(vkey), gsl::narrow_cast<WORD>(scanCode), modifiers, down);
|
||||
}
|
||||
|
||||
void TermControl::_KeyDownHandler(const winrt::Windows::Foundation::IInspectable& /*sender*/,
|
||||
@@ -1444,13 +1428,6 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
|
||||
void TermControl::_KeyHandler(const Input::KeyRoutedEventArgs& e, const bool keyDown)
|
||||
{
|
||||
// If the current focused element is a child element of searchbox,
|
||||
// we do not send this event up to terminal
|
||||
if (_searchBox && _searchBox->ContainsFocus())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const auto keyStatus = e.KeyStatus();
|
||||
const auto vkey = gsl::narrow_cast<WORD>(e.OriginalKey());
|
||||
const auto scanCode = gsl::narrow_cast<WORD>(keyStatus.ScanCode);
|
||||
@@ -1461,6 +1438,18 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
modifiers |= ControlKeyStates::EnhancedKey;
|
||||
}
|
||||
|
||||
e.Handled(_KeyHandler(vkey, scanCode, modifiers, keyDown));
|
||||
}
|
||||
|
||||
bool TermControl::_KeyHandler(WORD vkey, WORD scanCode, ControlKeyStates modifiers, bool keyDown)
|
||||
{
|
||||
// If the current focused element is a child element of searchbox,
|
||||
// we do not send this event up to terminal
|
||||
if (_searchBox && _searchBox->ContainsFocus())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// GH#11076:
|
||||
// For some weird reason we sometimes receive a WM_KEYDOWN
|
||||
// message without vkey or scanCode if a user drags a tab.
|
||||
@@ -1469,8 +1458,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
// accidental insertion of invalid KeyChords into classes like ActionMap.
|
||||
if (!vkey && !scanCode)
|
||||
{
|
||||
e.Handled(true);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Mark the event as handled and do nothing if we're closing, or the key
|
||||
@@ -1483,26 +1471,169 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
// about.
|
||||
if (_IsClosing() || vkey == VK_LWIN || vkey == VK_RWIN)
|
||||
{
|
||||
e.Handled(true);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Short-circuit isReadOnly check to avoid warning dialog
|
||||
if (_core.IsInReadOnlyMode())
|
||||
{
|
||||
e.Handled(!keyDown || _TryHandleKeyBinding(vkey, scanCode, modifiers));
|
||||
return;
|
||||
return !keyDown || _TryHandleKeyBinding(vkey, scanCode, modifiers);
|
||||
}
|
||||
|
||||
// Alt-Numpad# input will send us a character once the user releases
|
||||
// Alt, so we should be ignoring the individual keydowns. The character
|
||||
// will be sent through the TSFInputControl. See GH#1401 for more
|
||||
// details
|
||||
if (modifiers.IsAltPressed() && !modifiers.IsCtrlPressed() &&
|
||||
(vkey >= VK_NUMPAD0 && vkey <= VK_NUMPAD9))
|
||||
// Our custom TSF input control doesn't receive Alt+Numpad inputs,
|
||||
// and we don't receive any via WM_CHAR as a xaml island app either.
|
||||
// So, we simply implement our own Alt-Numpad handling here.
|
||||
//
|
||||
// This handles the case where the Alt key is released.
|
||||
// We'll flush any ongoing composition in that case.
|
||||
if (vkey == VK_MENU && !keyDown && _altNumpadState.active)
|
||||
{
|
||||
e.Handled(true);
|
||||
return;
|
||||
auto& s = _altNumpadState;
|
||||
auto encoding = s.encoding;
|
||||
wchar_t buf[4]{};
|
||||
size_t buf_len = 0;
|
||||
bool handled = true;
|
||||
|
||||
if (encoding == AltNumpadEncoding::Unicode)
|
||||
{
|
||||
// UTF-32 -> UTF-16
|
||||
if (s.accumulator == 0)
|
||||
{
|
||||
// If the user pressed Alt + VK_ADD, then released Alt, they probably didn't intend to insert a numpad character at all.
|
||||
// Send any accumulated key events instead.
|
||||
for (auto&& e : _altNumpadState.cachedKeyEvents)
|
||||
{
|
||||
handled = handled && _TrySendKeyEvent(e.vkey, e.scanCode, e.modifiers, e.keyDown);
|
||||
}
|
||||
// Send the alt keyup we are currently processing
|
||||
handled = handled && _TrySendKeyEvent(vkey, scanCode, modifiers, keyDown);
|
||||
// do not accumulate into the buffer
|
||||
}
|
||||
else if (s.accumulator <= 0xffff)
|
||||
{
|
||||
buf[buf_len++] = static_cast<uint16_t>(s.accumulator);
|
||||
}
|
||||
else
|
||||
{
|
||||
buf[buf_len++] = static_cast<uint16_t>((s.accumulator >> 10) + 0xd7c0);
|
||||
buf[buf_len++] = static_cast<uint16_t>((s.accumulator & 0x3ff) | 0xdc00);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const auto ansi = encoding == AltNumpadEncoding::ANSI;
|
||||
const auto acp = GetACP();
|
||||
auto codepage = ansi ? acp : CP_OEMCP;
|
||||
|
||||
// Alt+Numpad inputs are always a single codepoint, be it UTF-32 or ANSI.
|
||||
// Since DBCS code pages by definition are >1 codepoint, we can't encode those.
|
||||
// Traditionally, the OS uses the Latin1 or IBM code page instead.
|
||||
if (acp == CP_JAPANESE ||
|
||||
acp == CP_CHINESE_SIMPLIFIED ||
|
||||
acp == CP_KOREAN ||
|
||||
acp == CP_CHINESE_TRADITIONAL ||
|
||||
acp == CP_UTF8)
|
||||
{
|
||||
codepage = ansi ? 1252 : 437;
|
||||
}
|
||||
|
||||
// The OS code seemed to also simply cut off the last byte in the accumulator.
|
||||
const auto ch = gsl::narrow_cast<char>(s.accumulator & 0xff);
|
||||
const auto len = MultiByteToWideChar(codepage, 0, &ch, 1, &buf[0], 2);
|
||||
buf_len = gsl::narrow_cast<size_t>(std::max(0, len));
|
||||
}
|
||||
|
||||
if (buf_len != 0)
|
||||
{
|
||||
// WinRT always needs null-terminated strings, because HSTRING is dumb.
|
||||
// If it encounters a string that isn't, cppwinrt will abort().
|
||||
// It should already be null-terminated, but let's make sure to not crash.
|
||||
buf[buf_len] = L'\0';
|
||||
_core.SendInput(std::wstring_view{ &buf[0], buf_len });
|
||||
}
|
||||
|
||||
s = {};
|
||||
return handled;
|
||||
}
|
||||
// As a continuation of the above, this handles the key-down case.
|
||||
if (modifiers.IsAltPressed())
|
||||
{
|
||||
// The OS code seems to reset the composition if shift is pressed, but I couldn't
|
||||
// figure out how exactly it worked. We'll simply ignore any such inputs.
|
||||
static constexpr DWORD permittedModifiers =
|
||||
RIGHT_ALT_PRESSED |
|
||||
LEFT_ALT_PRESSED |
|
||||
NUMLOCK_ON |
|
||||
SCROLLLOCK_ON |
|
||||
CAPSLOCK_ON;
|
||||
|
||||
if ((modifiers.Value() & ~permittedModifiers) == 0)
|
||||
{
|
||||
auto& s = _altNumpadState;
|
||||
|
||||
if (keyDown)
|
||||
{
|
||||
if (vkey == VK_ADD)
|
||||
{
|
||||
// Alt '+' <number> is used to input Unicode code points.
|
||||
// Every time you press + it resets the entire state
|
||||
// in the original OS implementation as well.
|
||||
s.encoding = AltNumpadEncoding::Unicode;
|
||||
s.accumulator = 0;
|
||||
s.active = true;
|
||||
}
|
||||
else if (vkey == VK_NUMPAD0 && s.encoding == AltNumpadEncoding::OEM && s.accumulator == 0)
|
||||
{
|
||||
// Alt '0' <number> is used to input ANSI code points.
|
||||
// Otherwise, they're OEM codepoints.
|
||||
s.encoding = AltNumpadEncoding::ANSI;
|
||||
s.active = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Otherwise, append the pressed key to the accumulator.
|
||||
const uint32_t base = s.encoding == AltNumpadEncoding::Unicode ? 16 : 10;
|
||||
uint32_t add = 0xffffff;
|
||||
|
||||
if (vkey >= VK_NUMPAD0 && vkey <= VK_NUMPAD9)
|
||||
{
|
||||
add = vkey - VK_NUMPAD0;
|
||||
}
|
||||
else if (vkey >= 'A' && vkey <= 'F')
|
||||
{
|
||||
add = vkey - 'A' + 10;
|
||||
}
|
||||
|
||||
// Pressing Alt + <not a number> should not activate the Alt+Numpad input, however.
|
||||
if (add < base)
|
||||
{
|
||||
s.accumulator = std::min(s.accumulator * base + add, 0x10FFFFu);
|
||||
s.active = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If someone pressed Alt + <not a number>, we'll skip the early
|
||||
// return and send the Alt key combination as per usual.
|
||||
if (s.active)
|
||||
{
|
||||
// Cache it in case we have to emit it after alt is released
|
||||
_altNumpadState.cachedKeyEvents.emplace_back(vkey, scanCode, modifiers, keyDown);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Unless I didn't code the above correctly, active == false should imply
|
||||
// that _altNumpadState is in the (default constructed) base state.
|
||||
assert(s.encoding == AltNumpadEncoding::OEM);
|
||||
assert(s.accumulator == 0);
|
||||
}
|
||||
}
|
||||
else if (_altNumpadState.active)
|
||||
{
|
||||
// If the user Alt+Tabbed in the middle of an Alt+Numpad sequence, we'll not receive a key-up event for
|
||||
// the Alt key. There are several ways to detect this. Here, we simply check if the user typed another
|
||||
// character, it's not an alt-up event, and we still have an ongoing composition.
|
||||
_altNumpadState = {};
|
||||
}
|
||||
|
||||
// GH#2235: Terminal::Settings hasn't been modified to differentiate
|
||||
@@ -1518,20 +1649,18 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
keyDown &&
|
||||
_TryHandleKeyBinding(vkey, scanCode, modifiers))
|
||||
{
|
||||
e.Handled(true);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (_TrySendKeyEvent(vkey, scanCode, modifiers, keyDown))
|
||||
{
|
||||
e.Handled(true);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
// Manually prevent keyboard navigation with tab. We want to send tab to
|
||||
// the terminal, and we don't want to be able to escape focus of the
|
||||
// control with tab.
|
||||
e.Handled(vkey == VK_TAB);
|
||||
return vkey == VK_TAB;
|
||||
}
|
||||
|
||||
// Method Description:
|
||||
@@ -3588,7 +3717,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
|
||||
void TermControl::_refreshSearch()
|
||||
{
|
||||
if (!_searchBox || _searchBox->Visibility() != Visibility::Visible)
|
||||
if (!_searchBox || !_searchBox->IsOpen())
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -3611,7 +3740,15 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
return;
|
||||
}
|
||||
|
||||
_searchBox->SetStatus(results.TotalMatches, results.CurrentMatch);
|
||||
// Only show status when we have a search term
|
||||
if (_searchBox->Text().empty())
|
||||
{
|
||||
_searchBox->ClearStatus();
|
||||
}
|
||||
else
|
||||
{
|
||||
_searchBox->SetStatus(results.TotalMatches, results.CurrentMatch);
|
||||
}
|
||||
|
||||
if (results.SearchInvalidated)
|
||||
{
|
||||
|
||||
@@ -239,6 +239,31 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
TsfDataProvider _tsfDataProvider{ this };
|
||||
winrt::com_ptr<SearchBoxControl> _searchBox;
|
||||
|
||||
enum class AltNumpadEncoding
|
||||
{
|
||||
OEM,
|
||||
ANSI,
|
||||
Unicode,
|
||||
};
|
||||
struct AltNumpadState
|
||||
{
|
||||
struct CachedKey
|
||||
{
|
||||
WORD vkey;
|
||||
WORD scanCode;
|
||||
::Microsoft::Terminal::Core::ControlKeyStates modifiers;
|
||||
bool keyDown;
|
||||
};
|
||||
AltNumpadEncoding encoding = AltNumpadEncoding::OEM;
|
||||
uint32_t accumulator = 0;
|
||||
// Checking for accumulator != 0 to see if we have an ongoing Alt+Numpad composition is insufficient.
|
||||
// The state can be active, while the accumulator is 0, if the user pressed Alt+Numpad0 which enabled
|
||||
// the OEM encoding mode (= active), and then pressed Numpad0 again (= accumulator is still 0).
|
||||
bool active = false;
|
||||
til::small_vector<CachedKey, 4> cachedKeyEvents;
|
||||
};
|
||||
AltNumpadState _altNumpadState;
|
||||
|
||||
bool _closing{ false };
|
||||
bool _focused{ false };
|
||||
bool _initializedTerminal{ false };
|
||||
@@ -361,6 +386,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation
|
||||
void _UpdateAutoScroll(const Windows::Foundation::IInspectable& sender, const Windows::Foundation::IInspectable& e);
|
||||
|
||||
void _KeyHandler(const Windows::UI::Xaml::Input::KeyRoutedEventArgs& e, const bool keyDown);
|
||||
bool _KeyHandler(WORD vkey, WORD scanCode, ::Microsoft::Terminal::Core::ControlKeyStates modifiers, bool keyDown);
|
||||
static ::Microsoft::Terminal::Core::ControlKeyStates _GetPressedModifierKeys() noexcept;
|
||||
bool _TryHandleKeyBinding(const WORD vkey, const WORD scanCode, ::Microsoft::Terminal::Core::ControlKeyStates modifiers) const;
|
||||
static void _ClearKeyboardState(const WORD vkey, const WORD scanCode) noexcept;
|
||||
|
||||
@@ -497,6 +497,10 @@ std::wstring Terminal::GetHyperlinkAtBufferPosition(const til::point bufferPos)
|
||||
result = GetHyperlinkIntervalFromViewportPosition(viewportPos);
|
||||
if (result.has_value())
|
||||
{
|
||||
// GetPlainText and _ConvertToBufferCell work with inclusive coordinates, but interval's
|
||||
// stop point is (horizontally) exclusive, so let's just update it.
|
||||
result->stop.x--;
|
||||
|
||||
result->start = _ConvertToBufferCell(result->start);
|
||||
result->stop = _ConvertToBufferCell(result->stop);
|
||||
}
|
||||
@@ -1405,6 +1409,11 @@ PointTree Terminal::_getPatterns(til::CoordType beg, til::CoordType end) const
|
||||
LR"(\b(?:https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|$!:,.;]*[A-Za-z0-9+&@#/%=~_|$])",
|
||||
};
|
||||
|
||||
if (!_detectURLs)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
auto text = ICU::UTextFromTextBuffer(_activeBuffer(), beg, end + 1);
|
||||
UErrorCode status = U_ZERO_ERROR;
|
||||
PointTree::interval_vector intervals;
|
||||
|
||||
@@ -278,11 +278,13 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
|
||||
// Check for this special case:
|
||||
// we're changing the key chord,
|
||||
// but the new key chord is already in use
|
||||
bool conflictFound{ false };
|
||||
if (isNewAction || args.OldKeys().Modifiers() != args.NewKeys().Modifiers() || args.OldKeys().Vkey() != args.NewKeys().Vkey())
|
||||
{
|
||||
const auto& conflictingCmd{ _Settings.ActionMap().GetActionByKeyChord(args.NewKeys()) };
|
||||
if (conflictingCmd)
|
||||
{
|
||||
conflictFound = true;
|
||||
// We're about to overwrite another key chord.
|
||||
// Display a confirmation dialog.
|
||||
TextBlock errorMessageTB{};
|
||||
@@ -324,13 +326,18 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
|
||||
}
|
||||
}
|
||||
|
||||
// update settings model and view model
|
||||
applyChangesToSettingsModel();
|
||||
// if there was a conflict, the flyout we created will handle whether changes need to be propagated
|
||||
// otherwise, go ahead and apply the changes
|
||||
if (!conflictFound)
|
||||
{
|
||||
// update settings model and view model
|
||||
applyChangesToSettingsModel();
|
||||
|
||||
// We NEED to toggle the edit mode here,
|
||||
// so that if nothing changed, we still exit
|
||||
// edit mode.
|
||||
senderVM.ToggleEditMode();
|
||||
// We NEED to toggle the edit mode here,
|
||||
// so that if nothing changed, we still exit
|
||||
// edit mode.
|
||||
senderVM.ToggleEditMode();
|
||||
}
|
||||
}
|
||||
|
||||
void ActionsViewModel::_KeyBindingViewModelDeleteNewlyAddedKeyBindingHandler(const Editor::KeyBindingViewModel& senderVM, const IInspectable& /*args*/)
|
||||
|
||||
@@ -895,6 +895,9 @@
|
||||
<value>Schriftart</value>
|
||||
<comment>Name for a control to select the font for text in the app.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFace.HelpText" xml:space="preserve">
|
||||
<value>Sie können mehrere Schriftarten verwenden, indem Sie sie durch ein ASCII-Komma voneinander trennen.</value>
|
||||
</data>
|
||||
<data name="Profile_FontSize.Header" xml:space="preserve">
|
||||
<value>Schriftgrad</value>
|
||||
<comment>Header for a control to determine the size of the text in the app.</comment>
|
||||
@@ -928,7 +931,7 @@
|
||||
<comment>The main label of a toggle. When enabled, certain characters (glyphs) are replaced with better looking ones.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableBuiltinGlyphs.HelpText" xml:space="preserve">
|
||||
<value>Wenn diese Option aktiviert ist, zeichnet das Terminal benutzerdefinierte Glyphen für Blockelement- und Feldzeichnungszeichen, anstatt die Schriftart zu verwenden. Dieses Feature funktioniert nur, wenn GPU-Beschleunigung verfügbar ist.</value>
|
||||
<value>Wenn diese Option aktiviert ist, zeichnet das Terminal benutzerdefinierte Glyphen für Blockelement- und Rahmenelementzeichen, anstatt die Schriftart zu verwenden.</value>
|
||||
<comment>A longer description of the "Profile_EnableBuiltinGlyphs" toggle. "glyphs", "block element" and "box drawing characters" are technical terms from the Unicode specification.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableColorGlyphs.Header" xml:space="preserve">
|
||||
|
||||
@@ -895,6 +895,9 @@
|
||||
<value>Font face</value>
|
||||
<comment>Name for a control to select the font for text in the app.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFace.HelpText" xml:space="preserve">
|
||||
<value>You can use multiple fonts by separating them with an ASCII comma.</value>
|
||||
</data>
|
||||
<data name="Profile_FontSize.Header" xml:space="preserve">
|
||||
<value>Font size</value>
|
||||
<comment>Header for a control to determine the size of the text in the app.</comment>
|
||||
@@ -928,7 +931,7 @@
|
||||
<comment>The main label of a toggle. When enabled, certain characters (glyphs) are replaced with better looking ones.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableBuiltinGlyphs.HelpText" xml:space="preserve">
|
||||
<value>When enabled, the terminal draws custom glyphs for block element and box drawing characters instead of using the font. This feature only works when GPU Acceleration is available.</value>
|
||||
<value>When enabled, the terminal draws custom glyphs for block element and box drawing characters instead of using the font.</value>
|
||||
<comment>A longer description of the "Profile_EnableBuiltinGlyphs" toggle. "glyphs", "block element" and "box drawing characters" are technical terms from the Unicode specification.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableColorGlyphs.Header" xml:space="preserve">
|
||||
|
||||
@@ -733,10 +733,16 @@
|
||||
<value>Examinar...</value>
|
||||
<comment>Button label that opens a file picker in a new window. The "..." is standard to mean it will open a new window.</comment>
|
||||
</data>
|
||||
<data name="Profile_AddFontAxisButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Agregar nuevo eje de fuente</value>
|
||||
</data>
|
||||
<data name="Profile_AddNewFontAxis.Text" xml:space="preserve">
|
||||
<value>Agregar nuevo</value>
|
||||
<comment>Button label that adds a new font axis for the current font.</comment>
|
||||
</data>
|
||||
<data name="Profile_AddFontFeatureButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Agregar nueva característica de fuente</value>
|
||||
</data>
|
||||
<data name="Profile_AddNewFontFeature.Text" xml:space="preserve">
|
||||
<value>Agregar nuevo</value>
|
||||
<comment>Button label that adds a new font feature for the current font.</comment>
|
||||
@@ -889,6 +895,9 @@
|
||||
<value>Tipo de fuente</value>
|
||||
<comment>Name for a control to select the font for text in the app.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFace.HelpText" xml:space="preserve">
|
||||
<value>Puede usar varias fuentes separándolas con una coma ASCII.</value>
|
||||
</data>
|
||||
<data name="Profile_FontSize.Header" xml:space="preserve">
|
||||
<value>Tamaño de la fuente</value>
|
||||
<comment>Header for a control to determine the size of the text in the app.</comment>
|
||||
@@ -922,7 +931,7 @@
|
||||
<comment>The main label of a toggle. When enabled, certain characters (glyphs) are replaced with better looking ones.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableBuiltinGlyphs.HelpText" xml:space="preserve">
|
||||
<value>Cuando está habilitado, el terminal dibuja glifos personalizados para los caracteres de dibujo de elementos de bloque y cuadros, en lugar de usar la fuente. Esta característica solo funciona cuando la aceleración de GPU está disponible.</value>
|
||||
<value>Cuando está habilitado, el terminal dibuja glifos personalizados para los caracteres de dibujo de elementos de bloque y cuadros, en lugar de usar la fuente.</value>
|
||||
<comment>A longer description of the "Profile_EnableBuiltinGlyphs" toggle. "glyphs", "block element" and "box drawing characters" are technical terms from the Unicode specification.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableColorGlyphs.Header" xml:space="preserve">
|
||||
|
||||
@@ -895,6 +895,9 @@
|
||||
<value>Type de police</value>
|
||||
<comment>Name for a control to select the font for text in the app.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFace.HelpText" xml:space="preserve">
|
||||
<value>Vous pouvez utiliser plusieurs polices en les séparant par une virgule ASCII.</value>
|
||||
</data>
|
||||
<data name="Profile_FontSize.Header" xml:space="preserve">
|
||||
<value>Taille de police</value>
|
||||
<comment>Header for a control to determine the size of the text in the app.</comment>
|
||||
@@ -928,7 +931,7 @@
|
||||
<comment>The main label of a toggle. When enabled, certain characters (glyphs) are replaced with better looking ones.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableBuiltinGlyphs.HelpText" xml:space="preserve">
|
||||
<value>Lorsque cette option est activée, le terminal dessine des glyphes personnalisés pour les éléments de bloc et les caractères de dessin de boîte au lieu d’utiliser la police. Cette fonctionnalité ne fonctionne que lorsque l’accélération GPU est disponible.</value>
|
||||
<value>Lorsque cette option est activée, le terminal trace des glyphes personnalisés pour les éléments de bloc et pour les caractères de dessin de boîte au lieu d'utiliser la police de caractère.</value>
|
||||
<comment>A longer description of the "Profile_EnableBuiltinGlyphs" toggle. "glyphs", "block element" and "box drawing characters" are technical terms from the Unicode specification.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableColorGlyphs.Header" xml:space="preserve">
|
||||
|
||||
@@ -733,10 +733,16 @@
|
||||
<value>Sfoglia...</value>
|
||||
<comment>Button label that opens a file picker in a new window. The "..." is standard to mean it will open a new window.</comment>
|
||||
</data>
|
||||
<data name="Profile_AddFontAxisButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Aggiungi nuovo asse dei tipi di carattere</value>
|
||||
</data>
|
||||
<data name="Profile_AddNewFontAxis.Text" xml:space="preserve">
|
||||
<value>Aggiungi nuovo</value>
|
||||
<comment>Button label that adds a new font axis for the current font.</comment>
|
||||
</data>
|
||||
<data name="Profile_AddFontFeatureButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Aggiungi nuova funzionalità dei tipi di carattere</value>
|
||||
</data>
|
||||
<data name="Profile_AddNewFontFeature.Text" xml:space="preserve">
|
||||
<value>Aggiungi nuovo</value>
|
||||
<comment>Button label that adds a new font feature for the current font.</comment>
|
||||
@@ -889,6 +895,9 @@
|
||||
<value>Tipo di carattere</value>
|
||||
<comment>Name for a control to select the font for text in the app.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFace.HelpText" xml:space="preserve">
|
||||
<value>Puoi usare più tipi di carattere separandoli con una virgola ASCII.</value>
|
||||
</data>
|
||||
<data name="Profile_FontSize.Header" xml:space="preserve">
|
||||
<value>Dimensioni del carattere</value>
|
||||
<comment>Header for a control to determine the size of the text in the app.</comment>
|
||||
@@ -922,7 +931,7 @@
|
||||
<comment>The main label of a toggle. When enabled, certain characters (glyphs) are replaced with better looking ones.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableBuiltinGlyphs.HelpText" xml:space="preserve">
|
||||
<value>Se abilitata, il terminale disegna glifi personalizzati per i caratteri di disegno a blocchi di elementi e caselle anziché usare il tipo di carattere. Questa funzionalità funziona solo quando è disponibile l'accelerazione GPU.</value>
|
||||
<value>Se abilitato, il terminale disegna glifi personalizzati per i caratteri di disegno a blocchi di elementi e caselle anziché usare il tipo di carattere.</value>
|
||||
<comment>A longer description of the "Profile_EnableBuiltinGlyphs" toggle. "glyphs", "block element" and "box drawing characters" are technical terms from the Unicode specification.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableColorGlyphs.Header" xml:space="preserve">
|
||||
|
||||
@@ -733,10 +733,16 @@
|
||||
<value>参照...</value>
|
||||
<comment>Button label that opens a file picker in a new window. The "..." is standard to mean it will open a new window.</comment>
|
||||
</data>
|
||||
<data name="Profile_AddFontAxisButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>新しいフォント軸の追加</value>
|
||||
</data>
|
||||
<data name="Profile_AddNewFontAxis.Text" xml:space="preserve">
|
||||
<value>新規追加</value>
|
||||
<comment>Button label that adds a new font axis for the current font.</comment>
|
||||
</data>
|
||||
<data name="Profile_AddFontFeatureButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>新しいフォント機能の追加</value>
|
||||
</data>
|
||||
<data name="Profile_AddNewFontFeature.Text" xml:space="preserve">
|
||||
<value>新規追加</value>
|
||||
<comment>Button label that adds a new font feature for the current font.</comment>
|
||||
@@ -889,6 +895,9 @@
|
||||
<value>フォント フェイス</value>
|
||||
<comment>Name for a control to select the font for text in the app.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFace.HelpText" xml:space="preserve">
|
||||
<value>複数のフォントを使用するには、複数のフォントを ASCII コンマで区切ります。</value>
|
||||
</data>
|
||||
<data name="Profile_FontSize.Header" xml:space="preserve">
|
||||
<value>フォント サイズ</value>
|
||||
<comment>Header for a control to determine the size of the text in the app.</comment>
|
||||
@@ -922,7 +931,7 @@
|
||||
<comment>The main label of a toggle. When enabled, certain characters (glyphs) are replaced with better looking ones.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableBuiltinGlyphs.HelpText" xml:space="preserve">
|
||||
<value>有効にすると、ターミナルは、フォントを使用する代わりに、ブロック要素とボックス描画文字のカスタム グリフを描画します。この機能は、GPU アクセラレーションが使用可能な場合にのみ機能します。</value>
|
||||
<value>有効にすると、ターミナルは、フォントを使用する代わりに、ブロック要素とボックス描画文字のカスタム グリフを描画します。</value>
|
||||
<comment>A longer description of the "Profile_EnableBuiltinGlyphs" toggle. "glyphs", "block element" and "box drawing characters" are technical terms from the Unicode specification.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableColorGlyphs.Header" xml:space="preserve">
|
||||
|
||||
@@ -733,10 +733,16 @@
|
||||
<value>찾아보기...</value>
|
||||
<comment>Button label that opens a file picker in a new window. The "..." is standard to mean it will open a new window.</comment>
|
||||
</data>
|
||||
<data name="Profile_AddFontAxisButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>새 글꼴 추가 축</value>
|
||||
</data>
|
||||
<data name="Profile_AddNewFontAxis.Text" xml:space="preserve">
|
||||
<value>새로 추가</value>
|
||||
<comment>Button label that adds a new font axis for the current font.</comment>
|
||||
</data>
|
||||
<data name="Profile_AddFontFeatureButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>새 글꼴 추가 기능</value>
|
||||
</data>
|
||||
<data name="Profile_AddNewFontFeature.Text" xml:space="preserve">
|
||||
<value>새로 추가</value>
|
||||
<comment>Button label that adds a new font feature for the current font.</comment>
|
||||
@@ -889,6 +895,9 @@
|
||||
<value>글꼴</value>
|
||||
<comment>Name for a control to select the font for text in the app.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFace.HelpText" xml:space="preserve">
|
||||
<value>여러 글꼴을 ASCII 쉼표로 구분하여 사용할 수 있습니다.</value>
|
||||
</data>
|
||||
<data name="Profile_FontSize.Header" xml:space="preserve">
|
||||
<value>글꼴 크기</value>
|
||||
<comment>Header for a control to determine the size of the text in the app.</comment>
|
||||
@@ -922,7 +931,7 @@
|
||||
<comment>The main label of a toggle. When enabled, certain characters (glyphs) are replaced with better looking ones.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableBuiltinGlyphs.HelpText" xml:space="preserve">
|
||||
<value>사용하도록 설정하면 터미널은 글꼴을 사용하는 대신 블록 요소 및 상자 그리기 문자에 대한 사용자 지정 문자 모양을 그립니다. 이 기능은 GPU 가속을 사용할 수 있는 경우에만 작동합니다.</value>
|
||||
<value>사용하도록 설정하면 터미널은 글꼴을 사용하는 대신 블록 요소 및 상자 그리기 문자에 대한 사용자 지정 문자 모양을 그립니다.</value>
|
||||
<comment>A longer description of the "Profile_EnableBuiltinGlyphs" toggle. "glyphs", "block element" and "box drawing characters" are technical terms from the Unicode specification.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableColorGlyphs.Header" xml:space="preserve">
|
||||
@@ -1294,7 +1303,7 @@
|
||||
<comment>This is the formal name for a font weight.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontWeightLight.Content" xml:space="preserve">
|
||||
<value>밝게</value>
|
||||
<value>가늘게</value>
|
||||
<comment>This is the formal name for a font weight.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontWeightMedium.Content" xml:space="preserve">
|
||||
@@ -1306,7 +1315,7 @@
|
||||
<comment>This is the formal name for a font weight.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontWeightSemi-bold.Content" xml:space="preserve">
|
||||
<value>약간 굵은</value>
|
||||
<value>약간 굵게</value>
|
||||
<comment>This is the formal name for a font weight.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontWeightSemi-light.Content" xml:space="preserve">
|
||||
@@ -1314,7 +1323,7 @@
|
||||
<comment>This is the formal name for a font weight.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontWeightThin.Content" xml:space="preserve">
|
||||
<value>얇은</value>
|
||||
<value>얇게</value>
|
||||
<comment>This is the formal name for a font weight.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFeature_rlig" xml:space="preserve">
|
||||
|
||||
@@ -733,10 +733,16 @@
|
||||
<value>Procurar...</value>
|
||||
<comment>Button label that opens a file picker in a new window. The "..." is standard to mean it will open a new window.</comment>
|
||||
</data>
|
||||
<data name="Profile_AddFontAxisButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Adicionar novo eixo de fonte</value>
|
||||
</data>
|
||||
<data name="Profile_AddNewFontAxis.Text" xml:space="preserve">
|
||||
<value>Adicionar novo</value>
|
||||
<comment>Button label that adds a new font axis for the current font.</comment>
|
||||
</data>
|
||||
<data name="Profile_AddFontFeatureButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
|
||||
<value>Adicionar novo recurso de fonte</value>
|
||||
</data>
|
||||
<data name="Profile_AddNewFontFeature.Text" xml:space="preserve">
|
||||
<value>Adicionar novo</value>
|
||||
<comment>Button label that adds a new font feature for the current font.</comment>
|
||||
@@ -889,6 +895,9 @@
|
||||
<value>Tipo de fonte</value>
|
||||
<comment>Name for a control to select the font for text in the app.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFace.HelpText" xml:space="preserve">
|
||||
<value>Pode utilizar vários tipos de letra separando-os com uma vírgula ASCII.</value>
|
||||
</data>
|
||||
<data name="Profile_FontSize.Header" xml:space="preserve">
|
||||
<value>Tamanho da fonte</value>
|
||||
<comment>Header for a control to determine the size of the text in the app.</comment>
|
||||
@@ -922,7 +931,7 @@
|
||||
<comment>The main label of a toggle. When enabled, certain characters (glyphs) are replaced with better looking ones.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableBuiltinGlyphs.HelpText" xml:space="preserve">
|
||||
<value>Quando habilitado, o terminal desenha glifos personalizados para caracteres de desenho de elemento de bloco e caixa em vez de usar a fonte. Esse recurso só funciona quando a Aceleração de GPU está disponível.</value>
|
||||
<value>Quando habilitado, o terminal desenha glifos personalizados para elementos de bloco e caracteres de desenho de caixa em vez de usar a fonte.</value>
|
||||
<comment>A longer description of the "Profile_EnableBuiltinGlyphs" toggle. "glyphs", "block element" and "box drawing characters" are technical terms from the Unicode specification.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableColorGlyphs.Header" xml:space="preserve">
|
||||
|
||||
@@ -895,6 +895,9 @@
|
||||
<value>₣øñŧ ƒдсέ !!!</value>
|
||||
<comment>Name for a control to select the font for text in the app.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFace.HelpText" xml:space="preserve">
|
||||
<value>Ýоύ ĉąи ύŝè мύŀŧΐρļĕ ƒőйτš ъý ѕéραгдŧĭʼnğ ţнэm щїţђ áп ∆ŚČĨĨ çőмmа. !!! !!! !!! !!! !!! !!! !</value>
|
||||
</data>
|
||||
<data name="Profile_FontSize.Header" xml:space="preserve">
|
||||
<value>₣ŏňτ şίźε !!!</value>
|
||||
<comment>Header for a control to determine the size of the text in the app.</comment>
|
||||
@@ -928,7 +931,7 @@
|
||||
<comment>The main label of a toggle. When enabled, certain characters (glyphs) are replaced with better looking ones.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableBuiltinGlyphs.HelpText" xml:space="preserve">
|
||||
<value>Ẅħĕň еņªъℓёð, тћз τēгмïπдℓ ðѓáшş çύšτом ģļўφħѕ ƒǿя ъĺôсĸ éℓêm℮ήŧ àñð ъο× ðгдωΐπĝ čћдŗąςŧέѓś ìπŝţėãđ ŏƒ ũŝіⁿğ ťћę ƒбηŧ. Ţћιş ƒзаτџŕè οʼnĺŷ ωóгκŝ ẁĥéŋ ĢΡŬ Àςĉеŀèѓдτισñ ĩѕ ǻνãîļåвłę. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</value>
|
||||
<value>Ẅħĕň еņªъℓёð, тћз τēгмïπдℓ ðѓáшş çύšτом ģļўφħѕ ƒǿя ъĺôсĸ éℓêm℮ήŧ àñð ъο× ðгдωΐπĝ čћдŗąςŧέѓś ìπŝţėãđ ŏƒ ũŝіⁿğ ťћę ƒбηŧ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</value>
|
||||
<comment>A longer description of the "Profile_EnableBuiltinGlyphs" toggle. "glyphs", "block element" and "box drawing characters" are technical terms from the Unicode specification.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableColorGlyphs.Header" xml:space="preserve">
|
||||
|
||||
@@ -895,6 +895,9 @@
|
||||
<value>₣øñŧ ƒдсέ !!!</value>
|
||||
<comment>Name for a control to select the font for text in the app.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFace.HelpText" xml:space="preserve">
|
||||
<value>Ýоύ ĉąи ύŝè мύŀŧΐρļĕ ƒőйτš ъý ѕéραгдŧĭʼnğ ţнэm щїţђ áп ∆ŚČĨĨ çőмmа. !!! !!! !!! !!! !!! !!! !</value>
|
||||
</data>
|
||||
<data name="Profile_FontSize.Header" xml:space="preserve">
|
||||
<value>₣ŏňτ şίźε !!!</value>
|
||||
<comment>Header for a control to determine the size of the text in the app.</comment>
|
||||
@@ -928,7 +931,7 @@
|
||||
<comment>The main label of a toggle. When enabled, certain characters (glyphs) are replaced with better looking ones.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableBuiltinGlyphs.HelpText" xml:space="preserve">
|
||||
<value>Ẅħĕň еņªъℓёð, тћз τēгмïπдℓ ðѓáшş çύšτом ģļўφħѕ ƒǿя ъĺôсĸ éℓêm℮ήŧ àñð ъο× ðгдωΐπĝ čћдŗąςŧέѓś ìπŝţėãđ ŏƒ ũŝіⁿğ ťћę ƒбηŧ. Ţћιş ƒзаτџŕè οʼnĺŷ ωóгκŝ ẁĥéŋ ĢΡŬ Àςĉеŀèѓдτισñ ĩѕ ǻνãîļåвłę. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</value>
|
||||
<value>Ẅħĕň еņªъℓёð, тћз τēгмïπдℓ ðѓáшş çύšτом ģļўφħѕ ƒǿя ъĺôсĸ éℓêm℮ήŧ àñð ъο× ðгдωΐπĝ čћдŗąςŧέѓś ìπŝţėãđ ŏƒ ũŝіⁿğ ťћę ƒбηŧ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</value>
|
||||
<comment>A longer description of the "Profile_EnableBuiltinGlyphs" toggle. "glyphs", "block element" and "box drawing characters" are technical terms from the Unicode specification.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableColorGlyphs.Header" xml:space="preserve">
|
||||
|
||||
@@ -895,6 +895,9 @@
|
||||
<value>₣øñŧ ƒдсέ !!!</value>
|
||||
<comment>Name for a control to select the font for text in the app.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFace.HelpText" xml:space="preserve">
|
||||
<value>Ýоύ ĉąи ύŝè мύŀŧΐρļĕ ƒőйτš ъý ѕéραгдŧĭʼnğ ţнэm щїţђ áп ∆ŚČĨĨ çőмmа. !!! !!! !!! !!! !!! !!! !</value>
|
||||
</data>
|
||||
<data name="Profile_FontSize.Header" xml:space="preserve">
|
||||
<value>₣ŏňτ şίźε !!!</value>
|
||||
<comment>Header for a control to determine the size of the text in the app.</comment>
|
||||
@@ -928,7 +931,7 @@
|
||||
<comment>The main label of a toggle. When enabled, certain characters (glyphs) are replaced with better looking ones.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableBuiltinGlyphs.HelpText" xml:space="preserve">
|
||||
<value>Ẅħĕň еņªъℓёð, тћз τēгмïπдℓ ðѓáшş çύšτом ģļўφħѕ ƒǿя ъĺôсĸ éℓêm℮ήŧ àñð ъο× ðгдωΐπĝ čћдŗąςŧέѓś ìπŝţėãđ ŏƒ ũŝіⁿğ ťћę ƒбηŧ. Ţћιş ƒзаτџŕè οʼnĺŷ ωóгκŝ ẁĥéŋ ĢΡŬ Àςĉеŀèѓдτισñ ĩѕ ǻνãîļåвłę. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</value>
|
||||
<value>Ẅħĕň еņªъℓёð, тћз τēгмïπдℓ ðѓáшş çύšτом ģļўφħѕ ƒǿя ъĺôсĸ éℓêm℮ήŧ àñð ъο× ðгдωΐπĝ čћдŗąςŧέѓś ìπŝţėãđ ŏƒ ũŝіⁿğ ťћę ƒбηŧ. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!</value>
|
||||
<comment>A longer description of the "Profile_EnableBuiltinGlyphs" toggle. "glyphs", "block element" and "box drawing characters" are technical terms from the Unicode specification.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableColorGlyphs.Header" xml:space="preserve">
|
||||
|
||||
@@ -895,6 +895,9 @@
|
||||
<value>Начертание шрифта</value>
|
||||
<comment>Name for a control to select the font for text in the app.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFace.HelpText" xml:space="preserve">
|
||||
<value>Вы можете использовать несколько шрифтов, разделив их запятой ASCII.</value>
|
||||
</data>
|
||||
<data name="Profile_FontSize.Header" xml:space="preserve">
|
||||
<value>Размер шрифта</value>
|
||||
<comment>Header for a control to determine the size of the text in the app.</comment>
|
||||
@@ -928,7 +931,7 @@
|
||||
<comment>The main label of a toggle. When enabled, certain characters (glyphs) are replaced with better looking ones.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableBuiltinGlyphs.HelpText" xml:space="preserve">
|
||||
<value>Если этот параметр включен, терминал рисует собственные глифы для элементов блока и символов рисования прямоугольников вместо использования шрифта. Эта функция работает только тогда, когда доступно ускорение графического процессора.</value>
|
||||
<value>Если этот параметр включен, терминал рисует собственные глифы для элементов блока и символов рисования прямоугольников вместо использования шрифта.</value>
|
||||
<comment>A longer description of the "Profile_EnableBuiltinGlyphs" toggle. "glyphs", "block element" and "box drawing characters" are technical terms from the Unicode specification.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableColorGlyphs.Header" xml:space="preserve">
|
||||
|
||||
@@ -895,6 +895,9 @@
|
||||
<value>字体</value>
|
||||
<comment>Name for a control to select the font for text in the app.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFace.HelpText" xml:space="preserve">
|
||||
<value>通过使用 ASCII 逗号分隔多个字体,可以使用这些字体。</value>
|
||||
</data>
|
||||
<data name="Profile_FontSize.Header" xml:space="preserve">
|
||||
<value>字号</value>
|
||||
<comment>Header for a control to determine the size of the text in the app.</comment>
|
||||
@@ -928,7 +931,7 @@
|
||||
<comment>The main label of a toggle. When enabled, certain characters (glyphs) are replaced with better looking ones.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableBuiltinGlyphs.HelpText" xml:space="preserve">
|
||||
<value>启用后,终端将为块元素和制表符绘制自定义标志符号,而不是使用字体。仅当 GPU 加速可用时,此功能才有效。</value>
|
||||
<value>启用后,终端会使用自定义字形来绘制块元素和框线绘图字符,而不是使用字体。</value>
|
||||
<comment>A longer description of the "Profile_EnableBuiltinGlyphs" toggle. "glyphs", "block element" and "box drawing characters" are technical terms from the Unicode specification.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableColorGlyphs.Header" xml:space="preserve">
|
||||
|
||||
@@ -895,6 +895,9 @@
|
||||
<value>字體</value>
|
||||
<comment>Name for a control to select the font for text in the app.</comment>
|
||||
</data>
|
||||
<data name="Profile_FontFace.HelpText" xml:space="preserve">
|
||||
<value>您可以使用 ASCII 逗號分隔多個字型。</value>
|
||||
</data>
|
||||
<data name="Profile_FontSize.Header" xml:space="preserve">
|
||||
<value>字型大小</value>
|
||||
<comment>Header for a control to determine the size of the text in the app.</comment>
|
||||
@@ -928,7 +931,7 @@
|
||||
<comment>The main label of a toggle. When enabled, certain characters (glyphs) are replaced with better looking ones.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableBuiltinGlyphs.HelpText" xml:space="preserve">
|
||||
<value>啟用時,終端機會為區塊元素和方塊繪圖字元繪製自訂字符,而非使用字型。此功能僅在可使用 GPU 加速時作用。</value>
|
||||
<value>啟用時,終端機會為區塊元素和方塊繪圖字元繪製自訂字符,而非使用字型。</value>
|
||||
<comment>A longer description of the "Profile_EnableBuiltinGlyphs" toggle. "glyphs", "block element" and "box drawing characters" are technical terms from the Unicode specification.</comment>
|
||||
</data>
|
||||
<data name="Profile_EnableColorGlyphs.Header" xml:space="preserve">
|
||||
|
||||
@@ -18,9 +18,6 @@
|
||||
#include "SshHostGenerator.h"
|
||||
#endif
|
||||
|
||||
// userDefault.h is like the above, but with a default template for the user's settings.json.
|
||||
#include <LegacyProfileGeneratorNamespaces.h>
|
||||
|
||||
#include "ApplicationState.h"
|
||||
#include "DefaultTerminal.h"
|
||||
#include "FileUtils.h"
|
||||
@@ -460,6 +457,11 @@ bool SettingsLoader::FixupUserSettings()
|
||||
CommandlinePatch{ DEFAULT_WINDOWS_POWERSHELL_GUID, L"powershell.exe", L"%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" },
|
||||
};
|
||||
|
||||
static constexpr std::array iconsToClearFromVisualStudioProfiles{
|
||||
std::wstring_view{ L"ms-appx:///ProfileIcons/{61c54bbd-c2c6-5271-96e7-009a87ff44bf}.png" },
|
||||
std::wstring_view{ L"ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png" },
|
||||
};
|
||||
|
||||
auto fixedUp = userSettings.fixupsAppliedDuringLoad;
|
||||
|
||||
fixedUp = RemapColorSchemeForProfile(userSettings.baseLayerProfile) || fixedUp;
|
||||
@@ -467,28 +469,39 @@ bool SettingsLoader::FixupUserSettings()
|
||||
{
|
||||
fixedUp = RemapColorSchemeForProfile(profile) || fixedUp;
|
||||
|
||||
if (!profile->HasCommandline())
|
||||
if (profile->HasCommandline())
|
||||
{
|
||||
continue;
|
||||
for (const auto& patch : commandlinePatches)
|
||||
{
|
||||
if (profile->Guid() == patch.guid && til::equals_insensitive_ascii(profile->Commandline(), patch.before))
|
||||
{
|
||||
profile->ClearCommandline();
|
||||
|
||||
// GH#12842:
|
||||
// With the commandline field on the user profile gone, it's actually unknown what
|
||||
// commandline it'll inherit, since a user profile can have multiple parents. We have to
|
||||
// make sure we restore the correct commandline in case we don't inherit the expected one.
|
||||
if (profile->Commandline() != patch.after)
|
||||
{
|
||||
profile->Commandline(winrt::hstring{ patch.after });
|
||||
}
|
||||
|
||||
fixedUp = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto& patch : commandlinePatches)
|
||||
if (profile->HasIcon() && profile->HasSource() && profile->Source() == VisualStudioGenerator::Namespace)
|
||||
{
|
||||
if (profile->Guid() == patch.guid && til::equals_insensitive_ascii(profile->Commandline(), patch.before))
|
||||
for (auto&& icon : iconsToClearFromVisualStudioProfiles)
|
||||
{
|
||||
profile->ClearCommandline();
|
||||
|
||||
// GH#12842:
|
||||
// With the commandline field on the user profile gone, it's actually unknown what
|
||||
// commandline it'll inherit, since a user profile can have multiple parents. We have to
|
||||
// make sure we restore the correct commandline in case we don't inherit the expected one.
|
||||
if (profile->Commandline() != patch.after)
|
||||
if (profile->Icon() == icon)
|
||||
{
|
||||
profile->Commandline(winrt::hstring{ patch.after });
|
||||
profile->ClearIcon();
|
||||
fixedUp = true;
|
||||
break;
|
||||
}
|
||||
|
||||
fixedUp = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -690,7 +690,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
|
||||
auto data = winrt::to_string(json);
|
||||
|
||||
std::string errs;
|
||||
static std::unique_ptr<Json::CharReader> reader{ Json::CharReaderBuilder{}.newCharReader() };
|
||||
std::unique_ptr<Json::CharReader> reader{ Json::CharReaderBuilder{}.newCharReader() };
|
||||
Json::Value root;
|
||||
if (!reader->parse(data.data(), data.data() + data.size(), &root, &errs))
|
||||
{
|
||||
|
||||
@@ -329,7 +329,7 @@ Json::Value Profile::ToJson() const
|
||||
// Recall: Icon isn't actually a setting in the MTSM_PROFILE_SETTINGS. We
|
||||
// defined it manually in Profile, so make sure we only serialize the Icon
|
||||
// if the user actually changed it here.
|
||||
JsonUtils::SetValueForKey(json, IconKey, (writeBasicSettings && HasIcon()) ? Icon() : _Icon);
|
||||
JsonUtils::SetValueForKey(json, IconKey, _Icon);
|
||||
|
||||
// PermissiveStringConverter is unnecessary for serialization
|
||||
JsonUtils::SetValueForKey(json, PaddingKey, _Padding);
|
||||
|
||||
@@ -118,13 +118,13 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="SetColorSchemeParentCommandName" xml:space="preserve">
|
||||
<value>Farbschema auswählen</value>
|
||||
<value>Farbschema auswählen...</value>
|
||||
</data>
|
||||
<data name="NewTabParentCommandName" xml:space="preserve">
|
||||
<value>Neue Registerkarte</value>
|
||||
<value>Neue Registerkarte...</value>
|
||||
</data>
|
||||
<data name="SplitPaneParentCommandName" xml:space="preserve">
|
||||
<value>Bereich teilen</value>
|
||||
<value>Bereich teilen...</value>
|
||||
</data>
|
||||
<data name="ApplicationDisplayNamePortable" xml:space="preserve">
|
||||
<value>Terminal (portierbar)</value>
|
||||
@@ -325,7 +325,7 @@
|
||||
<comment>{Locked="JSON"}. "JSON" is the extension of the file that will be opened.</comment>
|
||||
</data>
|
||||
<data name="OpenTabColorPickerCommandKey" xml:space="preserve">
|
||||
<value>Registerkartenfarbe festlegen</value>
|
||||
<value>Registerkartenfarbe festlegen...</value>
|
||||
</data>
|
||||
<data name="PasteTextCommandKey" xml:space="preserve">
|
||||
<value>Einfügen</value>
|
||||
@@ -347,7 +347,7 @@
|
||||
<value>Den Titel der Registerkarte zurücksetzen</value>
|
||||
</data>
|
||||
<data name="OpenTabRenamerCommandKey" xml:space="preserve">
|
||||
<value>Registerkartentitel umbenennen</value>
|
||||
<value>Registerkarte umbenennen</value>
|
||||
</data>
|
||||
<data name="ResizePaneCommandKey" xml:space="preserve">
|
||||
<value>Bereich skalieren</value>
|
||||
@@ -441,7 +441,7 @@
|
||||
<value>Zur letzten Registerkarte wechseln</value>
|
||||
</data>
|
||||
<data name="TabSearchCommandKey" xml:space="preserve">
|
||||
<value>Registerkarte suchen</value>
|
||||
<value>Registerkarte suchen...</value>
|
||||
</data>
|
||||
<data name="ToggleAlwaysOnTopCommandKey" xml:space="preserve">
|
||||
<value>Modus "Immer im Vordergrund" umschalten</value>
|
||||
@@ -449,9 +449,6 @@
|
||||
<data name="ToggleCommandPaletteCommandKey" xml:space="preserve">
|
||||
<value>Befehlspalette ein/aus</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandHistoryCommandKey" xml:space="preserve">
|
||||
<value>Zuletzt verwendete Befehle</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandKey" xml:space="preserve">
|
||||
<value>Vorschläge öffnen</value>
|
||||
</data>
|
||||
@@ -515,7 +512,7 @@
|
||||
<value>Fensternamen zurücksetzen</value>
|
||||
</data>
|
||||
<data name="OpenWindowRenamerCommandKey" xml:space="preserve">
|
||||
<value>Fenster umbenennen</value>
|
||||
<value>Fenster umbenennen...</value>
|
||||
</data>
|
||||
<data name="DisplayWorkingDirectoryCommandKey" xml:space="preserve">
|
||||
<value>Aktuelles Arbeitsverzeichnis des Terminals anzeigen</value>
|
||||
@@ -566,7 +563,7 @@
|
||||
<value>Terminal beenden</value>
|
||||
</data>
|
||||
<data name="SetOpacityParentCommandName" xml:space="preserve">
|
||||
<value>Hintergrunddeckkraft festlegen</value>
|
||||
<value>Hintergrunddeckkraft festlegen...</value>
|
||||
</data>
|
||||
<data name="IncreaseOpacityCommandKey" xml:space="preserve">
|
||||
<value>Hintergrunddeckkraft um {0} % erhöhen</value>
|
||||
|
||||
@@ -118,13 +118,13 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="SetColorSchemeParentCommandName" xml:space="preserve">
|
||||
<value>Select color scheme</value>
|
||||
<value>Select color scheme...</value>
|
||||
</data>
|
||||
<data name="NewTabParentCommandName" xml:space="preserve">
|
||||
<value>New tab</value>
|
||||
<value>New tab...</value>
|
||||
</data>
|
||||
<data name="SplitPaneParentCommandName" xml:space="preserve">
|
||||
<value>Split pane</value>
|
||||
<value>Split pane...</value>
|
||||
</data>
|
||||
<data name="ApplicationDisplayNamePortable" xml:space="preserve">
|
||||
<value>Terminal (Portable)</value>
|
||||
@@ -325,7 +325,7 @@
|
||||
<comment>{Locked="JSON"}. "JSON" is the extension of the file that will be opened.</comment>
|
||||
</data>
|
||||
<data name="OpenTabColorPickerCommandKey" xml:space="preserve">
|
||||
<value>Set the tab color</value>
|
||||
<value>Set tab color...</value>
|
||||
</data>
|
||||
<data name="PasteTextCommandKey" xml:space="preserve">
|
||||
<value>Paste</value>
|
||||
@@ -347,7 +347,7 @@
|
||||
<value>Reset tab title</value>
|
||||
</data>
|
||||
<data name="OpenTabRenamerCommandKey" xml:space="preserve">
|
||||
<value>Rename tab title</value>
|
||||
<value>Rename tab</value>
|
||||
</data>
|
||||
<data name="ResizePaneCommandKey" xml:space="preserve">
|
||||
<value>Resize pane</value>
|
||||
@@ -441,7 +441,7 @@
|
||||
<value>Switch to the last tab</value>
|
||||
</data>
|
||||
<data name="TabSearchCommandKey" xml:space="preserve">
|
||||
<value>Search for tab</value>
|
||||
<value>Search for tab...</value>
|
||||
</data>
|
||||
<data name="ToggleAlwaysOnTopCommandKey" xml:space="preserve">
|
||||
<value>Toggle always on top mode</value>
|
||||
@@ -449,9 +449,6 @@
|
||||
<data name="ToggleCommandPaletteCommandKey" xml:space="preserve">
|
||||
<value>Toggle command palette</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandHistoryCommandKey" xml:space="preserve">
|
||||
<value>Recent commands</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandKey" xml:space="preserve">
|
||||
<value>Open suggestions</value>
|
||||
</data>
|
||||
@@ -515,7 +512,7 @@
|
||||
<value>Reset window name</value>
|
||||
</data>
|
||||
<data name="OpenWindowRenamerCommandKey" xml:space="preserve">
|
||||
<value>Rename window</value>
|
||||
<value>Rename window...</value>
|
||||
</data>
|
||||
<data name="DisplayWorkingDirectoryCommandKey" xml:space="preserve">
|
||||
<value>Display Terminal's current working directory</value>
|
||||
@@ -566,7 +563,7 @@
|
||||
<value>Quit the Terminal</value>
|
||||
</data>
|
||||
<data name="SetOpacityParentCommandName" xml:space="preserve">
|
||||
<value>Set background opacity</value>
|
||||
<value>Set background opacity...</value>
|
||||
</data>
|
||||
<data name="IncreaseOpacityCommandKey" xml:space="preserve">
|
||||
<value>Increase background opacity by {0}%</value>
|
||||
|
||||
@@ -118,13 +118,13 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="SetColorSchemeParentCommandName" xml:space="preserve">
|
||||
<value>Seleccionar combinación de colores</value>
|
||||
<value>Seleccionar combinación de colores...</value>
|
||||
</data>
|
||||
<data name="NewTabParentCommandName" xml:space="preserve">
|
||||
<value>Nueva pestaña</value>
|
||||
<value>Nueva pestaña...</value>
|
||||
</data>
|
||||
<data name="SplitPaneParentCommandName" xml:space="preserve">
|
||||
<value>Panel dividido</value>
|
||||
<value>Dividir panel...</value>
|
||||
</data>
|
||||
<data name="ApplicationDisplayNamePortable" xml:space="preserve">
|
||||
<value>Terminal (portátil)</value>
|
||||
@@ -187,7 +187,7 @@
|
||||
<value>Cerrar todas las pestañas después de la pestaña actual</value>
|
||||
</data>
|
||||
<data name="CloseWindowCommandKey" xml:space="preserve">
|
||||
<value>Cierre la ventana</value>
|
||||
<value>Cerrar ventana</value>
|
||||
</data>
|
||||
<data name="OpenSystemMenuCommandKey" xml:space="preserve">
|
||||
<value>Abrir menú del sistema</value>
|
||||
@@ -276,10 +276,10 @@
|
||||
<value>Mover el foco al panel menor</value>
|
||||
</data>
|
||||
<data name="SwapPaneCommandKey" xml:space="preserve">
|
||||
<value>Panel de intercambio</value>
|
||||
<value>Intercambiar panel</value>
|
||||
</data>
|
||||
<data name="SwapPaneWithArgCommandKey" xml:space="preserve">
|
||||
<value>{0} panel de intercambio</value>
|
||||
<value>Intercambiar panel hacia {0}</value>
|
||||
<comment>{0} will be replaced with one of the four directions "DirectionLeft", "DirectionRight", "DirectionUp", "DirectionDown"</comment>
|
||||
</data>
|
||||
<data name="SwapPaneToLastUsedPane" xml:space="preserve">
|
||||
@@ -307,7 +307,7 @@
|
||||
<value>Identificar ventanas</value>
|
||||
</data>
|
||||
<data name="NextTabCommandKey" xml:space="preserve">
|
||||
<value>Siguiente pestaña</value>
|
||||
<value>Pestaña siguiente</value>
|
||||
</data>
|
||||
<data name="OpenBothSettingsFilesCommandKey" xml:space="preserve">
|
||||
<value>Abrir archivos de configuración y configuración predeterminada (JSON)</value>
|
||||
@@ -325,7 +325,7 @@
|
||||
<comment>{Locked="JSON"}. "JSON" is the extension of the file that will be opened.</comment>
|
||||
</data>
|
||||
<data name="OpenTabColorPickerCommandKey" xml:space="preserve">
|
||||
<value>Establecer el color de la pestaña</value>
|
||||
<value>Establecer color de pestaña...</value>
|
||||
</data>
|
||||
<data name="PasteTextCommandKey" xml:space="preserve">
|
||||
<value>Pegar</value>
|
||||
@@ -347,7 +347,7 @@
|
||||
<value>Restablecer título de la pestaña</value>
|
||||
</data>
|
||||
<data name="OpenTabRenamerCommandKey" xml:space="preserve">
|
||||
<value>Cambiar título de la pestaña</value>
|
||||
<value>Cambiar el nombre de la pestaña</value>
|
||||
</data>
|
||||
<data name="ResizePaneCommandKey" xml:space="preserve">
|
||||
<value>Cambiar el tamaño del panel</value>
|
||||
@@ -357,24 +357,24 @@
|
||||
<comment>{0} will be replaced with one of the four directions "DirectionLeft", "DirectionRight", "DirectionUp", or "DirectionDown"</comment>
|
||||
</data>
|
||||
<data name="ScrollDownCommandKey" xml:space="preserve">
|
||||
<value>Desplazar hacia abajo</value>
|
||||
<value>Desplazarse hacia abajo</value>
|
||||
</data>
|
||||
<data name="ScrollDownSeveralRowsCommandKey" xml:space="preserve">
|
||||
<value>Desplazar hacia abajo {0} línea(s)</value>
|
||||
<value>Desplazarse hacia abajo {0} línea(s)</value>
|
||||
<comment>{0} will be replaced with the number of lines to scroll"</comment>
|
||||
</data>
|
||||
<data name="ScrollDownPageCommandKey" xml:space="preserve">
|
||||
<value>Desplácese hacia abajo una página</value>
|
||||
<value>Desplazarse hacia abajo una página</value>
|
||||
</data>
|
||||
<data name="ScrollUpCommandKey" xml:space="preserve">
|
||||
<value>Desplazar hacia arriba</value>
|
||||
<value>Desplazarse hacia arriba</value>
|
||||
</data>
|
||||
<data name="ScrollUpSeveralRowsCommandKey" xml:space="preserve">
|
||||
<value>Desplazar hacia arriba {0} línea(s)</value>
|
||||
<value>Desplazarse hacia arriba {0} línea(s)</value>
|
||||
<comment>{0} will be replaced with the number of lines to scroll"</comment>
|
||||
</data>
|
||||
<data name="ScrollUpPageCommandKey" xml:space="preserve">
|
||||
<value>Desplácese hacia arriba una página</value>
|
||||
<value>Desplazarse hacia arriba una página</value>
|
||||
</data>
|
||||
<data name="ScrollToTopCommandKey" xml:space="preserve">
|
||||
<value>Desplazarse a la parte superior del historial</value>
|
||||
@@ -429,7 +429,7 @@
|
||||
<value>Mover el panel a una nueva ventana</value>
|
||||
</data>
|
||||
<data name="SplitPaneCommandKey" xml:space="preserve">
|
||||
<value>Panel dividido</value>
|
||||
<value>Dividir panel</value>
|
||||
</data>
|
||||
<data name="SplitVerticalCommandKey" xml:space="preserve">
|
||||
<value>Dividir el panel verticalmente</value>
|
||||
@@ -441,7 +441,7 @@
|
||||
<value>Cambiar a la última pestaña</value>
|
||||
</data>
|
||||
<data name="TabSearchCommandKey" xml:space="preserve">
|
||||
<value>Buscar pestaña</value>
|
||||
<value>Buscar pestañas...</value>
|
||||
</data>
|
||||
<data name="ToggleAlwaysOnTopCommandKey" xml:space="preserve">
|
||||
<value>Alternar siempre en el modo superior</value>
|
||||
@@ -449,9 +449,6 @@
|
||||
<data name="ToggleCommandPaletteCommandKey" xml:space="preserve">
|
||||
<value>Alternar paleta de comandos</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandHistoryCommandKey" xml:space="preserve">
|
||||
<value>Comandos recientes</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandKey" xml:space="preserve">
|
||||
<value>Abrir sugerencias</value>
|
||||
</data>
|
||||
@@ -487,7 +484,7 @@
|
||||
<value>Alternar la orientación de la división del panel</value>
|
||||
</data>
|
||||
<data name="TogglePaneZoomCommandKey" xml:space="preserve">
|
||||
<value>Zoom de panel de alternancia</value>
|
||||
<value>Alternar zoom del panel</value>
|
||||
</data>
|
||||
<data name="TogglePaneReadOnlyCommandKey" xml:space="preserve">
|
||||
<value>Activar o desactivar el modo de solo lectura del panel</value>
|
||||
@@ -524,7 +521,7 @@
|
||||
<value>Mostrar u ocultar la ventana de terminal</value>
|
||||
</data>
|
||||
<data name="QuakeModeCommandKey" xml:space="preserve">
|
||||
<value>Mostrar u ocultar ventana Desastre</value>
|
||||
<value>Mostrar u ocultar ventana Quake</value>
|
||||
<comment>Quake is a well-known computer game and isn't related to earthquakes, etc. See https://en.wikipedia.org/wiki/Quake_(video_game)</comment>
|
||||
</data>
|
||||
<data name="FocusPaneCommandKey" xml:space="preserve">
|
||||
@@ -566,7 +563,7 @@
|
||||
<value>Salir del terminal</value>
|
||||
</data>
|
||||
<data name="SetOpacityParentCommandName" xml:space="preserve">
|
||||
<value>Establecer la opacidad del fondo</value>
|
||||
<value>Establecer la opacidad del fondo...</value>
|
||||
</data>
|
||||
<data name="IncreaseOpacityCommandKey" xml:space="preserve">
|
||||
<value>Aumentar la opacidad del fondo en un {0} %</value>
|
||||
|
||||
@@ -118,13 +118,13 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="SetColorSchemeParentCommandName" xml:space="preserve">
|
||||
<value>Sélectionner un modèle de couleurs</value>
|
||||
<value>Sélectionner le modèle de couleurs...</value>
|
||||
</data>
|
||||
<data name="NewTabParentCommandName" xml:space="preserve">
|
||||
<value>Nouvel onglet</value>
|
||||
<value>Nouvel onglet...</value>
|
||||
</data>
|
||||
<data name="SplitPaneParentCommandName" xml:space="preserve">
|
||||
<value>Fractionner le volet</value>
|
||||
<value>Fractionner le volet...</value>
|
||||
</data>
|
||||
<data name="ApplicationDisplayNamePortable" xml:space="preserve">
|
||||
<value>Terminal (portable)</value>
|
||||
@@ -325,7 +325,7 @@
|
||||
<comment>{Locked="JSON"}. "JSON" is the extension of the file that will be opened.</comment>
|
||||
</data>
|
||||
<data name="OpenTabColorPickerCommandKey" xml:space="preserve">
|
||||
<value>Définir la couleur de l’onglet</value>
|
||||
<value>Définir la couleur de l’onglet...</value>
|
||||
</data>
|
||||
<data name="PasteTextCommandKey" xml:space="preserve">
|
||||
<value>Coller</value>
|
||||
@@ -347,7 +347,7 @@
|
||||
<value>Rétablir le titre de l’onglet</value>
|
||||
</data>
|
||||
<data name="OpenTabRenamerCommandKey" xml:space="preserve">
|
||||
<value>Renommer le titre de l'onglet</value>
|
||||
<value>Renommer l'onglet</value>
|
||||
</data>
|
||||
<data name="ResizePaneCommandKey" xml:space="preserve">
|
||||
<value>Redimensionner le volet</value>
|
||||
@@ -441,7 +441,7 @@
|
||||
<value>Basculer vers le dernier onglet</value>
|
||||
</data>
|
||||
<data name="TabSearchCommandKey" xml:space="preserve">
|
||||
<value>Recherche de l’onglet</value>
|
||||
<value>Rechercher l’onglet...</value>
|
||||
</data>
|
||||
<data name="ToggleAlwaysOnTopCommandKey" xml:space="preserve">
|
||||
<value>Activer le mode Toujours visible</value>
|
||||
@@ -449,9 +449,6 @@
|
||||
<data name="ToggleCommandPaletteCommandKey" xml:space="preserve">
|
||||
<value>Activer/désactiver la palette de commandes</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandHistoryCommandKey" xml:space="preserve">
|
||||
<value>Commandes récentes</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandKey" xml:space="preserve">
|
||||
<value>Ouvrir les suggestions</value>
|
||||
</data>
|
||||
@@ -515,7 +512,7 @@
|
||||
<value>Réinitialiser le nom de la fenêtre</value>
|
||||
</data>
|
||||
<data name="OpenWindowRenamerCommandKey" xml:space="preserve">
|
||||
<value>Fenêtre pour renommer</value>
|
||||
<value>Renommer la fenêtre...</value>
|
||||
</data>
|
||||
<data name="DisplayWorkingDirectoryCommandKey" xml:space="preserve">
|
||||
<value>Afficher le répertoire de travail actuel du terminal</value>
|
||||
@@ -566,7 +563,7 @@
|
||||
<value>Quitter le terminal</value>
|
||||
</data>
|
||||
<data name="SetOpacityParentCommandName" xml:space="preserve">
|
||||
<value>Définir l’opacité de l’arrière-plan</value>
|
||||
<value>Définir l’opacité de l’arrière-plan...</value>
|
||||
</data>
|
||||
<data name="IncreaseOpacityCommandKey" xml:space="preserve">
|
||||
<value>Augmenter l’opacité de l’arrière-plan de {0} %</value>
|
||||
|
||||
@@ -118,13 +118,13 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="SetColorSchemeParentCommandName" xml:space="preserve">
|
||||
<value>Seleziona combinazione colori</value>
|
||||
<value>Seleziona combinazione colori...</value>
|
||||
</data>
|
||||
<data name="NewTabParentCommandName" xml:space="preserve">
|
||||
<value>Nuova scheda</value>
|
||||
<value>Nuova scheda...</value>
|
||||
</data>
|
||||
<data name="SplitPaneParentCommandName" xml:space="preserve">
|
||||
<value>Suddividi riquadro</value>
|
||||
<value>Suddividi riquadro...</value>
|
||||
</data>
|
||||
<data name="ApplicationDisplayNamePortable" xml:space="preserve">
|
||||
<value>Terminale (portatile)</value>
|
||||
@@ -325,7 +325,7 @@
|
||||
<comment>{Locked="JSON"}. "JSON" is the extension of the file that will be opened.</comment>
|
||||
</data>
|
||||
<data name="OpenTabColorPickerCommandKey" xml:space="preserve">
|
||||
<value>Imposta il colore della scheda</value>
|
||||
<value>Imposta il colore della scheda...</value>
|
||||
</data>
|
||||
<data name="PasteTextCommandKey" xml:space="preserve">
|
||||
<value>Incolla</value>
|
||||
@@ -347,7 +347,7 @@
|
||||
<value>Reimposta il titolo della scheda</value>
|
||||
</data>
|
||||
<data name="OpenTabRenamerCommandKey" xml:space="preserve">
|
||||
<value>Rinomina il titolo della scheda</value>
|
||||
<value>Rinomina scheda</value>
|
||||
</data>
|
||||
<data name="ResizePaneCommandKey" xml:space="preserve">
|
||||
<value>Ridimensiona riquadro</value>
|
||||
@@ -441,7 +441,7 @@
|
||||
<value>Passa all'ultima scheda</value>
|
||||
</data>
|
||||
<data name="TabSearchCommandKey" xml:space="preserve">
|
||||
<value>Cerca scheda</value>
|
||||
<value>Cerca scheda...</value>
|
||||
</data>
|
||||
<data name="ToggleAlwaysOnTopCommandKey" xml:space="preserve">
|
||||
<value>Modalità attiva/disattiva sempre in alto</value>
|
||||
@@ -449,9 +449,6 @@
|
||||
<data name="ToggleCommandPaletteCommandKey" xml:space="preserve">
|
||||
<value>Attiva/disattiva riquadro dei comandi</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandHistoryCommandKey" xml:space="preserve">
|
||||
<value>Comandi recenti</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandKey" xml:space="preserve">
|
||||
<value>Apri i suggerimenti</value>
|
||||
</data>
|
||||
@@ -515,7 +512,7 @@
|
||||
<value>Reimposta nome finestra</value>
|
||||
</data>
|
||||
<data name="OpenWindowRenamerCommandKey" xml:space="preserve">
|
||||
<value>Rinomina finestra</value>
|
||||
<value>Rinomina finestra...</value>
|
||||
</data>
|
||||
<data name="DisplayWorkingDirectoryCommandKey" xml:space="preserve">
|
||||
<value>Visualizza la directory di lavoro corrente del terminale</value>
|
||||
@@ -566,7 +563,7 @@
|
||||
<value>Esci da Terminale</value>
|
||||
</data>
|
||||
<data name="SetOpacityParentCommandName" xml:space="preserve">
|
||||
<value>Imposta l'opacità di sfondo</value>
|
||||
<value>Imposta l'opacità di sfondo...</value>
|
||||
</data>
|
||||
<data name="IncreaseOpacityCommandKey" xml:space="preserve">
|
||||
<value>Aumenta l'opacità di sfondo del {0}%</value>
|
||||
|
||||
@@ -118,13 +118,13 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="SetColorSchemeParentCommandName" xml:space="preserve">
|
||||
<value>配色パターンの選択</value>
|
||||
<value>配色を選択...</value>
|
||||
</data>
|
||||
<data name="NewTabParentCommandName" xml:space="preserve">
|
||||
<value>新しいタブ</value>
|
||||
<value>新しいタブ...</value>
|
||||
</data>
|
||||
<data name="SplitPaneParentCommandName" xml:space="preserve">
|
||||
<value>ウィンドウを分割する</value>
|
||||
<value>ウィンドウの分割...</value>
|
||||
</data>
|
||||
<data name="ApplicationDisplayNamePortable" xml:space="preserve">
|
||||
<value>ターミナル (ポータブル)</value>
|
||||
@@ -325,7 +325,7 @@
|
||||
<comment>{Locked="JSON"}. "JSON" is the extension of the file that will be opened.</comment>
|
||||
</data>
|
||||
<data name="OpenTabColorPickerCommandKey" xml:space="preserve">
|
||||
<value>タブの色の設定</value>
|
||||
<value>タブの色を設定...</value>
|
||||
</data>
|
||||
<data name="PasteTextCommandKey" xml:space="preserve">
|
||||
<value>貼り付け</value>
|
||||
@@ -347,7 +347,7 @@
|
||||
<value>タブのタイトルをリセット</value>
|
||||
</data>
|
||||
<data name="OpenTabRenamerCommandKey" xml:space="preserve">
|
||||
<value>タブ タイトル名の変更</value>
|
||||
<value>[名前の変更] タブ</value>
|
||||
</data>
|
||||
<data name="ResizePaneCommandKey" xml:space="preserve">
|
||||
<value>ウィンドウのサイズの変更する</value>
|
||||
@@ -441,7 +441,7 @@
|
||||
<value>最後のタブに切り替える</value>
|
||||
</data>
|
||||
<data name="TabSearchCommandKey" xml:space="preserve">
|
||||
<value>タブの検索</value>
|
||||
<value>タブを検索...</value>
|
||||
</data>
|
||||
<data name="ToggleAlwaysOnTopCommandKey" xml:space="preserve">
|
||||
<value>常に手前に表示するモードに切り替える</value>
|
||||
@@ -449,9 +449,6 @@
|
||||
<data name="ToggleCommandPaletteCommandKey" xml:space="preserve">
|
||||
<value>コマンド パレットに切り替える</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandHistoryCommandKey" xml:space="preserve">
|
||||
<value>最近使ったコマンド</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandKey" xml:space="preserve">
|
||||
<value>候補を開く</value>
|
||||
</data>
|
||||
@@ -566,7 +563,7 @@
|
||||
<value>ターミナルの終了</value>
|
||||
</data>
|
||||
<data name="SetOpacityParentCommandName" xml:space="preserve">
|
||||
<value>背景の不透明度の設定</value>
|
||||
<value>背景の不透明度を設定...</value>
|
||||
</data>
|
||||
<data name="IncreaseOpacityCommandKey" xml:space="preserve">
|
||||
<value>背景の不透明度を {0}% 上げる</value>
|
||||
|
||||
@@ -118,13 +118,13 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="SetColorSchemeParentCommandName" xml:space="preserve">
|
||||
<value>색 구성표 선택</value>
|
||||
<value>색 구성표 선택...</value>
|
||||
</data>
|
||||
<data name="NewTabParentCommandName" xml:space="preserve">
|
||||
<value>새 탭</value>
|
||||
<value>새 탭...</value>
|
||||
</data>
|
||||
<data name="SplitPaneParentCommandName" xml:space="preserve">
|
||||
<value>분할 창</value>
|
||||
<value>분할 창...</value>
|
||||
</data>
|
||||
<data name="ApplicationDisplayNamePortable" xml:space="preserve">
|
||||
<value>터미널(이식 가능)</value>
|
||||
@@ -325,7 +325,7 @@
|
||||
<comment>{Locked="JSON"}. "JSON" is the extension of the file that will be opened.</comment>
|
||||
</data>
|
||||
<data name="OpenTabColorPickerCommandKey" xml:space="preserve">
|
||||
<value>탭 색 설정</value>
|
||||
<value>탭 색 설정...</value>
|
||||
</data>
|
||||
<data name="PasteTextCommandKey" xml:space="preserve">
|
||||
<value>붙여넣기</value>
|
||||
@@ -347,7 +347,7 @@
|
||||
<value>탭 제목 재설정</value>
|
||||
</data>
|
||||
<data name="OpenTabRenamerCommandKey" xml:space="preserve">
|
||||
<value>탭 제목 이름 바꾸기</value>
|
||||
<value>탭 이름 바꾸기</value>
|
||||
</data>
|
||||
<data name="ResizePaneCommandKey" xml:space="preserve">
|
||||
<value>창 크기 조정</value>
|
||||
@@ -449,9 +449,6 @@
|
||||
<data name="ToggleCommandPaletteCommandKey" xml:space="preserve">
|
||||
<value>토글 명령 팔레트</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandHistoryCommandKey" xml:space="preserve">
|
||||
<value>최근 명령</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandKey" xml:space="preserve">
|
||||
<value>제안 사항 열기</value>
|
||||
</data>
|
||||
@@ -566,7 +563,7 @@
|
||||
<value>터미널 종료</value>
|
||||
</data>
|
||||
<data name="SetOpacityParentCommandName" xml:space="preserve">
|
||||
<value>배경 불투명도 설정</value>
|
||||
<value>배경 불투명도 설정...</value>
|
||||
</data>
|
||||
<data name="IncreaseOpacityCommandKey" xml:space="preserve">
|
||||
<value>배경 불투명도를 {0}% 증가</value>
|
||||
|
||||
@@ -118,13 +118,13 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="SetColorSchemeParentCommandName" xml:space="preserve">
|
||||
<value>Selecionar esquema de cores</value>
|
||||
<value>Selecionar esquema de cores...</value>
|
||||
</data>
|
||||
<data name="NewTabParentCommandName" xml:space="preserve">
|
||||
<value>Nova guia</value>
|
||||
<value>Nova guia...</value>
|
||||
</data>
|
||||
<data name="SplitPaneParentCommandName" xml:space="preserve">
|
||||
<value>Dividir painel</value>
|
||||
<value>Dividir painel...</value>
|
||||
</data>
|
||||
<data name="ApplicationDisplayNamePortable" xml:space="preserve">
|
||||
<value>Terminal (Portátil)</value>
|
||||
@@ -325,7 +325,7 @@
|
||||
<comment>{Locked="JSON"}. "JSON" is the extension of the file that will be opened.</comment>
|
||||
</data>
|
||||
<data name="OpenTabColorPickerCommandKey" xml:space="preserve">
|
||||
<value>Definir a cor da guia</value>
|
||||
<value>Definir cor da guia...</value>
|
||||
</data>
|
||||
<data name="PasteTextCommandKey" xml:space="preserve">
|
||||
<value>Colar</value>
|
||||
@@ -347,7 +347,7 @@
|
||||
<value>Redefinir título da guia</value>
|
||||
</data>
|
||||
<data name="OpenTabRenamerCommandKey" xml:space="preserve">
|
||||
<value>Renomear título da guia</value>
|
||||
<value>Renomear guia</value>
|
||||
</data>
|
||||
<data name="ResizePaneCommandKey" xml:space="preserve">
|
||||
<value>Redimensionar painel</value>
|
||||
@@ -441,7 +441,7 @@
|
||||
<value>Alternar para a última guia</value>
|
||||
</data>
|
||||
<data name="TabSearchCommandKey" xml:space="preserve">
|
||||
<value>Pesquisar guia</value>
|
||||
<value>Buscar guia...</value>
|
||||
</data>
|
||||
<data name="ToggleAlwaysOnTopCommandKey" xml:space="preserve">
|
||||
<value>Alternar sempre no modo superior</value>
|
||||
@@ -449,9 +449,6 @@
|
||||
<data name="ToggleCommandPaletteCommandKey" xml:space="preserve">
|
||||
<value>Ativar/desativar paleta de comandos</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandHistoryCommandKey" xml:space="preserve">
|
||||
<value>Comandos recentes</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandKey" xml:space="preserve">
|
||||
<value>Abrir sugestões</value>
|
||||
</data>
|
||||
@@ -515,7 +512,7 @@
|
||||
<value>Definir nome da janela</value>
|
||||
</data>
|
||||
<data name="OpenWindowRenamerCommandKey" xml:space="preserve">
|
||||
<value>Renomear janela</value>
|
||||
<value>Renomear janela...</value>
|
||||
</data>
|
||||
<data name="DisplayWorkingDirectoryCommandKey" xml:space="preserve">
|
||||
<value>Exibir o diretório de trabalho atual do Terminal</value>
|
||||
@@ -566,7 +563,7 @@
|
||||
<value>Saia do Terminal</value>
|
||||
</data>
|
||||
<data name="SetOpacityParentCommandName" xml:space="preserve">
|
||||
<value>Definir opacidade da tela de fundo</value>
|
||||
<value>Definir a opacidade da tela de fundo...</value>
|
||||
</data>
|
||||
<data name="IncreaseOpacityCommandKey" xml:space="preserve">
|
||||
<value>Aumentar a opacidade da tela de fundo em {0}%</value>
|
||||
|
||||
@@ -118,13 +118,13 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="SetColorSchemeParentCommandName" xml:space="preserve">
|
||||
<value>Ŝêĺĕćţ ćŏĺбŕ ѕćнêmē !!! !!!</value>
|
||||
<value>Ŝêĺĕćţ ćŏĺбŕ ѕćнêmē... !!! !!! </value>
|
||||
</data>
|
||||
<data name="NewTabParentCommandName" xml:space="preserve">
|
||||
<value>Ŋéŵ тάъ !!</value>
|
||||
<value>Ŋéŵ тάъ... !!!</value>
|
||||
</data>
|
||||
<data name="SplitPaneParentCommandName" xml:space="preserve">
|
||||
<value>Śрĺíŧ ρāлë !!!</value>
|
||||
<value>Śрĺíŧ ρāлë... !!! </value>
|
||||
</data>
|
||||
<data name="ApplicationDisplayNamePortable" xml:space="preserve">
|
||||
<value>Ţèѓmĩŋąĺ (Ρθŗτаьℓ℮) !!! !!!</value>
|
||||
@@ -325,7 +325,7 @@
|
||||
<comment>{Locked="JSON"}. "JSON" is the extension of the file that will be opened.</comment>
|
||||
</data>
|
||||
<data name="OpenTabColorPickerCommandKey" xml:space="preserve">
|
||||
<value>Şėŧ ŧнę ťáь ċσŀőґ !!! !!</value>
|
||||
<value>Şėŧ ŧăь ĉõľοґ... !!! !</value>
|
||||
</data>
|
||||
<data name="PasteTextCommandKey" xml:space="preserve">
|
||||
<value>Ρášτé !</value>
|
||||
@@ -347,7 +347,7 @@
|
||||
<value>Řėś℮ŧ тαв τįтℓę !!! !</value>
|
||||
</data>
|
||||
<data name="OpenTabRenamerCommandKey" xml:space="preserve">
|
||||
<value>Гęйªm℮ тåъ ŧīτļĕ !!! !</value>
|
||||
<value>Гęйªm℮ тåъ !!!</value>
|
||||
</data>
|
||||
<data name="ResizePaneCommandKey" xml:space="preserve">
|
||||
<value>Ґëśîžє рãле !!!</value>
|
||||
@@ -441,7 +441,7 @@
|
||||
<value>Ѕẃітčћ ţõ ťħέ ľάšť ţаь !!! !!! </value>
|
||||
</data>
|
||||
<data name="TabSearchCommandKey" xml:space="preserve">
|
||||
<value>Ѕėàřĉħ ƒôґ ŧâь !!! !</value>
|
||||
<value>Ѕėàřĉħ ƒôґ ŧâь... !!! !!</value>
|
||||
</data>
|
||||
<data name="ToggleAlwaysOnTopCommandKey" xml:space="preserve">
|
||||
<value>Ŧōĝġļě αŀώªÿŝ òⁿ тοр мöðέ !!! !!! !</value>
|
||||
@@ -449,9 +449,6 @@
|
||||
<data name="ToggleCommandPaletteCommandKey" xml:space="preserve">
|
||||
<value>Ţōĝğļė čσmmάήđ рåŀęŧŧз !!! !!! </value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandHistoryCommandKey" xml:space="preserve">
|
||||
<value>Γë¢єйť ćøмmåηđŝ !!! !</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandKey" xml:space="preserve">
|
||||
<value>Ǿрέʼn şµġġеšŧìŏπѕ !!! !</value>
|
||||
</data>
|
||||
@@ -515,7 +512,7 @@
|
||||
<value>Ŗεšзť ωĩйδōẁ ñâмé !!! !!</value>
|
||||
</data>
|
||||
<data name="OpenWindowRenamerCommandKey" xml:space="preserve">
|
||||
<value>Ґёʼnάmë шϊйďθŵ !!! </value>
|
||||
<value>Ґёʼnάmë шϊйďθŵ... !!! !</value>
|
||||
</data>
|
||||
<data name="DisplayWorkingDirectoryCommandKey" xml:space="preserve">
|
||||
<value>Ďіŝρłάỳ Τ℮ѓmìйаĺ'š čûŗяēʼnτ ώоřκìņĝ ďιяęĉтσґỳ !!! !!! !!! !!! !</value>
|
||||
@@ -566,7 +563,7 @@
|
||||
<value>Qυϊτ ŧħз Τέяmίŋăŀ !!! !!</value>
|
||||
</data>
|
||||
<data name="SetOpacityParentCommandName" xml:space="preserve">
|
||||
<value>Ѕěт ьªċķĝґøūņð óφǻĉїτў !!! !!! </value>
|
||||
<value>Ѕěт ьªċķĝґøūņð óφǻĉїτў... !!! !!! !</value>
|
||||
</data>
|
||||
<data name="IncreaseOpacityCommandKey" xml:space="preserve">
|
||||
<value>Ĭñçŕ℮àŝę ваċкġřŏųлď ǿφāςíτу ьỳ {0}% !!! !!! !!! !</value>
|
||||
|
||||
@@ -118,13 +118,13 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="SetColorSchemeParentCommandName" xml:space="preserve">
|
||||
<value>Ŝêĺĕćţ ćŏĺбŕ ѕćнêmē !!! !!!</value>
|
||||
<value>Ŝêĺĕćţ ćŏĺбŕ ѕćнêmē... !!! !!! </value>
|
||||
</data>
|
||||
<data name="NewTabParentCommandName" xml:space="preserve">
|
||||
<value>Ŋéŵ тάъ !!</value>
|
||||
<value>Ŋéŵ тάъ... !!!</value>
|
||||
</data>
|
||||
<data name="SplitPaneParentCommandName" xml:space="preserve">
|
||||
<value>Śрĺíŧ ρāлë !!!</value>
|
||||
<value>Śрĺíŧ ρāлë... !!! </value>
|
||||
</data>
|
||||
<data name="ApplicationDisplayNamePortable" xml:space="preserve">
|
||||
<value>Ţèѓmĩŋąĺ (Ρθŗτаьℓ℮) !!! !!!</value>
|
||||
@@ -325,7 +325,7 @@
|
||||
<comment>{Locked="JSON"}. "JSON" is the extension of the file that will be opened.</comment>
|
||||
</data>
|
||||
<data name="OpenTabColorPickerCommandKey" xml:space="preserve">
|
||||
<value>Şėŧ ŧнę ťáь ċσŀőґ !!! !!</value>
|
||||
<value>Şėŧ ŧăь ĉõľοґ... !!! !</value>
|
||||
</data>
|
||||
<data name="PasteTextCommandKey" xml:space="preserve">
|
||||
<value>Ρášτé !</value>
|
||||
@@ -347,7 +347,7 @@
|
||||
<value>Řėś℮ŧ тαв τįтℓę !!! !</value>
|
||||
</data>
|
||||
<data name="OpenTabRenamerCommandKey" xml:space="preserve">
|
||||
<value>Гęйªm℮ тåъ ŧīτļĕ !!! !</value>
|
||||
<value>Гęйªm℮ тåъ !!!</value>
|
||||
</data>
|
||||
<data name="ResizePaneCommandKey" xml:space="preserve">
|
||||
<value>Ґëśîžє рãле !!!</value>
|
||||
@@ -441,7 +441,7 @@
|
||||
<value>Ѕẃітčћ ţõ ťħέ ľάšť ţаь !!! !!! </value>
|
||||
</data>
|
||||
<data name="TabSearchCommandKey" xml:space="preserve">
|
||||
<value>Ѕėàřĉħ ƒôґ ŧâь !!! !</value>
|
||||
<value>Ѕėàřĉħ ƒôґ ŧâь... !!! !!</value>
|
||||
</data>
|
||||
<data name="ToggleAlwaysOnTopCommandKey" xml:space="preserve">
|
||||
<value>Ŧōĝġļě αŀώªÿŝ òⁿ тοр мöðέ !!! !!! !</value>
|
||||
@@ -449,9 +449,6 @@
|
||||
<data name="ToggleCommandPaletteCommandKey" xml:space="preserve">
|
||||
<value>Ţōĝğļė čσmmάήđ рåŀęŧŧз !!! !!! </value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandHistoryCommandKey" xml:space="preserve">
|
||||
<value>Γë¢єйť ćøмmåηđŝ !!! !</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandKey" xml:space="preserve">
|
||||
<value>Ǿрέʼn şµġġеšŧìŏπѕ !!! !</value>
|
||||
</data>
|
||||
@@ -515,7 +512,7 @@
|
||||
<value>Ŗεšзť ωĩйδōẁ ñâмé !!! !!</value>
|
||||
</data>
|
||||
<data name="OpenWindowRenamerCommandKey" xml:space="preserve">
|
||||
<value>Ґёʼnάmë шϊйďθŵ !!! </value>
|
||||
<value>Ґёʼnάmë шϊйďθŵ... !!! !</value>
|
||||
</data>
|
||||
<data name="DisplayWorkingDirectoryCommandKey" xml:space="preserve">
|
||||
<value>Ďіŝρłάỳ Τ℮ѓmìйаĺ'š čûŗяēʼnτ ώоřκìņĝ ďιяęĉтσґỳ !!! !!! !!! !!! !</value>
|
||||
@@ -566,7 +563,7 @@
|
||||
<value>Qυϊτ ŧħз Τέяmίŋăŀ !!! !!</value>
|
||||
</data>
|
||||
<data name="SetOpacityParentCommandName" xml:space="preserve">
|
||||
<value>Ѕěт ьªċķĝґøūņð óφǻĉїτў !!! !!! </value>
|
||||
<value>Ѕěт ьªċķĝґøūņð óφǻĉїτў... !!! !!! !</value>
|
||||
</data>
|
||||
<data name="IncreaseOpacityCommandKey" xml:space="preserve">
|
||||
<value>Ĭñçŕ℮àŝę ваċкġřŏųлď ǿφāςíτу ьỳ {0}% !!! !!! !!! !</value>
|
||||
|
||||
@@ -118,13 +118,13 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="SetColorSchemeParentCommandName" xml:space="preserve">
|
||||
<value>Ŝêĺĕćţ ćŏĺбŕ ѕćнêmē !!! !!!</value>
|
||||
<value>Ŝêĺĕćţ ćŏĺбŕ ѕćнêmē... !!! !!! </value>
|
||||
</data>
|
||||
<data name="NewTabParentCommandName" xml:space="preserve">
|
||||
<value>Ŋéŵ тάъ !!</value>
|
||||
<value>Ŋéŵ тάъ... !!!</value>
|
||||
</data>
|
||||
<data name="SplitPaneParentCommandName" xml:space="preserve">
|
||||
<value>Śрĺíŧ ρāлë !!!</value>
|
||||
<value>Śрĺíŧ ρāлë... !!! </value>
|
||||
</data>
|
||||
<data name="ApplicationDisplayNamePortable" xml:space="preserve">
|
||||
<value>Ţèѓmĩŋąĺ (Ρθŗτаьℓ℮) !!! !!!</value>
|
||||
@@ -325,7 +325,7 @@
|
||||
<comment>{Locked="JSON"}. "JSON" is the extension of the file that will be opened.</comment>
|
||||
</data>
|
||||
<data name="OpenTabColorPickerCommandKey" xml:space="preserve">
|
||||
<value>Şėŧ ŧнę ťáь ċσŀőґ !!! !!</value>
|
||||
<value>Şėŧ ŧăь ĉõľοґ... !!! !</value>
|
||||
</data>
|
||||
<data name="PasteTextCommandKey" xml:space="preserve">
|
||||
<value>Ρášτé !</value>
|
||||
@@ -347,7 +347,7 @@
|
||||
<value>Řėś℮ŧ тαв τįтℓę !!! !</value>
|
||||
</data>
|
||||
<data name="OpenTabRenamerCommandKey" xml:space="preserve">
|
||||
<value>Гęйªm℮ тåъ ŧīτļĕ !!! !</value>
|
||||
<value>Гęйªm℮ тåъ !!!</value>
|
||||
</data>
|
||||
<data name="ResizePaneCommandKey" xml:space="preserve">
|
||||
<value>Ґëśîžє рãле !!!</value>
|
||||
@@ -441,7 +441,7 @@
|
||||
<value>Ѕẃітčћ ţõ ťħέ ľάšť ţаь !!! !!! </value>
|
||||
</data>
|
||||
<data name="TabSearchCommandKey" xml:space="preserve">
|
||||
<value>Ѕėàřĉħ ƒôґ ŧâь !!! !</value>
|
||||
<value>Ѕėàřĉħ ƒôґ ŧâь... !!! !!</value>
|
||||
</data>
|
||||
<data name="ToggleAlwaysOnTopCommandKey" xml:space="preserve">
|
||||
<value>Ŧōĝġļě αŀώªÿŝ òⁿ тοр мöðέ !!! !!! !</value>
|
||||
@@ -449,9 +449,6 @@
|
||||
<data name="ToggleCommandPaletteCommandKey" xml:space="preserve">
|
||||
<value>Ţōĝğļė čσmmάήđ рåŀęŧŧз !!! !!! </value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandHistoryCommandKey" xml:space="preserve">
|
||||
<value>Γë¢єйť ćøмmåηđŝ !!! !</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandKey" xml:space="preserve">
|
||||
<value>Ǿрέʼn şµġġеšŧìŏπѕ !!! !</value>
|
||||
</data>
|
||||
@@ -515,7 +512,7 @@
|
||||
<value>Ŗεšзť ωĩйδōẁ ñâмé !!! !!</value>
|
||||
</data>
|
||||
<data name="OpenWindowRenamerCommandKey" xml:space="preserve">
|
||||
<value>Ґёʼnάmë шϊйďθŵ !!! </value>
|
||||
<value>Ґёʼnάmë шϊйďθŵ... !!! !</value>
|
||||
</data>
|
||||
<data name="DisplayWorkingDirectoryCommandKey" xml:space="preserve">
|
||||
<value>Ďіŝρłάỳ Τ℮ѓmìйаĺ'š čûŗяēʼnτ ώоřκìņĝ ďιяęĉтσґỳ !!! !!! !!! !!! !</value>
|
||||
@@ -566,7 +563,7 @@
|
||||
<value>Qυϊτ ŧħз Τέяmίŋăŀ !!! !!</value>
|
||||
</data>
|
||||
<data name="SetOpacityParentCommandName" xml:space="preserve">
|
||||
<value>Ѕěт ьªċķĝґøūņð óφǻĉїτў !!! !!! </value>
|
||||
<value>Ѕěт ьªċķĝґøūņð óφǻĉїτў... !!! !!! !</value>
|
||||
</data>
|
||||
<data name="IncreaseOpacityCommandKey" xml:space="preserve">
|
||||
<value>Ĭñçŕ℮àŝę ваċкġřŏųлď ǿφāςíτу ьỳ {0}% !!! !!! !!! !</value>
|
||||
|
||||
@@ -118,13 +118,13 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="SetColorSchemeParentCommandName" xml:space="preserve">
|
||||
<value>Выбрать цветовую схему</value>
|
||||
<value>Выбрать цветовую схему...</value>
|
||||
</data>
|
||||
<data name="NewTabParentCommandName" xml:space="preserve">
|
||||
<value>Новая вкладка</value>
|
||||
<value>Новая вкладка...</value>
|
||||
</data>
|
||||
<data name="SplitPaneParentCommandName" xml:space="preserve">
|
||||
<value>Разделить область</value>
|
||||
<value>Разделить область...</value>
|
||||
</data>
|
||||
<data name="ApplicationDisplayNamePortable" xml:space="preserve">
|
||||
<value>Терминал (переносной)</value>
|
||||
@@ -325,7 +325,7 @@
|
||||
<comment>{Locked="JSON"}. "JSON" is the extension of the file that will be opened.</comment>
|
||||
</data>
|
||||
<data name="OpenTabColorPickerCommandKey" xml:space="preserve">
|
||||
<value>Задать цвет вкладки</value>
|
||||
<value>Установить цвет вкладки...</value>
|
||||
</data>
|
||||
<data name="PasteTextCommandKey" xml:space="preserve">
|
||||
<value>Вставить</value>
|
||||
@@ -347,7 +347,7 @@
|
||||
<value>Сбросить заголовок вкладки</value>
|
||||
</data>
|
||||
<data name="OpenTabRenamerCommandKey" xml:space="preserve">
|
||||
<value>Переименовать заголовок вкладки</value>
|
||||
<value>Переименовать вкладку</value>
|
||||
</data>
|
||||
<data name="ResizePaneCommandKey" xml:space="preserve">
|
||||
<value>Изменить размер области</value>
|
||||
@@ -441,7 +441,7 @@
|
||||
<value>Переключиться на последнюю вкладку</value>
|
||||
</data>
|
||||
<data name="TabSearchCommandKey" xml:space="preserve">
|
||||
<value>Поиск вкладки</value>
|
||||
<value>Поиск вкладки...</value>
|
||||
</data>
|
||||
<data name="ToggleAlwaysOnTopCommandKey" xml:space="preserve">
|
||||
<value>Режим "поверх других окон"</value>
|
||||
@@ -449,9 +449,6 @@
|
||||
<data name="ToggleCommandPaletteCommandKey" xml:space="preserve">
|
||||
<value>Показать или скрыть палитру команд</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandHistoryCommandKey" xml:space="preserve">
|
||||
<value>Последние команды</value>
|
||||
</data>
|
||||
<data name="SuggestionsCommandKey" xml:space="preserve">
|
||||
<value>Открыть предложения</value>
|
||||
</data>
|
||||
@@ -515,7 +512,7 @@
|
||||
<value>Сбросить имя окна</value>
|
||||
</data>
|
||||
<data name="OpenWindowRenamerCommandKey" xml:space="preserve">
|
||||
<value>Переименовать окно</value>
|
||||
<value>Переименовать окно...</value>
|
||||
</data>
|
||||
<data name="DisplayWorkingDirectoryCommandKey" xml:space="preserve">
|
||||
<value>Отобразить текущий рабочий каталог Терминала</value>
|
||||
@@ -566,7 +563,7 @@
|
||||
<value>Выйти из терминала</value>
|
||||
</data>
|
||||
<data name="SetOpacityParentCommandName" xml:space="preserve">
|
||||
<value>Установить непрозрачность фона</value>
|
||||
<value>Установить непрозрачность фона...</value>
|
||||
</data>
|
||||
<data name="IncreaseOpacityCommandKey" xml:space="preserve">
|
||||
<value>Увеличить непрозрачность фона на {0}%</value>
|
||||
|
||||