Compare commits

..

23 Commits

Author SHA1 Message Date
Eugene Pankov
8116ab733f search panel layout fix 2023-03-21 12:51:49 +01:00
Eugene Pankov
92513814e4 lint 2023-03-21 10:36:40 +01:00
Eugene Pankov
0f71618cb8 fixed #8100 - search box layout issues in the new theme 2023-03-20 09:52:14 +01:00
Eugene Pankov
8cba805522 moved more electron stuff out of tabby-local 2023-03-19 13:20:30 +01:00
Eugene Pankov
35ca7015c8 moved electron-specific parts of tabby-local into tabby-electron 2023-03-19 12:39:31 +01:00
Eugene Pankov
2e72774548 fixed copying as HTML - fixes #8092, fixes #8091 2023-03-19 10:41:31 +01:00
Eugene Pankov
beb7c614bc fixed #8093 - SFTP panel visual issues 2023-03-19 10:09:43 +01:00
Eugene Pankov
ef3c9e3be0 fixed #8028 - ghost panes and missing pane drag handle 2023-03-18 20:01:28 +01:00
Eugene Pankov
ceb9b3cca8 fixed close button color 2023-03-18 17:08:14 +01:00
Eugene Pankov
55a9aaaf32 fixed window close button alignment 2023-03-18 17:07:33 +01:00
Eugene Pankov
9bd7a92bf8 fixed infinite spinner loop 2023-03-18 16:45:47 +01:00
Eugene Pankov
c2e7241a64 fixed #8088 - new theme bugs 2023-03-18 16:45:42 +01:00
Eugene Pankov
685a0ab9f5 updated locales 2023-03-18 00:09:08 +01:00
Eugene Pankov
abddfe85d5 fixed #7637 2023-03-07 19:00:35 +01:00
Eugene Pankov
95f7ad21bb variable theme spaciness 2023-03-07 19:00:28 +01:00
Eugene Pankov
ccaf98aaa0 Merge branch 'master' of github.com:Eugeny/tabby 2023-03-07 19:00:09 +01:00
allcontributors[bot]
cdd8be97ed add karaketir16 as a contributor for code (#8036)
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
2023-03-05 22:37:27 +01:00
Osman Karaketir
c8b5501a5f Fix serial Hexadecimal write (#8035) 2023-03-05 21:46:36 +01:00
Eugene Pankov
aef6037333 pin nan version - fixes #7883 2023-02-27 22:54:48 +01:00
Eugene Pankov
441f442915 typing fixes 2023-02-27 00:09:04 +01:00
Eugene
1e5cfd1d4b bootstrap 5 WIP (#7891)
New standard theme that follows your chosen terminal colors, Bootstrap 5 & Angular 15 upgrade
2023-02-26 20:42:31 +01:00
Eugene Pankov
7a8108b20d updated locales 2023-02-20 11:40:49 +01:00
Eugene Pankov
34cf60617a . 2023-02-14 09:05:05 +01:00
122 changed files with 756 additions and 2988 deletions

View File

@@ -1121,6 +1121,15 @@
"contributions": [
"code"
]
},
{
"login": "karaketir16",
"name": "Osman Karaketir",
"avatar_url": "https://avatars.githubusercontent.com/u/27349806?v=4",
"profile": "https://github.com/karaketir16",
"contributions": [
"code"
]
}
],
"contributorsPerLine": 7,

View File

@@ -312,6 +312,7 @@ Dank geht an diese wunderbaren Menschen ([emoji key](https://allcontributors.org
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -314,6 +314,7 @@ Gracias a estas maravillosas personas ([emoji key](https://allcontributors.org/d
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -311,6 +311,7 @@ Terima kasih kepada mereka yang telah membantu ([emoji key](https://allcontribut
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -307,6 +307,7 @@ Grazie a queste persone meravigliose ([emoji key](https://allcontributors.org/do
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -311,6 +311,7 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -301,6 +301,7 @@ Pull requests and plugins are welcome!
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -321,6 +321,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -315,6 +315,7 @@ Obrigado vai para essas pessoas maravilhosas ([emoji key](https://allcontributor
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -307,6 +307,7 @@ Pull-запросы и плагины приветствуются!
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -306,6 +306,7 @@
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Clem-Fern"><img src="https://avatars.githubusercontent.com/u/20025949?v=4?s=100" width="100px;" alt="Clem"/><br /><sub><b>Clem</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Clem-Fern" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
</tr>
</tbody>
</table>

View File

@@ -1,3 +1,7 @@
html {
--spaciness: 1;
}
body {
min-height: 100vh;
overflow: hidden;
@@ -21,8 +25,8 @@ a, button {
& > svg {
pointer-events: none;
width: 16px;
height: 16px;
// width: 16px;
// height: 16px;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Afrikaans\n"
"Language: af_ZA\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-03-17 23:07\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -256,7 +256,7 @@ msgstr "Syfers"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "Opruim"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -340,7 +340,7 @@ msgstr "Kompak"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "Opstelling geskrap"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Bulgarian\n"
"Language: bg_BG\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-02-20 10:39\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -256,7 +256,7 @@ msgstr "Шифри"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "Изчисти"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -268,7 +268,7 @@ msgstr "Изчисти терминала"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr ""
msgstr "Изчисти терминала след свързване"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
@@ -340,7 +340,7 @@ msgstr "Компактна"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "Конфигурацията е изтрита"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"
@@ -419,7 +419,7 @@ msgstr "Копирай текущия път"
#: tabby-electron/src/sftpContextMenu.ts:29
msgid "Copy full path"
msgstr ""
msgstr "Копирай пълния път"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97
msgid "Copy on select"
@@ -545,7 +545,7 @@ msgstr "Изтрий предишна дума"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114
msgid "Delete the config on the remote side?"
msgstr ""
msgstr "Изтриване конфигурацията на отсрещната страна?"
#: tabby-settings/src/components/profilesSettingsTab.component.ts:214
msgid "Delete the group's profiles?"
@@ -700,7 +700,7 @@ msgstr "Включи автоматично инсталиране на нали
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:222
msgid "Enable fluent background option"
msgstr ""
msgstr "Включи на опцията за плавен фон"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16
msgid "Enable font ligatures"
@@ -749,7 +749,7 @@ msgstr "Пример:"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:223
msgid "Experimental Windows 10 background style known to cause issues"
msgstr ""
msgstr "Експериментален стил на фона на Windows 10, за който се знае, че причинява проблеми"
#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27
msgid "Export"
@@ -982,7 +982,7 @@ msgstr "Бързи клавиши"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:71
msgid "How Tabby presents itself through environment vars"
msgstr ""
msgstr "Как Tabby се представя чрез променливи на средата"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24
msgid "HTTP proxy"
@@ -1910,7 +1910,7 @@ msgstr "Покажи серийните връзки"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:163
msgid "Show tabs in fullscreen mode"
msgstr ""
msgstr "Показване на табове в режим на цял екран"
#: tabby-terminal/src/tabContextMenu.ts:58
msgid "Show toolbar"
@@ -2127,7 +2127,7 @@ msgstr "Звънец на терминала"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:70
msgid "Terminal identification"
msgstr ""
msgstr "Идентифициране на терминала"
#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7
msgid "Thank you for downloading Tabby!"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Spanish\n"
"Language: es_ES\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-02-20 10:39\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -256,7 +256,7 @@ msgstr "Cifrados"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "Limpiar"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -268,7 +268,7 @@ msgstr "Limpiar terminal"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr ""
msgstr "Limpiar el terminal al cerrar la conexión"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: French\n"
"Language: fr_FR\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-03-17 23:07\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -256,7 +256,7 @@ msgstr "Chiffrement"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "Effacer"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -268,7 +268,7 @@ msgstr "Effacer le terminal"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr ""
msgstr "Effacer le terminal après la connexion"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
@@ -340,7 +340,7 @@ msgstr "Compact"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "Configuration supprimée"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"
@@ -410,7 +410,7 @@ msgstr "Copié"
#: tabby-terminal/src/tabContextMenu.ts:26
msgid "Copy"
msgstr "Copie"
msgstr "Copier"
#: tabby-terminal/src/hotkeys.ts:70
#: tabby-terminal/src/tabContextMenu.ts:66
@@ -419,7 +419,7 @@ msgstr "Copier le chemin actuel"
#: tabby-electron/src/sftpContextMenu.ts:29
msgid "Copy full path"
msgstr ""
msgstr "Copier le chemin complet"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97
msgid "Copy on select"
@@ -545,7 +545,7 @@ msgstr "Supprimer le mot précédent"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114
msgid "Delete the config on the remote side?"
msgstr ""
msgstr "Supprimer la configuration du côté distant ?"
#: tabby-settings/src/components/profilesSettingsTab.component.ts:214
msgid "Delete the group's profiles?"
@@ -982,7 +982,7 @@ msgstr "Raccourcis clavier"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:71
msgid "How Tabby presents itself through environment vars"
msgstr ""
msgstr "Comment Tabby se présente à travers les variables d'environnement"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24
msgid "HTTP proxy"
@@ -2127,7 +2127,7 @@ msgstr "Bip du terminal"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:70
msgid "Terminal identification"
msgstr ""
msgstr "Identification du terminal"
#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7
msgid "Thank you for downloading Tabby!"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Italian\n"
"Language: it_IT\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-02-20 10:39\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -256,7 +256,7 @@ msgstr "Crittografie"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "Pulisci"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -268,7 +268,7 @@ msgstr "Pulisci il terminale"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr ""
msgstr "Pulisci il terminale dopo la connessione"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
@@ -340,7 +340,7 @@ msgstr "Compatto"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "Configurazione eliminata"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"
@@ -419,7 +419,7 @@ msgstr "Copia percorso corrente"
#: tabby-electron/src/sftpContextMenu.ts:29
msgid "Copy full path"
msgstr ""
msgstr "Copia percorso completo"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97
msgid "Copy on select"
@@ -545,7 +545,7 @@ msgstr "Elimina parola precedente"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114
msgid "Delete the config on the remote side?"
msgstr ""
msgstr "Eliminare la configurazione sul dispositivo remoto?"
#: tabby-settings/src/components/profilesSettingsTab.component.ts:214
msgid "Delete the group's profiles?"
@@ -700,7 +700,7 @@ msgstr "Abilita l'installazione automatica degli aggiornamenti quando sono dispo
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:222
msgid "Enable fluent background option"
msgstr ""
msgstr "Abilita l'opzione di sfondo fluente"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16
msgid "Enable font ligatures"
@@ -749,7 +749,7 @@ msgstr "Esempio:"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:223
msgid "Experimental Windows 10 background style known to cause issues"
msgstr ""
msgstr "Sfondo sperimentale basati sullo stile di Windows 10, sono noti dei problemi"
#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27
msgid "Export"
@@ -982,7 +982,7 @@ msgstr "Tasti di scelta rapida"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:71
msgid "How Tabby presents itself through environment vars"
msgstr ""
msgstr "Come Tabby si presenta attraverso le variabili dell'ambiente"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24
msgid "HTTP proxy"
@@ -1910,7 +1910,7 @@ msgstr "Mostra connessioni seriali"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:163
msgid "Show tabs in fullscreen mode"
msgstr ""
msgstr "Mostra schede in modalità schermo intero"
#: tabby-terminal/src/tabContextMenu.ts:58
msgid "Show toolbar"
@@ -2127,7 +2127,7 @@ msgstr "Notifiche del terminale"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:70
msgid "Terminal identification"
msgstr ""
msgstr "Identificazione del terminale"
#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7
msgid "Thank you for downloading Tabby!"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Japanese\n"
"Language: ja_JP\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-03-17 23:07\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -23,7 +23,7 @@ msgstr "{name} コピー"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:82
msgid "A second font family used to display characters missing in the main font"
msgstr "既定フォントに不足してる文字を補う代替フォント"
msgstr "既定フォントに不足してる文字を表示する際に使用されます"
#: tabby-core/src/components/transfersMenu.component.ts:49
msgid "Abort all"
@@ -148,7 +148,7 @@ msgstr "自動"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:156
msgid "Auto-open a terminal on app start"
msgstr "アプリケーション起動時に端末を自動で開く"
msgstr "アプリケーション起動時に新しい端末を自動で開く"
#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:13
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:53
@@ -256,7 +256,7 @@ msgstr "暗号方式"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "クリア"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -268,7 +268,7 @@ msgstr "端末をクリア"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr ""
msgstr "接続後に端末をクリア"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
@@ -340,7 +340,7 @@ msgstr "コンパクト"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "設定が消去されました"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"
@@ -419,7 +419,7 @@ msgstr "現在のパスをコピー"
#: tabby-electron/src/sftpContextMenu.ts:29
msgid "Copy full path"
msgstr ""
msgstr "フルパスをコピー"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97
msgid "Copy on select"
@@ -545,7 +545,7 @@ msgstr "前の単語を削除"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114
msgid "Delete the config on the remote side?"
msgstr ""
msgstr "リモート側の設定を消去しますか?"
#: tabby-settings/src/components/profilesSettingsTab.component.ts:214
msgid "Delete the group's profiles?"
@@ -581,7 +581,7 @@ msgstr "動的なタブ名を無効にする"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:229
msgid "Disable fluent background while dragging"
msgstr "ドラッグ中Fluentを無効にする"
msgstr "ドラッグ中Fluentを無効にする"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:215
msgid "Disable GPU acceleration"
@@ -646,7 +646,7 @@ msgstr "ドック表示"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75
msgid "Double-click selection will stop at these characters"
msgstr "ダブルクリックによる選択時に区切りとなる文字を設定できます"
msgstr "ダブルクリックによるテキスト選択時に区切りとなる文字を設定できます"
#: tabby-core/src/tabContextMenu.ts:79
msgid "Down"
@@ -700,7 +700,7 @@ msgstr "アップデートが利用可能になったら自動的にインスト
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:222
msgid "Enable fluent background option"
msgstr "fluent背景の詳細設定を有効にする"
msgstr "Fluent背景設定を有効にする"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16
msgid "Enable font ligatures"
@@ -841,7 +841,7 @@ msgstr "フォント"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201
msgid "For keyboard shortcuts"
msgstr "キーボードショートカット"
msgstr "キーボードショートカット利用時に反映されます"
#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51
msgid "Force CR"
@@ -982,7 +982,7 @@ msgstr "ホットキー"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:71
msgid "How Tabby presents itself through environment vars"
msgstr ""
msgstr "環境変数を利用してTabbyを他の端末のように扱わせます"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24
msgid "HTTP proxy"
@@ -1307,7 +1307,7 @@ msgstr "標準"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:22
msgid "Normal font weight"
msgstr "通常フォントの太さ"
msgstr "標準フォントの太さ"
#: tabby-terminal/src/components/searchPanel.component.ts:54
#: tabby-terminal/src/components/searchPanel.component.ts:64
@@ -1458,7 +1458,7 @@ msgstr "テキストを選択していない場合は貼り付け、選択中は
#: tabby-terminal/src/api/baseTerminalTab.component.ts:484
msgid "Paste multiple lines?"
msgstr "複数行の貼り付けを行いますか?"
msgstr "複数行の貼り付けを実行してもよろしいですか?"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68
msgid "Paste on middle-click"
@@ -1608,7 +1608,7 @@ msgstr "リモート"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124
msgid "Remove whitespace and newlines around the copied text"
msgstr "コピーしたテキスト前後のスペースや改行を除します"
msgstr "コピーしたテキストに含まれる前後の余分なスペースや改行を除します"
#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25
#: tabby-core/src/tabContextMenu.ts:120
@@ -1668,7 +1668,7 @@ msgstr "変更を反映するには再起動が必要です"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:162
msgid "Restore terminal tabs on app start"
msgstr "アプリケーション起動時に端末タブを復元する"
msgstr "アプリケーション起動時に以前開いていたタブを復元する"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:147
msgid "Reuse session for multiple tabs"
@@ -1744,7 +1744,7 @@ msgstr "バックスクロール"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47
msgid "Scrolls the terminal to the bottom on user input"
msgstr "ユーザー入力時に端末をにスクロール"
msgstr "入力時に端末を最下部にスクロールします"
#: tabby-terminal/src/hotkeys.ts:74
msgid "Search"
@@ -1862,7 +1862,7 @@ msgstr "{type} プロファイルセレクターを表示"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117
msgid "Show a confirmation box when pasting multiple lines"
msgstr "複数行を貼り付けるときに確認ボックスを表示します"
msgstr "複数行を貼り付けるに確認ボックスを表示します"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:63
msgid "Show built-in profiles in selector"
@@ -2023,7 +2023,7 @@ msgstr "最新情報を受け取る"
#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:17
msgid "Substitutions allowed."
msgstr "置換することができます"
msgstr "置き換えに対応しています"
#: tabby-core/src/tabContextMenu.ts:290
msgid "Switch profile"
@@ -2127,7 +2127,7 @@ msgstr "端末音"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:70
msgid "Terminal identification"
msgstr ""
msgstr "端末の識別情報"
#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7
msgid "Thank you for downloading Tabby!"
@@ -2312,7 +2312,7 @@ msgstr "複数行貼り付け時に警告"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5
msgid "Warn when closing active connections"
msgstr "使用中の接続を閉じたときに警告"
msgstr "使用中の接続を閉じる際に警告"
#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6
msgid "Warning: remote host's key has suddenly changed!"

View File

@@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Korean\n"
"Language: ko_KR\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-03-17 23:07\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
msgstr "\"{command}\" 명령어가 여전히 동작중입니다. 닫을까요?"
msgstr "\"{command}\" 명령어가 동작중입니다. 창을 닫으시겠습니까?"
#: tabby-settings/src/components/profilesSettingsTab.component.ts:79
#: tabby-settings/src/components/profilesSettingsTab.component.ts:90
@@ -23,7 +23,7 @@ msgstr "{name} 복사"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:82
msgid "A second font family used to display characters missing in the main font"
msgstr "메인 글꼴에서 누락된 문자를 표시하기 위해 사용하는 2번째 글꼴"
msgstr "설정된 폰트 누락시 대체하기 위한 폰트"
#: tabby-core/src/components/transfersMenu.component.ts:49
msgid "Abort all"
@@ -35,7 +35,7 @@ msgstr "허용 후 키 저장"
#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25
msgid "Accept just this once"
msgstr "이번 한번만 허용"
msgstr "지금만 허용하기"
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84
msgid "Accessibility"
@@ -256,7 +256,7 @@ msgstr "암호화"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "지우기"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -268,7 +268,7 @@ msgstr "터미널 비우기"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr ""
msgstr "연결 후 터미널 지우기"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
@@ -340,7 +340,7 @@ msgstr "콤팩트"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "설정 삭제됨"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"
@@ -419,7 +419,7 @@ msgstr "현재 경로 복사"
#: tabby-electron/src/sftpContextMenu.ts:29
msgid "Copy full path"
msgstr ""
msgstr "전체 경로 복사"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97
msgid "Copy on select"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Portuguese, Brazilian\n"
"Language: pt_BR\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-03-17 23:07\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -209,7 +209,7 @@ msgstr "Colar entre colchetes (requer suporte ao \"shell\")"
#: tabby-terminal/src/services/multifocus.service.ts:19
msgid "Broadcast mode. Click anywhere to cancel."
msgstr ""
msgstr "Modo de transmissão. Clique em qualquer lugar para cancelar."
#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:54
#: tabby-settings/src/components/profilesSettingsTab.component.ts:175
@@ -256,7 +256,7 @@ msgstr "Cifras"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "Limpar"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -268,7 +268,7 @@ msgstr "Limpar terminal"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr ""
msgstr "Limpar terminal após conexão"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
@@ -340,7 +340,7 @@ msgstr "Compacto"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "Configuração excluída"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"
@@ -419,7 +419,7 @@ msgstr "Copiar o caminho atual"
#: tabby-electron/src/sftpContextMenu.ts:29
msgid "Copy full path"
msgstr ""
msgstr "Copiar caminho completo"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97
msgid "Copy on select"
@@ -545,7 +545,7 @@ msgstr "Excluir palavra anterior"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114
msgid "Delete the config on the remote side?"
msgstr ""
msgstr "Excluir a configuração do lado remoto?"
#: tabby-settings/src/components/profilesSettingsTab.component.ts:214
msgid "Delete the group's profiles?"
@@ -785,7 +785,7 @@ msgstr "Focar todos os painéis"
#: tabby-terminal/src/hotkeys.ts:78
msgid "Focus all panes at once (broadcast)"
msgstr "Focar todos os painéis de uma vez (Broadcast)"
msgstr "Focar todos os painéis de uma vez (Transmissão)"
#: tabby-terminal/src/tabContextMenu.ts:71
msgid "Focus all tabs"
@@ -1910,7 +1910,7 @@ msgstr "Mostrar conexões em série"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:163
msgid "Show tabs in fullscreen mode"
msgstr ""
msgstr "Mostrar abas no modo de tela cheia"
#: tabby-terminal/src/tabContextMenu.ts:58
msgid "Show toolbar"

View File

@@ -10,11 +10,11 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Swedish\n"
"Language: sv_SE\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-02-20 10:39\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
msgstr "\"{command}\" körs fortfarande. Stänga?"
msgstr "\"{command}\" körs fortfarande. Stäng?"
#: tabby-settings/src/components/profilesSettingsTab.component.ts:79
#: tabby-settings/src/components/profilesSettingsTab.component.ts:90
@@ -256,7 +256,7 @@ msgstr "Chiffer"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "Rensa"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -268,7 +268,7 @@ msgstr "Rensa terminal"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr ""
msgstr "Rensa terminal efter anslutning"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
@@ -340,7 +340,7 @@ msgstr "Kompakt"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "Konfiguration borttagen"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"
@@ -419,7 +419,7 @@ msgstr "Kopiera aktuell sökväg"
#: tabby-electron/src/sftpContextMenu.ts:29
msgid "Copy full path"
msgstr ""
msgstr "Kopiera fullständig sökväg"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97
msgid "Copy on select"
@@ -545,7 +545,7 @@ msgstr "Radera föregående ord"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114
msgid "Delete the config on the remote side?"
msgstr ""
msgstr "Ta bort konfigurationen på fjärrsidan?"
#: tabby-settings/src/components/profilesSettingsTab.component.ts:214
msgid "Delete the group's profiles?"
@@ -982,7 +982,7 @@ msgstr "Snabbtangenter"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:71
msgid "How Tabby presents itself through environment vars"
msgstr ""
msgstr "Hur Tabby presenterar sig genom miljövariabler"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24
msgid "HTTP proxy"
@@ -2127,7 +2127,7 @@ msgstr "Terminalklocka"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:70
msgid "Terminal identification"
msgstr ""
msgstr "Terminal identifiering"
#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7
msgid "Thank you for downloading Tabby!"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Ukrainian\n"
"Language: uk_UA\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-02-20 10:39\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -256,7 +256,7 @@ msgstr "Шифри"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "Очистити"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -268,7 +268,7 @@ msgstr "Очистити термінал"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr ""
msgstr "Очистити термінал після підключення"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
@@ -340,7 +340,7 @@ msgstr "Компактний"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "Конфігурацію видалено"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"
@@ -419,7 +419,7 @@ msgstr "Копіювати поточний шлях"
#: tabby-electron/src/sftpContextMenu.ts:29
msgid "Copy full path"
msgstr ""
msgstr "Копіювати повний шлях"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97
msgid "Copy on select"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Chinese Simplified\n"
"Language: zh_CN\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-03-17 23:07\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -23,7 +23,7 @@ msgstr "{name} 副本"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:82
msgid "A second font family used to display characters missing in the main font"
msgstr "第二种字体,用于显示主字体中缺失的字符"
msgstr "首选字体缺失时使用备选字体显示字符"
#: tabby-core/src/components/transfersMenu.component.ts:49
msgid "Abort all"
@@ -256,7 +256,7 @@ msgstr "加密方法"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "清除"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -268,7 +268,7 @@ msgstr "清空终端内容"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr ""
msgstr "连接后清空终端"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
@@ -340,7 +340,7 @@ msgstr "紧凑"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "配置已删除"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"
@@ -419,7 +419,7 @@ msgstr "复制当前路径"
#: tabby-electron/src/sftpContextMenu.ts:29
msgid "Copy full path"
msgstr ""
msgstr "复制完整路径"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97
msgid "Copy on select"
@@ -545,7 +545,7 @@ msgstr "删除上一个单词"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114
msgid "Delete the config on the remote side?"
msgstr ""
msgstr "是否删除远程配置?"
#: tabby-settings/src/components/profilesSettingsTab.component.ts:214
msgid "Delete the group's profiles?"
@@ -982,7 +982,7 @@ msgstr "快捷键"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:71
msgid "How Tabby presents itself through environment vars"
msgstr ""
msgstr "Tabby如何通过环境变量呈现自己"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24
msgid "HTTP proxy"
@@ -1736,7 +1736,7 @@ msgstr "滚动终端到底部"
#: tabby-terminal/src/hotkeys.ts:86
msgid "Scroll terminal to top"
msgstr "滑动中断到顶端"
msgstr "滑动终端到顶端"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16
msgid "Scrollback"
@@ -2127,7 +2127,7 @@ msgstr "终端提示音"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:70
msgid "Terminal identification"
msgstr ""
msgstr "终端标识"
#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7
msgid "Thank you for downloading Tabby!"

View File

@@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: tabby\n"
"Language-Team: Chinese Traditional\n"
"Language: zh_TW\n"
"PO-Revision-Date: 2023-02-06 19:58\n"
"PO-Revision-Date: 2023-03-17 23:07\n"
#: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?"
@@ -23,15 +23,15 @@ msgstr "{name} 複製"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:82
msgid "A second font family used to display characters missing in the main font"
msgstr "第二個字體系列,用於顯示主字中缺少的字元"
msgstr "備用字型用於顯示主字中缺少的字元"
#: tabby-core/src/components/transfersMenu.component.ts:49
msgid "Abort all"
msgstr "中止所有"
msgstr "全部中止"
#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24
msgid "Accept and remember key"
msgstr "接受並記住鑰"
msgstr "接受並記住鑰"
#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25
msgid "Accept just this once"
@@ -48,19 +48,19 @@ msgstr "壓克力背景"
#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:28
#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:15
msgid "Add"
msgstr "添加"
msgstr "新增"
#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:16
msgid "Add a port forward"
msgstr "添加新的埠轉"
msgstr "新增通訊埠轉"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:115
msgid "Add a private key"
msgstr "添加私密金鑰"
msgstr "新增私鑰"
#: locale/tmp-html/tabby-settings/src/components/multiHotkeyInput.component.html:8
msgid "Add..."
msgstr "添加..."
msgstr "新增..."
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:89
msgid "Additional space between lines"
@@ -79,7 +79,7 @@ msgstr "代理"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134
msgid "Agent forwarding"
msgstr "代理轉"
msgstr "代理轉"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35
msgid "Agent pipe path"
@@ -162,7 +162,7 @@ msgstr "自動更新"
#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:58
msgid "Automatically upload changes and check for updates every minute"
msgstr "每分鐘自動上載更改並檢查更新"
msgstr "每分鐘自動上傳更變並檢查更新"
#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:10
msgid "Available"
@@ -201,11 +201,11 @@ msgstr "粗體文字寬度"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:138
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:82
msgid "Bottom"
msgstr "底"
msgstr "底"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109
msgid "Bracketed paste (requires shell support)"
msgstr "Bracketed 貼上(需要 Shell 支"
msgstr "Bracketed 貼上(需要 Shell 支"
#: tabby-terminal/src/services/multifocus.service.ts:19
msgid "Broadcast mode. Click anywhere to cancel."
@@ -256,7 +256,7 @@ msgstr "密碼Cipher"
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5
msgid "Clear"
msgstr ""
msgstr "清除"
#: tabby-core/src/services/profiles.service.ts:133
msgid "Clear recent profiles"
@@ -268,7 +268,7 @@ msgstr "清除終端內容"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:49
msgid "Clear terminal after connection"
msgstr ""
msgstr "連線後清除終端畫面"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
@@ -324,11 +324,11 @@ msgstr "整合所有分頁到目前的分頁"
#: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4
msgid "Command line"
msgstr "命令列"
msgstr "指令行"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13
msgid "Command's stdin/stdout is used instead of a network connection"
msgstr "使用命令的 stdin/stdout 代替網絡連"
msgstr "使用 stdin/stdout 指令代替網絡連"
#: tabby-core/src/services/commands.service.ts:104
msgid "Commands"
@@ -340,7 +340,7 @@ msgstr "緊湊"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:126
msgid "Config deleted"
msgstr ""
msgstr "設定檔已刪除"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:108
msgid "Config downloaded"
@@ -358,7 +358,7 @@ msgstr "同步設定檔"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:90
msgid "Config uploaded"
msgstr "設定檔已上"
msgstr "設定檔已上"
#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:35
msgid "Configs"
@@ -366,7 +366,7 @@ msgstr "設定"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:21
msgid "Connect through a proxy server"
msgstr "通過代理伺服器連"
msgstr "通過代理伺服器連"
#: tabby-core/src/index.ts:227
#: tabby-core/src/services/profiles.service.ts:178
@@ -375,7 +375,7 @@ msgstr "正在連線到 \"%s\"..."
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:17
msgid "Connect to a different host first and use it as a proxy"
msgstr "先連到其主機並將其用作代理"
msgstr "先連到其主機並將其作為代理伺服器"
#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19
#: tabby-serial/src/components/serialTab.component.ts:66
@@ -386,7 +386,7 @@ msgstr "正在連線"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:7
msgid "Connection"
msgstr "連"
msgstr "連"
#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:30
msgid "Connection failed: {error}"
@@ -394,7 +394,7 @@ msgstr "連線失敗: {error}"
#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:42
msgid "Connection name will be used instead"
msgstr "將改用連接名替换"
msgstr "連線名稱將被使用"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61
msgid "Context menu"
@@ -419,7 +419,7 @@ msgstr "複製目前路徑"
#: tabby-electron/src/sftpContextMenu.ts:29
msgid "Copy full path"
msgstr ""
msgstr "複製完整路徑"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97
msgid "Copy on select"
@@ -439,7 +439,7 @@ msgstr "無法解密設定檔"
#: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9
msgid "Create"
msgstr "建"
msgstr "建"
#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7
#: tabby-ssh/src/sftpContextMenu.ts:29
@@ -537,19 +537,19 @@ msgstr "刪除整行"
#: tabby-terminal/src/hotkeys.ts:46
msgid "Delete next word"
msgstr "刪除一個單字"
msgstr "刪除一個單字"
#: tabby-terminal/src/hotkeys.ts:38
msgid "Delete previous word"
msgstr "刪除一個單字"
msgstr "刪除一個單字"
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:114
msgid "Delete the config on the remote side?"
msgstr ""
msgstr "是否刪除遠端設定檔?"
#: tabby-settings/src/components/profilesSettingsTab.component.ts:214
msgid "Delete the group's profiles?"
msgstr "是否刪除組内所有設定檔?"
msgstr "是否刪除組内所有設定檔?"
#: tabby-terminal/src/components/loginScriptsSettings.component.ts:29
msgid "Delete this script?"
@@ -557,7 +557,7 @@ msgstr "刪除此腳本?"
#: tabby-settings/src/components/vaultSettingsTab.component.ts:47
msgid "Delete vault contents?"
msgstr "删除保險箱中的所有內容?"
msgstr "删除金鑰庫中的所有內容?"
#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:3
msgid "Deleting"
@@ -581,7 +581,7 @@ msgstr "停用動態分頁標題"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:229
msgid "Disable fluent background while dragging"
msgstr "拖動時禁用 fluent 背景"
msgstr "拖曳時停用 fluent 背景"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:215
msgid "Disable GPU acceleration"
@@ -600,11 +600,11 @@ msgstr "中斷連線"
#: tabby-ssh/src/components/sshTab.component.ts:244
#: tabby-telnet/src/components/telnetTab.component.ts:113
msgid "Disconnect from {host}?"
msgstr "與 {host} 斷開連接嗎?"
msgstr "與 {host} 中斷連線嗎?"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:30
msgid "Display images via Sixel escape sequences"
msgstr "通過六像素轉義序列顯示圖"
msgstr "透過Sixel跳脫序列顯示圖"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:88
msgid "Display on"
@@ -646,11 +646,11 @@ msgstr "貼齊"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75
msgid "Double-click selection will stop at these characters"
msgstr "双击选择将在这些字符处停止"
msgstr "點兩下選擇將停在該字元處"
#: tabby-core/src/tabContextMenu.ts:79
msgid "Down"
msgstr "下"
msgstr "下"
#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:47
msgid "Download"
@@ -679,7 +679,7 @@ msgstr "編輯"
#: tabby-electron/src/sftpContextMenu.ts:35
msgid "Edit locally"
msgstr "在本編輯"
msgstr "在本編輯"
#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:62
msgid "Enable"
@@ -700,7 +700,7 @@ msgstr "啟用當有新的版本可使用時自動安裝更新"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:222
msgid "Enable fluent background option"
msgstr ""
msgstr "啟用 fluent 背景"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:16
msgid "Enable font ligatures"
@@ -708,7 +708,7 @@ msgstr "啟用合字"
#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:26
msgid "Enable global hotkey (Ctrl-Space)"
msgstr "啟用全域快鍵 (Ctrl+Space)"
msgstr "啟用全域快鍵 (Ctrl+Space)"
#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:6
msgid "Enables the experimental Windows ConPTY API"
@@ -749,7 +749,7 @@ msgstr "範例:"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:223
msgid "Experimental Windows 10 background style known to cause issues"
msgstr ""
msgstr "已知會導致問題的實驗性Windows 10背景樣式"
#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:27
msgid "Export"
@@ -757,7 +757,7 @@ msgstr "匯出"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:81
msgid "Fallback font"
msgstr "後援字型"
msgstr "備用字型"
#: locale/tmp-html/tabby-core/src/components/transfersMenu.component.html:3
msgid "File transfers"
@@ -773,11 +773,11 @@ msgstr "篩選器"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:157
msgid "Fixed"
msgstr "已修正"
msgstr "固定寬度"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:230
msgid "Fluent background sometimes causes drag lag"
msgstr "Fluent 背景有時會導致拖"
msgstr "Fluent 背景有時會導致拖曳延遲"
#: tabby-terminal/src/tabContextMenu.ts:78
msgid "Focus all panes"
@@ -793,7 +793,7 @@ msgstr "聚焦所有分頁"
#: tabby-terminal/src/hotkeys.ts:82
msgid "Focus all tabs at once (broadcast)"
msgstr "同時聚焦所有標籤頁 (廣播)"
msgstr "同時聚焦所有頁 (廣播)"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:207
msgid "Focus follows mouse"
@@ -841,7 +841,7 @@ msgstr "字型"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201
msgid "For keyboard shortcuts"
msgstr "對於鍵盤快鍵"
msgstr "對於鍵盤快鍵"
#: tabby-terminal/src/components/streamProcessingSettings.component.ts:51
msgid "Force CR"
@@ -857,7 +857,7 @@ msgstr "強制使用 LF"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:25
msgid "Forces a specific SSH agent connection type."
msgstr "強制 SSH使用特定的連類型"
msgstr "強制 SSH使用特定的連類型"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:105
msgid "Forget"
@@ -865,11 +865,11 @@ msgstr "清除"
#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:58
msgid "Forward port"
msgstr "轉發"
msgstr "通訊埠轉發"
#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingModal.component.html:3
msgid "Forwarded ports"
msgstr "已轉發埠"
msgstr "已轉發通訊埠"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:47
msgid "From color scheme"
@@ -877,7 +877,7 @@ msgstr "從配色方案"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:44
msgid "From theme"
msgstr "從佈景主題"
msgstr "從佈景風格"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:6
msgid "Frontend"
@@ -895,7 +895,7 @@ msgstr "一般設定"
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:21
msgid "Generate a pre-filled GitHub issue"
msgstr "成一個預填寫的 GitHub 問題"
msgstr "成一個預填寫的 GitHub 問題"
#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:27
msgid "Get"
@@ -907,7 +907,7 @@ msgstr "從 Tabby 網頁設定窗口獲取"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:22
msgid "Gives the window a blurred transparent background"
msgstr "使窗具有模糊透明的背景"
msgstr "使窗具有模糊透明的背景"
#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:24
msgid "Go up"
@@ -923,11 +923,11 @@ msgstr "群組"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212
msgid "Hacks"
msgstr ""
msgstr "修正"
#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:20
msgid "Help track the number of Tabby installs across the world!"
msgstr "助追 Tabby 在全球的安裝數量!"
msgstr "助追 Tabby 在全球的安裝數量!"
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:50
msgid "Help translate Tabby"
@@ -969,7 +969,7 @@ msgstr "主機"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206
msgid "Host key"
msgstr "快鍵"
msgstr "快鍵"
#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3
msgid "Host key verification"
@@ -978,11 +978,11 @@ msgstr "主機金鑰驗證"
#: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2
#: tabby-settings/src/settings.ts:15
msgid "Hotkeys"
msgstr "快鍵"
msgstr "快鍵"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:71
msgid "How Tabby presents itself through environment vars"
msgstr ""
msgstr "Tabby 如何透過環境變數呈現"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:24
msgid "HTTP proxy"
@@ -990,11 +990,11 @@ msgstr "HTTP 代理伺服器"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:61
msgid "HTTP proxy host"
msgstr "HTTP 代理址"
msgstr "HTTP 代理主機位址"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:65
msgid "HTTP proxy port"
msgstr "HTTP 代理連接埠"
msgstr "HTTP 代理通訊埠"
#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:20
msgid "Icon"
@@ -1002,7 +1002,7 @@ msgstr "圖示"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:154
msgid "id.tab-width.dynamic"
msgstr "動態"
msgstr "動態調整"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:64
msgid "If disabled, only custom profiles will show up in the profile selector"
@@ -1022,7 +1022,7 @@ msgstr "增加垂直分割大小"
#: tabby-terminal/src/components/streamProcessingSettings.component.ts:18
msgid "Input is sent as you type"
msgstr "輸入在您鍵入時送"
msgstr "輸入在您鍵入時送"
#: locale/tmp-html/tabby-terminal/src/components/streamProcessingSettings.component.html:4
msgid "Input mode"
@@ -1038,7 +1038,7 @@ msgstr "已安裝"
#: tabby-electron/src/services/updater.service.ts:131
msgid "Installing the update will close all tabs and restart Tabby."
msgstr "安裝更新將關閉所有分頁並重 Tabby。"
msgstr "安裝更新將關閉所有分頁並重新啟動 Tabby。"
#: tabby-terminal/src/hotkeys.ts:66
msgid "Intelligent Ctrl-C (copy/abort)"
@@ -1076,7 +1076,7 @@ msgstr "維持現狀"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:154
msgid "Keep Alive Interval (Milliseconds)"
msgstr "Keep-Alive 間(毫秒)"
msgstr "Keep-Alive 間(毫秒)"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:103
msgid "Keep docked terminal always on top"
@@ -1128,11 +1128,11 @@ msgstr "得知如何讓 Tabby 偵測遠端工作目錄"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76
#: tabby-core/src/tabContextMenu.ts:80
msgid "Left"
msgstr "左"
msgstr "左"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40
msgid "Lets the shell handle Meta key instead of OS"
msgstr "使用 Shell 替代作系統處理 Meta 鍵"
msgstr "使用 Shell 替代作系統處理 Meta 鍵"
#: tabby-terminal/src/components/streamProcessingSettings.component.ts:27
msgid "Line by line"
@@ -1140,7 +1140,7 @@ msgstr "逐行"
#: tabby-terminal/src/components/streamProcessingSettings.component.ts:28
msgid "Line editor, input is sent after you press Enter"
msgstr "行編輯器,按回車後發送輸入"
msgstr "行編輯器,按Enter後傳送輸入"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:88
msgid "Line padding"
@@ -1187,7 +1187,7 @@ msgstr "最大 Keep-Alive 次數"
#: tabby-core/src/hotkeys.ts:173
msgid "Maximize the active pane"
msgstr "最大化前窗格"
msgstr "最大化前窗格"
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:75
msgid "Minimum contrast ratio"
@@ -1215,7 +1215,7 @@ msgstr "移至未分類"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:208
msgid "Moving the mouse over an inactive pane will cause it to activate"
msgstr "將鼠標移到非活動窗格上將使其激活"
msgstr "自動聚焦於滑鼠游標所在的窗格"
#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:12
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:14
@@ -1419,7 +1419,7 @@ msgstr "覆寫本機設定檔並開始同步?"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:200
msgid "Pane resize step"
msgstr "窗格大小調整階梯"
msgstr "窗格大小調整級距"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197
msgid "Panes"
@@ -1454,7 +1454,7 @@ msgstr "從剪貼簿貼上"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63
msgid "Paste if no selection, else copy"
msgstr "未選擇內容時貼,否則復制"
msgstr "未選擇內容時貼,否則複製"
#: tabby-terminal/src/api/baseTerminalTab.component.ts:484
msgid "Paste multiple lines?"
@@ -1466,7 +1466,7 @@ msgstr "按滑鼠中鍵時貼上"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:43
msgid "Path or address of the local X11 socket"
msgstr "本 X11 socket 的路徑或址"
msgstr "本 X11 socket 的路徑或址"
#: locale/tmp-html/tabby-terminal/src/components/terminalToolbar.component.html:4
msgid "Pin"
@@ -1483,26 +1483,26 @@ msgstr "擴充功能資料夾"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:38
#: locale/tmp-html/tabby-telnet/src/components/telnetProfileSettings.component.html:10
msgid "Port"
msgstr "埠"
msgstr "通訊埠"
#: tabby-serial/src/components/serialTab.component.ts:71
msgid "Port opened"
msgstr "端口已打開"
msgstr "通訊埠已打開"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:119
#: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:12
msgid "Ports"
msgstr "埠"
msgstr "通訊埠"
#: tabby-serial/src/components/serialTab.component.ts:86
#: tabby-ssh/src/components/sshTab.component.ts:169
#: tabby-telnet/src/components/telnetTab.component.ts:53
msgid "Press any key to reconnect"
msgstr "按下任意鍵以重新連"
msgstr "按下任意鍵以重新連"
#: locale/tmp-html/tabby-settings/src/components/hotkeyInputModal.component.html:3
msgid "Press the key now"
msgstr "點擊按鍵"
msgstr "現在按下按鍵"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14
msgid "Prevents accidental closing"
@@ -1608,7 +1608,7 @@ msgstr "遠端"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124
msgid "Remove whitespace and newlines around the copied text"
msgstr "刪除複製文周圍的空格和換行"
msgstr "刪除複製文周圍的空格和換行"
#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25
#: tabby-core/src/tabContextMenu.ts:120
@@ -1622,7 +1622,7 @@ msgstr "重新命名分頁"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3
msgid "Rendering"
msgstr "渲染"
msgstr "彩現"
#: tabby-core/src/hotkeys.ts:33
msgid "Reopen last tab"
@@ -1640,7 +1640,7 @@ msgstr "回報問題"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81
msgid "Require a key to click links"
msgstr "需要按鍵以打開鏈接"
msgstr "需要按鍵以打開連結"
#: tabby-terminal/src/hotkeys.ts:62
msgid "Reset zoom"
@@ -1660,11 +1660,11 @@ msgstr "重啟目前的 Telnet 階段"
#: tabby-core/src/hotkeys.ts:65
msgid "Restart tab"
msgstr "重新啟動標籤頁"
msgstr "重新啟動頁"
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:134
msgid "Restart the app to apply changes"
msgstr "重應用程式以套用變更"
msgstr "重新啟動應用程式以套用變更"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:162
msgid "Restore terminal tabs on app start"
@@ -1678,11 +1678,11 @@ msgstr "回復多個分頁的狀態"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:79
#: tabby-core/src/tabContextMenu.ts:78
msgid "Right"
msgstr "右"
msgstr "右"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56
msgid "Right click"
msgstr "右鍵點擊"
msgstr "按下滑鼠右鍵"
#: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:5
msgid "Run as administrator"
@@ -1720,31 +1720,31 @@ msgstr "已儲存排版"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:46
msgid "Scroll on input"
msgstr "輸入時自動動至底部"
msgstr "輸入時自動動至底部"
#: tabby-terminal/src/hotkeys.ts:94
msgid "Scroll terminal one page down"
msgstr "滾動到終端機下一頁"
msgstr "終端機向下捲動一頁"
#: tabby-terminal/src/hotkeys.ts:90
msgid "Scroll terminal one page up"
msgstr "滾動到終端機上一頁"
msgstr "終端機向上捲動一頁"
#: tabby-terminal/src/hotkeys.ts:98
msgid "Scroll terminal to bottom"
msgstr "動到終端機底部"
msgstr "動到終端機底部"
#: tabby-terminal/src/hotkeys.ts:86
msgid "Scroll terminal to top"
msgstr "動到終端機頂部"
msgstr "動到終端機頂部"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:16
msgid "Scrollback"
msgstr "回"
msgstr "回"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:47
msgid "Scrolls the terminal to the bottom on user input"
msgstr "在用戶輸入時將終端動到底部"
msgstr "在用戶輸入時將終端動到底部"
#: tabby-terminal/src/hotkeys.ts:74
msgid "Search"
@@ -1757,7 +1757,7 @@ msgstr "搜尋配色方案"
#: tabby-settings/src/components/hotkeySettingsTab.component.ts:12
msgid "Search hotkeys"
msgstr "搜尋快鍵"
msgstr "搜尋快鍵"
#: tabby-plugin-manager/src/components/pluginsSettingsTab.component.ts:14
msgid "Search plugins"
@@ -1790,7 +1790,7 @@ msgstr "選擇設定檔"
#: tabby-core/src/services/profiles.service.ts:186
msgid "Select profile or enter an address"
msgstr "選擇設定檔或輸入位"
msgstr "選擇設定檔或輸入位"
#: tabby-terminal/src/components/streamProcessingSettings.component.ts:33
msgid "Send bytes by typing in hex values"
@@ -1798,7 +1798,7 @@ msgstr "傳輸以十六進位輸入的位元組"
#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:75
msgid "Sends data one byte at a time"
msgstr "每次傳送單字節資料"
msgstr "資料每次傳送一個位元組"
#: tabby-serial/src/profiles.ts:14
#: tabby-serial/src/profiles.ts:72
@@ -1808,7 +1808,7 @@ msgstr "序列"
#: tabby-serial/src/profiles.ts:51
#: tabby-serial/src/profiles.ts:62
msgid "Serial connection"
msgstr "序列連接"
msgstr "序列埠連線"
#: tabby-serial/src/profiles.ts:71
msgid "Serial: {description}"
@@ -1837,7 +1837,7 @@ msgstr "設為 0 時停用顯示最近的設定檔"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36
msgid "Sets the SSH agent's named pipe path."
msgstr ""
msgstr "設定 SSH 代理的命名管道路徑"
#: tabby-settings/src/buttonProvider.ts:28
#: tabby-settings/src/components/settingsTab.component.ts:58
@@ -1858,7 +1858,7 @@ msgstr "Shell 整合"
#: tabby-core/src/hotkeys.ts:276
msgid "Show {type} profile selector"
msgstr "顯示 {type} 配置選擇器"
msgstr "顯示 {type} 設定檔選擇器"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117
msgid "Show a confirmation box when pasting multiple lines"
@@ -1870,7 +1870,7 @@ msgstr "在選擇器中顯示內建設定"
#: tabby-core/src/hotkeys.ts:13
msgid "Show command selector"
msgstr "顯示令選擇器"
msgstr "顯示令選擇器"
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:126
msgid "Show config file"
@@ -1890,7 +1890,7 @@ msgstr "顯示窗格標籤(重新排列時)"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:175
msgid "Show profile icon on tab"
msgstr "在標籤頁上顯示設定檔圖示"
msgstr "在頁上顯示設定檔圖示"
#: tabby-core/src/hotkeys.ts:17
msgid "Show profile selector"
@@ -1910,7 +1910,7 @@ msgstr "顯示序列連線"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:163
msgid "Show tabs in fullscreen mode"
msgstr "全屏模式下显示标签栏"
msgstr "在全螢幕下顯示分頁"
#: tabby-terminal/src/tabContextMenu.ts:58
msgid "Show toolbar"
@@ -1922,7 +1922,7 @@ msgstr "顯示金鑰庫的內容"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:29
msgid "Sixel graphics support (experimental)"
msgstr "實驗性Sixel圖像支持"
msgstr "(實驗性) Sixel圖形支援"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:140
msgid "Skip MoTD/banner"
@@ -1953,7 +1953,7 @@ msgstr "SOCKS 代理埠"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130
msgid "Sound"
msgstr "音"
msgstr "音"
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:31
msgid "Source code"
@@ -1961,11 +1961,11 @@ msgstr "原始碼"
#: tabby-core/src/tabContextMenu.ts:75
msgid "Split"
msgstr "分割"
msgstr "新增分割視窗於"
#: tabby-core/src/hotkeys.ts:161
msgid "Split to the bottom"
msgstr "分離至下方"
msgstr "分離至底部"
#: tabby-core/src/tabContextMenu.ts:85
msgid "Split to the down"
@@ -1995,7 +1995,7 @@ msgstr "SSH 連線"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:53
msgid "SSH connection management is now done through the \"Profiles & connections\" tab"
msgstr "SSH連管理現在位於「設定檔與連線」分頁下"
msgstr "SSH連管理現在位於「設定檔與連線」分頁下"
#: tabby-settings/src/components/vaultSettingsTab.component.ts:84
msgid "SSH password for {user}@{host}:{port}"
@@ -2023,7 +2023,7 @@ msgstr "訂閱更新"
#: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:17
msgid "Substitutions allowed."
msgstr "許替換"
msgstr "許替換"
#: tabby-core/src/tabContextMenu.ts:290
msgid "Switch profile"
@@ -2031,7 +2031,7 @@ msgstr "切換設定檔"
#: tabby-core/src/hotkeys.ts:237
msgid "Switch profile in the active pane"
msgstr "分頁設定檔"
msgstr "切換活動中分頁設定檔"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:7
msgid "Switches terminal frontend implementation (experimental)"
@@ -2051,7 +2051,7 @@ msgstr "同步主機"
#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:72
msgid "Sync hotkeys"
msgstr "同步快鍵"
msgstr "同步快鍵"
#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:84
msgid "Sync Vault"
@@ -2090,7 +2090,7 @@ msgstr "分頁活動"
#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:3
msgid "Tabby could not start with your plugins, so all third party plugins have been disabled in this session. The error was:"
msgstr "Tabby無法以您的插件啟動,所以在所有第三方件已被停用。錯誤是:"
msgstr "Tabby無法載入您的擴充套件,所以在所有第三方擴充套件已被停用。錯誤是:"
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:41
msgid "Tabby news and updates on Twitter"
@@ -2127,7 +2127,7 @@ msgstr "終端鈴聲"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:70
msgid "Terminal identification"
msgstr ""
msgstr "終端標示"
#: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7
msgid "Thank you for downloading Tabby!"
@@ -2135,7 +2135,7 @@ msgstr "感謝您下載 Tabby"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5
msgid "Theme"
msgstr "主題"
msgstr "風格"
#: tabby-core/src/components/transfersMenu.component.ts:47
msgid "There are active file transfers"
@@ -2143,7 +2143,7 @@ msgstr "正在進行檔案傳輸"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102
msgid "There is a saved password for this connection"
msgstr "此次連可使用已儲存密碼"
msgstr "此次連可使用已儲存密碼"
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:81
msgid "These apply to all profiles of a given type"
@@ -2155,11 +2155,11 @@ msgstr "窄邊"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:216
msgid "Tick this if you're experiencing aliasing, ghosting or other visual issues"
msgstr "如果您看到鋸齒或鬼影,請勾選此方格"
msgstr "如果您看到鋸齒或鬼影,請勾選此選項"
#: tabby-core/src/hotkeys.ts:21
msgid "Toggle fullscreen mode"
msgstr "切換至全螢幕模式"
msgstr "全螢幕模式切換"
#: tabby-core/src/hotkeys.ts:37
msgid "Toggle last tab"
@@ -2176,7 +2176,7 @@ msgstr "切換Tabby視窗的可見度"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:135
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:73
msgid "Top"
msgstr "頂"
msgstr "頂"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123
msgid "Trim whitespace and newlines"
@@ -2216,7 +2216,7 @@ msgstr "取消釘選"
#: tabby-core/src/tabContextMenu.ts:81
msgid "Up"
msgstr "上"
msgstr "上"
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14
#: tabby-electron/src/services/updater.service.ts:133
@@ -2288,7 +2288,7 @@ msgstr "須設定Vault的主密碼以存儲密鑰"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11
msgid "Verify host keys when connecting"
msgstr "連線時驗主機鑰"
msgstr "連線時驗主機鑰"
#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:79
msgid "Version"
@@ -2312,11 +2312,11 @@ msgstr "貼上多行時警告"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:5
msgid "Warn when closing active connections"
msgstr "關閉當前連接是警告"
msgstr "關閉連線中的視窗時警告"
#: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:6
msgid "Warning: remote host's key has suddenly changed!"
msgstr "警告:遠主機金鑰突然改變!"
msgstr "警告:遠主機金鑰突然改變!"
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67
msgid "We're only tracking your Tabby and OS versions."
@@ -2332,7 +2332,7 @@ msgstr "最新消息"
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82
msgid "When enabled, links are only clickable while holding this key"
msgstr "啟用後,需按著此鍵才可打開鏈接"
msgstr "啟用後,需按著此鍵才可打開連結"
#: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18
msgid "When WinSCP is detected, you can launch an SCP session from the context menu."
@@ -2340,7 +2340,7 @@ msgstr "當偵測到WinSCP時您可以通過快顯功能表開啟SCP階段"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:48
msgid "Whether a custom window or an OS native window should be used"
msgstr "使用自定義視窗或是使用作業系統視窗"
msgstr "使用自視窗或是使用作業系統視窗"
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2
#: tabby-settings/src/settings.ts:30
@@ -2390,7 +2390,7 @@ msgstr "WSL終端機鈴聲只能通過混音器靜音"
#: locale/tmp-html/tabby-local/src/components/shellSettingsTab.component.html:14
msgid "WSL terminal only supports TrueColor with ConPTY"
msgstr "WSL終端機只支ConPTY真彩色"
msgstr "WSL終端機只支ConPTY真彩色"
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:128
msgid "X11 forwarding"
@@ -2420,5 +2420,5 @@ msgstr "縮小"
#: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:55
msgctxt "[Dynamic] port forwarding"
msgid "id.port-forwarding.dynamic"
msgstr "動態端口轉發"
msgstr "動態通訊埠轉發"

View File

@@ -96,7 +96,8 @@
"*/pug": "^3",
"lzma-native": "^8.0.0",
"*/node-abi": "^3.33.0",
"**/graceful-fs": "^4.2.4"
"**/graceful-fs": "^4.2.4",
"nan": "2.17.0"
},
"scripts": {
"build": "npm run build:typings && node scripts/build-modules.mjs",

View File

@@ -25,8 +25,8 @@ export const builtinPlugins = [
'tabby-ssh',
'tabby-serial',
'tabby-telnet',
'tabby-electron',
'tabby-local',
'tabby-electron',
'tabby-plugin-manager',
'tabby-linkifier',
]

View File

@@ -176,6 +176,7 @@ export abstract class PlatformService {
abstract setErrorHandler (handler: (_: any) => void): void
abstract popupContextMenu (menu: MenuItemOptions[], event?: MouseEvent): void
abstract showMessageBox (options: MessageBoxOptions): Promise<MessageBoxResult>
abstract pickDirectory (): Promise<string>
abstract quit (): void
}

View File

@@ -71,7 +71,7 @@ title-bar(
ngbDropdown
)
button.btn.btn-secondary.btn-tab-bar(
[title]='button.title',
[title]='button.label',
(click)='button.run && button.run()',
[fastHtmlBind]='button.icon',
ngbDropdownToggle,

View File

@@ -10,11 +10,12 @@
cursor: default;
animation: 0.5s ease-out fadeIn;
transition: 0.25s background;
--tabs-height: calc(38px * var(--spaciness));
--side-tab-width: calc(200px * var(--spaciness));
}
$tabs-height: 38px;
$tab-border-radius: 4px;
$side-tab-width: 200px;
.wrap {
display: flex;
@@ -46,19 +47,19 @@ $side-tab-width: 200px;
.content.tabs-on-side > .tab-bar {
height: 100%;
width: $side-tab-width;
width: var(--side-tab-width);
overflow-y: auto;
overflow-x: hidden;
flex-direction: column;
background: rgba(0, 0, 0, 0.25);
.tabs {
width: $side-tab-width;
width: var(--side-tab-width);
flex: none;
flex-direction: column;
tab-header {
flex: 0 0 $tabs-height;
flex: 0 0 var(--tabs-height);
}
}
@@ -69,18 +70,22 @@ $side-tab-width: 200px;
&>.inset {
opacity: 0;
}
::ng-deep tab-header {
width: 100% !important;
}
}
.tab-bar {
flex: none;
height: $tabs-height;
height: var(--tabs-height);
display: flex;
width: 100%;
.btn-tab-bar {
line-height: $tabs-height + 2px;
height: $tabs-height;
line-height: calc(var(--tabs-height) + 2px);
height: var(--tabs-height);
cursor: pointer;
display: flex;
@@ -113,17 +118,20 @@ $side-tab-width: 200px;
&>.drag-space {
min-width: 1px;
flex: 1 0 1%;
margin-top: 2px; // for window resizing
-webkit-app-region: drag;
.tabs-on-top & {
margin-top: 2px; // for window resizing
}
&.persistent {
min-width: 72px; // 2 x 36 px height, ie 2 squares
}
}
& > .inset {
width: 85px;
height: $tabs-height;
width: calc(70px + 15px * var(--spaciness));
height: var(--tabs-height);
flex: none;
-webkit-app-region: drag;
}
@@ -170,18 +178,12 @@ hotkey-hint {
::ng-deep .btn-tab-bar svg,
::ng-deep .btn-tab-bar + .dropdown-menu svg {
width: 22px;
height: 16px;
width: calc(22px * var(--spaciness));
height: calc(16px * var(--spaciness));
fill: white;
fill-opacity: 0.75;
}
.icon-wrapper {
display: flex;
width: 16px;
height: 17px;
}
::ng-deep .btn-update svg {
fill: cyan;
}

View File

@@ -79,8 +79,8 @@ export class AppRootComponent {
constructor (
private hotkeys: HotkeysService,
private updater: UpdaterService,
private commands: CommandService,
public updater: UpdaterService,
public hostWindow: HostWindowService,
public hostApp: HostAppService,
public config: ConfigService,

View File

@@ -192,6 +192,14 @@ export abstract class BaseTabComponent extends BaseComponent {
this.viewContainer = undefined
}
get topmostParent (): BaseTabComponent|null {
let parent = this.parent
while (parent?.parent) {
parent = parent.parent
}
return parent
}
/**
* Called before the tab is closed
*/

View File

@@ -458,12 +458,18 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
tab.destroy()
}
let allTabs: BaseTabComponent[] = []
if (thing instanceof BaseTabComponent) {
if (thing.parent instanceof SplitTabComponent) {
thing.parent.removeTab(thing)
allTabs = [thing]
} else if (thing instanceof SplitContainer) {
allTabs = thing.getAllTabs()
}
for (const tab of allTabs) {
if (tab.parent instanceof SplitTabComponent) {
tab.parent.removeTab(tab)
}
thing.removeFromContainer()
thing.parent = this
tab.removeFromContainer()
tab.parent = this
}
let target = relative ? this.getParentOf(relative) : null

View File

@@ -1,4 +1,5 @@
.mt-5
.mt-auto.mb-auto
.tabby-logo
h1.tabby-title Tabby
sup α

View File

@@ -35,7 +35,7 @@ $tabs-height: 38px;
-webkit-app-region: no-drag;
cursor: -webkit-grab;
width: 22px;
width: calc(22px * var(--spaciness));
border-radius: 10px;
text-align: center;
transition: 0.25s all;

View File

@@ -1,18 +1,18 @@
button.btn.btn-secondary.btn-minimize(
button.btn.btn-dark(
(click)='hostWindow.minimize()',
)
svg(version='1.1', width='10', height='10')
path(d='M 0,5 10,5 10,6 0,6 Z')
button.btn.btn-secondary.btn-maximize((click)='hostWindow.toggleMaximize()', *ngIf='!hostWindow.isMaximized()')
button.btn.btn-dark((click)='hostWindow.toggleMaximize()', *ngIf='!hostWindow.isMaximized()')
svg(version='1.1', width='10', height='10')
path(d='M 0,0 0,10 10,10 10,0 Z M 1,1 9,1 9,9 1,9 Z')
button.btn.btn-secondary.btn-maximize((click)='hostWindow.toggleMaximize()', *ngIf='hostWindow.isMaximized()')
button.btn.btn-dark((click)='hostWindow.toggleMaximize()', *ngIf='hostWindow.isMaximized()')
svg(version='1.1', width='10', height='10', viewBox='0 0 512 512')
path(d="M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM32 144c0-8.8 7.2-16 16-16h320c8.8 0 16 7.2 16 16v320c0 8.8-7.2 16-16 16H48c-8.8 0-16-7.2-16-16v-80zm448 224c0 8.8-7.2 16-16 16h-48V144c0-26.5-21.5-48-48-48H128V48c0-8.8 7.2-16 16-16h320c8.8 0 16 7.2 16 16v320z")
button.btn.btn-secondary.btn-close(
button.btn.btn-danger(
(click)='closeWindow()'
)
svg(version='1.1', width='10', height='10')

View File

@@ -18,6 +18,7 @@ appearance:
vibrancy: false
vibrancyType: 'blur'
lastTabClosesWindow: false
spaciness: 1
terminal:
showBuiltinProfiles: true
showRecentProfiles: 3

View File

@@ -6,7 +6,7 @@ import { PlatformService } from '../api/platform'
selector: '[fastHtmlBind]',
})
export class FastHtmlBindDirective implements OnChanges {
@Input() fastHtmlBind: string
@Input() fastHtmlBind?: string
constructor (
private el: ElementRef,
@@ -14,7 +14,7 @@ export class FastHtmlBindDirective implements OnChanges {
) { }
ngOnChanges (): void {
this.el.nativeElement.innerHTML = this.fastHtmlBind || ''
this.el.nativeElement.innerHTML = this.fastHtmlBind ?? ''
for (const link of this.el.nativeElement.querySelectorAll('a')) {
link.addEventListener('click', event => {
event.preventDefault()

View File

@@ -34,7 +34,6 @@ export class ThemesService {
private applyThemeVariables () {
if (!this.findCurrentTheme().followsColorScheme) {
document.documentElement.style.cssText = this.rootElementStyleBackup
return
}
const theme = this.config.store.terminal.colorScheme
@@ -64,63 +63,67 @@ export class ThemesService {
const accentIndex = 4
const vars: Record<string, string> = {}
vars['--bs-body-bg'] = background.string()
vars['--bs-body-color'] = theme.foreground
vars['--bs-black'] = theme.colors[0]
vars['--bs-red'] = theme.colors[1]
vars['--bs-green'] = theme.colors[2]
vars['--bs-yellow'] = theme.colors[3]
vars['--bs-blue'] = theme.colors[4]
vars['--bs-purple'] = theme.colors[5]
vars['--bs-cyan'] = theme.colors[6]
vars['--bs-gray'] = theme.colors[7]
vars['--bs-gray-dark'] = theme.colors[8]
// vars['--bs-red'] = theme.colors[9]
// vars['--bs-green'] = theme.colors[10]
// vars['--bs-yellow'] = theme.colors[11]
// vars['--bs-blue'] = theme.colors[12]
// vars['--bs-purple'] = theme.colors[13]
// vars['--bs-cyan'] = theme.colors[14]
if (this.findCurrentTheme().followsColorScheme) {
vars['--bs-body-bg'] = background.string()
vars['--bs-body-color'] = theme.foreground
vars['--bs-black'] = theme.colors[0]
vars['--bs-red'] = theme.colors[1]
vars['--bs-green'] = theme.colors[2]
vars['--bs-yellow'] = theme.colors[3]
vars['--bs-blue'] = theme.colors[4]
vars['--bs-purple'] = theme.colors[5]
vars['--bs-cyan'] = theme.colors[6]
vars['--bs-gray'] = theme.colors[7]
vars['--bs-gray-dark'] = theme.colors[8]
// vars['--bs-red'] = theme.colors[9]
// vars['--bs-green'] = theme.colors[10]
// vars['--bs-yellow'] = theme.colors[11]
// vars['--bs-blue'] = theme.colors[12]
// vars['--bs-purple'] = theme.colors[13]
// vars['--bs-cyan'] = theme.colors[14]
vars['--theme-fg-more-2'] = more(theme.foreground, 0.5).string()
vars['--theme-fg-more'] = more(theme.foreground, 0.25).string()
vars['--theme-fg'] = theme.foreground
vars['--theme-fg-less'] = less(theme.foreground, 0.25).string()
vars['--theme-fg-less-2'] = less(theme.foreground, 0.5).string()
vars['--theme-fg-more-2'] = more(theme.foreground, 0.5).string()
vars['--theme-fg-more'] = more(theme.foreground, 0.25).string()
vars['--theme-fg'] = theme.foreground
vars['--theme-fg-less'] = less(theme.foreground, 0.25).string()
vars['--theme-fg-less-2'] = less(theme.foreground, 0.5).string()
vars['--theme-bg-less-2'] = less(theme.background, 0.5).string()
vars['--theme-bg-less'] = less(theme.background, 0.25).string()
vars['--theme-bg'] = theme.background
vars['--theme-bg-more'] = backgroundMore
vars['--theme-bg-more-2'] = more(backgroundMore, 0.25).string()
vars['--theme-bg-less-2'] = less(theme.background, 0.5).string()
vars['--theme-bg-less'] = less(theme.background, 0.25).string()
vars['--theme-bg'] = theme.background
vars['--theme-bg-more'] = backgroundMore
vars['--theme-bg-more-2'] = more(backgroundMore, 0.25).string()
const themeColors = {
primary: theme.colors[accentIndex],
secondary: theme.colors[8],
tertiary: theme.colors[8],
warning: theme.colors[3],
danger: theme.colors[1],
success: theme.colors[2],
info: theme.colors[4],
dark: more(theme.background, 0.5).string(),
light: more(theme.foreground, 0.5).string(),
link: theme.colors[8], // for .btn-link
const themeColors = {
primary: theme.colors[accentIndex],
secondary: theme.colors[8],
tertiary: theme.colors[8],
warning: theme.colors[3],
danger: theme.colors[1],
success: theme.colors[2],
info: theme.colors[4],
dark: more(theme.background, 0.5).string(),
light: more(theme.foreground, 0.5).string(),
link: theme.colors[8], // for .btn-link
}
for (const [key, color] of Object.entries(themeColors)) {
vars[`--bs-${key}-bg`] = more(color, 0.5).string()
vars[`--bs-${key}-color`] = less(color, 0.5).string()
vars[`--bs-${key}`] = color
vars[`--bs-${key}-rgb`] = Color(color).rgb().array().join(', ')
vars[`--theme-${key}-more-2`] = more(color, 1).string()
vars[`--theme-${key}-more`] = more(color, 0.5).string()
vars[`--theme-${key}`] = color
vars[`--theme-${key}-less`] = less(color, 0.25).string()
vars[`--theme-${key}-less-2`] = less(color, 0.75).string()
}
const switchBackground = less(theme.colors[accentIndex], 0.25).string()
vars['--bs-form-switch-bg'] = `url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27${switchBackground}%27/%3e%3c/svg%3e")`
}
for (const [key, color] of Object.entries(themeColors)) {
vars[`--bs-${key}-bg`] = more(color, 0.5).string()
vars[`--bs-${key}-color`] = less(color, 0.5).string()
vars[`--bs-${key}`] = color
vars[`--bs-${key}-rgb`] = Color(color).rgb().array().join(', ')
vars[`--theme-${key}-more-2`] = more(color, 1).string()
vars[`--theme-${key}-more`] = more(color, 0.5).string()
vars[`--theme-${key}`] = color
vars[`--theme-${key}-less`] = less(color, 0.25).string()
vars[`--theme-${key}-less-2`] = less(color, 0.75).string()
}
const switchBackground = less(theme.colors[accentIndex], 0.25).string()
vars['--bs-form-switch-bg'] = `url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27${switchBackground}%27/%3e%3c/svg%3e")`
vars['--spaciness'] = this.config.store.appearance.spaciness
for (const [key, value] of Object.entries(vars)) {
document.documentElement.style.setProperty(key, value)

View File

@@ -63,113 +63,18 @@ app-root {
}
}
}
// &.tabs-on-top .tab-bar {
// &>.background {
// border-bottom: 1px solid $border-color;
// }
// tab-header {
// border-bottom: 1px solid $border-color;
// &.active {
// border-bottom-color: transparent;
// }
// }
// }
// &:not(.tabs-on-top) .tab-bar {
// &>.background {
// border-top: 1px solid $border-color;
// }
// tab-header {
// border-top: 1px solid $border-color;
// &.active {
// margin-top: -1px;
// }
// }
// }
}
// &.platform-win32, &.platform-linux {
// border: 1px solid #111;
// &>.content .tab-bar .tabs tab-header:first-child {
// border-left: none;
// }
// }
}
tab-body {
background: var(--bs-body-bg);
}
// $black: #002b36;
// $base02: #073642;
// $base01: #586e75;
// $base00: #657b83;
// $base0: #839496;
// $base1: #93a1a1;
// $base2: #eee8d5;
// $white: #fdf6e3;
// $yellow: #b58900;
// $orange: #cb4b16;
// $red: #dc322f;
// $pink: #d33682;
// $purple: #6c71c4;
// $blue: #268bd2;
// $teal: #2aa198;
// $green: #859900;
$tab-border-radius: 5px;
// $button-hover-bg: rgba(0, 0, 0, .125);
// $button-active-bg: rgba(0, 0, 0, .25);
// $btn-border-radius: 0;
// $input-bg: $base2;
// $input-disabled-bg: $base1;
// $input-color: $body-color;
// $input-color-placeholder: $base1;
// $input-border-color: $base1;
// //$input-box-shadow: inset 0 1px 1px rgba($black,.075);
// $input-border-radius: 0;
// $custom-select-border-radius: 0;
// $input-bg-focus: $input-bg;
// //$input-border-focus: lighten($brand-primary, 25%);
// //$input-box-shadow-focus: $input-box-shadow, rgba($input-border-focus, .6);
// $input-color-focus: $input-color;
// $input-group-addon-bg: $body-bg;
// $input-group-addon-border-color: $input-border-color;
// $modal-content-bg: $content-bg-solid;
// $modal-content-border-color: $body-bg;
$modal-header-border-color: transparent;
$modal-footer-border-color: transparent;
// $popover-bg: $body-bg;
// $dropdown-bg: $body-bg;
// $dropdown-link-color: $body-color;
// $dropdown-link-hover-color: #333;
// $dropdown-link-hover-bg: $body-bg2;
// //$dropdown-link-active-color: $component-active-color;
// //$dropdown-link-active-bg: $component-active-bg;
// $dropdown-link-disabled-color: #333;
// $dropdown-header-color: #333;
// $list-group-action-bg: rgba($black,.05);
// $list-group-action-active-bg: $list-group-link-active-bg;
// $pre-bg: $dropdown-bg;
// $pre-color: $dropdown-link-color;
// $headings-font-weight: lighter;
// $headings-color: $base0;
$form-check-input-width: 1.4em;
$form-switch-width: 2.5em;
@@ -186,8 +91,6 @@ body {
--bs-list-group-bg: var(--theme-bg-more);
--bs-list-group-border-color: var(--theme-bg-more-2);
--bs-list-group-border-width: 0;
// --bs-list-group-item-padding-x: 1rem;
// --bs-list-group-item-padding-y: 0.5rem;
--bs-list-group-action-color: var(--bs-body-color);
--bs-list-group-action-hover-color: var(--theme-fg);
--bs-list-group-action-hover-bg: var(--theme-bg-more-2);
@@ -198,23 +101,15 @@ body {
--bs-list-group-disabled-bg: var(--bs-body-bg);
--bs-list-group-active-color: var(--bs-primary-color);
--bs-list-group-active-bg: var(--bs-primary-bg);
// --bs-list-group-active-border-color: #0d6efd;
}
.nav {
// scss-docs-start nav-css-vars
// --bs-nav-link-padding-x: #{$nav-link-padding-x};
// --bs-nav-link-padding-y: #{$nav-link-padding-y};
// @include rfs($nav-link-font-size, --bs-nav-link-font-size);
// --bs-nav-link-font-weight: #{$nav-link-font-weight};
--bs-nav-link-color: var(--bs-body-color);
--bs-nav-link-hover-color: var(--theme-fg-less-2);
--bs-nav-link-disabled-color: var(--bs-gray);
// scss-docs-end nav-css-vars
}
.nav-tabs {
// scss-docs-start nav-tabs-css-vars
--bs-nav-tabs-border-width: 2px;
--bs-nav-tabs-border-radius: 0;
--bs-nav-tabs-link-hover-border-color: var(--bs-body-bg);
@@ -223,15 +118,12 @@ body {
--bs-nav-tabs-link-active-bg: transparent;
--bs-nav-tabs-link-active-border-color: transparent;
// scss-docs-end nav-tabs-css-vars
}
.nav-pills {
// scss-docs-start nav-pills-css-vars
--bs-nav-pills-border-radius: #{$nav-pills-border-radius};
--bs-nav-pills-link-active-color: var(--theme-bg-more);
--bs-nav-pills-link-active-bg: var(--bs-primary);
// scss-docs-end nav-pills-css-vars
}
.nav-tabs {
@@ -438,19 +330,6 @@ hotkey-input-modal {
}
}
// checkbox i.on {
// color: $blue;
// }
// .modal .modal-footer {
// background: rgba(0, 0, 0, .25);
// .btn {
// font-weight: bold;
// padding: 0.375rem 1.5rem;
// }
// }
.list-group-item svg {
fill: var(--bs-body-color);
fill-opacity: 0.75;
@@ -493,30 +372,8 @@ search-panel {
.btn-link {
text-decoration: none;
// &:hover, &[aria-expanded=true], &:active, &.active {
// color: $link-hover-color;
// border-radius: $btn-border-radius;
// }
// &[aria-expanded=true], &:active, &.active {
// background: rgba(255, 255, 255, 0.1);
// }
}
// .btn-group .btn.active {
// border-color: transparent !important;
// }
// hr {
// border-color: $list-group-border-color;
// }
// .dropdown-menu {
// box-shadow: $dropdown-box-shadow;
// }
ngx-colors-panel .opened {
background: var(--bs-body-bg) !important;
@@ -530,7 +387,6 @@ ngx-colors-panel .opened {
}
.text-muted {
// color: var(--bs-body-color) !important;
opacity: .5;
}
@@ -556,7 +412,7 @@ ngx-colors-panel .opened {
}
start-page {
background: var(--theme-bg);
background: var(--theme-bg-more-2);
}
split-tab-spanner {
@@ -566,3 +422,9 @@ split-tab-spanner {
background: rgba(var(--bs-dark-rgb), .2);
}
}
window-controls {
button svg {
fill: var(--theme-fg) !important;
}
}

View File

@@ -17,11 +17,14 @@
"author": "Eugene Pankov",
"license": "MIT",
"peerDependencies": {
"@angular/core": "^9.1.9"
"@angular/core": "^9.1.9",
"tabby-local": "*"
},
"devDependencies": {
"electron-promise-ipc": "^2.2.4",
"ps-node": "^0.1.6",
"tmp-promise": "^3.0.2",
"hasbin": "^1.2.3",
"winston": "^3.3.3"
}
}

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 392 B

After

Width:  |  Height:  |  Size: 392 B

View File

Before

Width:  |  Height:  |  Size: 392 B

After

Width:  |  Height:  |  Size: 392 B

View File

Before

Width:  |  Height:  |  Size: 567 B

After

Width:  |  Height:  |  Size: 567 B

View File

Before

Width:  |  Height:  |  Size: 570 B

After

Width:  |  Height:  |  Size: 570 B

View File

Before

Width:  |  Height:  |  Size: 315 B

After

Width:  |  Height:  |  Size: 315 B

View File

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 205 KiB

After

Width:  |  Height:  |  Size: 205 KiB

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 287 B

After

Width:  |  Height:  |  Size: 287 B

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 551 B

After

Width:  |  Height:  |  Size: 551 B

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -2,6 +2,7 @@ import { NgModule } from '@angular/core'
import { PlatformService, LogService, UpdaterService, DockingService, HostAppService, ThemesService, Platform, AppService, ConfigService, WIN_BUILD_FLUENT_BG_SUPPORTED, isWindowsBuild, HostWindowService, HotkeyProvider, ConfigProvider, FileProvider } from 'tabby-core'
import { TerminalColorSchemeProvider } from 'tabby-terminal'
import { SFTPContextMenuItemProvider, SSHProfileImporter, AutoPrivateKeyLocator } from 'tabby-ssh'
import { PTYInterface, ShellProvider, UACService } from 'tabby-local'
import { auditTime } from 'rxjs'
import { HyperColorSchemes } from './colorSchemes'
@@ -14,10 +15,28 @@ import { ElectronHostWindow } from './services/hostWindow.service'
import { ElectronFileProvider } from './services/fileProvider.service'
import { ElectronHostAppService } from './services/hostApp.service'
import { ElectronService } from './services/electron.service'
import { DockMenuService } from './services/dockMenu.service'
import { ElectronUACService } from './services/uac.service'
import { ElectronHotkeyProvider } from './hotkeys'
import { ElectronConfigProvider } from './config'
import { EditSFTPContextMenu } from './sftpContextMenu'
import { OpenSSHImporter, PrivateKeyLocator, StaticFileImporter } from './sshImporters'
import { ElectronPTYInterface } from './pty'
import { CmderShellProvider } from './shells/cmder'
import { Cygwin32ShellProvider } from './shells/cygwin32'
import { Cygwin64ShellProvider } from './shells/cygwin64'
import { GitBashShellProvider } from './shells/gitBash'
import { LinuxDefaultShellProvider } from './shells/linuxDefault'
import { MacOSDefaultShellProvider } from './shells/macDefault'
import { MSYS2ShellProvider } from './shells/msys2'
import { POSIXShellsProvider } from './shells/posix'
import { PowerShellCoreShellProvider } from './shells/powershellCore'
import { WindowsDefaultShellProvider } from './shells/winDefault'
import { WindowsStockShellsProvider } from './shells/windowsStock'
import { WSLShellProvider } from './shells/wsl'
import { VSDevToolsProvider } from './shells/vs'
@NgModule({
providers: [
@@ -35,6 +54,29 @@ import { OpenSSHImporter, PrivateKeyLocator, StaticFileImporter } from './sshImp
{ provide: SSHProfileImporter, useExisting: OpenSSHImporter, multi: true },
{ provide: SSHProfileImporter, useExisting: StaticFileImporter, multi: true },
{ provide: AutoPrivateKeyLocator, useExisting: PrivateKeyLocator, multi: true },
{ provide: ShellProvider, useClass: WindowsDefaultShellProvider, multi: true },
{ provide: ShellProvider, useClass: MacOSDefaultShellProvider, multi: true },
{ provide: ShellProvider, useClass: LinuxDefaultShellProvider, multi: true },
{ provide: ShellProvider, useClass: WindowsStockShellsProvider, multi: true },
{ provide: ShellProvider, useClass: PowerShellCoreShellProvider, multi: true },
{ provide: ShellProvider, useClass: CmderShellProvider, multi: true },
{ provide: ShellProvider, useClass: Cygwin32ShellProvider, multi: true },
{ provide: ShellProvider, useClass: Cygwin64ShellProvider, multi: true },
{ provide: ShellProvider, useClass: GitBashShellProvider, multi: true },
{ provide: ShellProvider, useClass: POSIXShellsProvider, multi: true },
{ provide: ShellProvider, useClass: MSYS2ShellProvider, multi: true },
{ provide: ShellProvider, useClass: WSLShellProvider, multi: true },
{ provide: ShellProvider, useClass: VSDevToolsProvider, multi: true },
{ provide: UACService, useClass: ElectronUACService },
{ provide: PTYInterface, useClass: ElectronPTYInterface },
// For WindowsDefaultShellProvider
PowerShellCoreShellProvider,
WSLShellProvider,
WindowsStockShellsProvider,
],
})
export default class ElectronModule {
@@ -47,6 +89,7 @@ export default class ElectronModule {
docking: DockingService,
themeService: ThemesService,
app: AppService,
dockMenu: DockMenuService,
) {
config.ready$.toPromise().then(() => {
touchbar.update()
@@ -87,6 +130,10 @@ export default class ElectronModule {
})
config.changed$.subscribe(() => this.updateVibrancy())
config.ready$.toPromise().then(() => {
dockMenu.update()
})
}
private registerGlobalHotkey () {

140
tabby-electron/src/pty.ts Normal file
View File

@@ -0,0 +1,140 @@
import * as psNode from 'ps-node'
import { ipcRenderer } from 'electron'
import { ChildProcess, PTYInterface, PTYProxy } from 'tabby-local'
import { getWorkingDirectoryFromPID } from 'native-process-working-directory'
/* eslint-disable block-scoped-var */
try {
var macOSNativeProcessList = require('macos-native-processlist') // eslint-disable-line @typescript-eslint/no-var-requires, no-var
} catch { }
try {
var windowsProcessTree = require('windows-process-tree') // eslint-disable-line @typescript-eslint/no-var-requires, no-var
} catch { }
export class ElectronPTYInterface extends PTYInterface {
async spawn (...options: any[]): Promise<PTYProxy> {
const id = ipcRenderer.sendSync('pty:spawn', ...options)
return new ElectronPTYProxy(id)
}
async restore (id: string): Promise<ElectronPTYProxy|null> {
if (ipcRenderer.sendSync('pty:exists', id)) {
return new ElectronPTYProxy(id)
}
return null
}
}
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
export class ElectronPTYProxy extends PTYProxy {
private subscriptions: Map<string, any> = new Map()
private truePID: Promise<number>
constructor (
private id: string,
) {
super()
this.truePID = new Promise(async (resolve) => {
let pid = await this.getPID()
try {
await new Promise(r => setTimeout(r, 2000))
// Retrieve any possible single children now that shell has fully started
let processes = await this.getChildProcessesInternal(pid)
while (pid && processes.length === 1) {
if (!processes[0].pid) {
break
}
pid = processes[0].pid
processes = await this.getChildProcessesInternal(pid)
}
} finally {
resolve(pid)
}
})
this.truePID = this.truePID.catch(() => this.getPID())
}
getID (): string {
return this.id
}
getTruePID (): Promise<number> {
return this.truePID
}
async getPID (): Promise<number> {
return ipcRenderer.sendSync('pty:get-pid', this.id)
}
subscribe (event: string, handler: (..._: any[]) => void): void {
const key = `pty:${this.id}:${event}`
const newHandler = (_event, ...args) => handler(...args)
this.subscriptions.set(key, newHandler)
ipcRenderer.on(key, newHandler)
}
ackData (length: number): void {
ipcRenderer.send('pty:ack-data', this.id, length)
}
unsubscribeAll (): void {
for (const k of this.subscriptions.keys()) {
ipcRenderer.off(k, this.subscriptions.get(k))
}
}
async resize (columns: number, rows: number): Promise<void> {
ipcRenderer.send('pty:resize', this.id, columns, rows)
}
async write (data: Buffer): Promise<void> {
ipcRenderer.send('pty:write', this.id, data)
}
async kill (signal?: string): Promise<void> {
ipcRenderer.send('pty:kill', this.id, signal)
}
async getChildProcesses (): Promise<ChildProcess[]> {
return this.getChildProcessesInternal(await this.getTruePID())
}
async getChildProcessesInternal (truePID: number): Promise<ChildProcess[]> {
if (process.platform === 'darwin') {
const processes = await macOSNativeProcessList.getProcessList()
return processes.filter(x => x.ppid === truePID).map(p => ({
pid: p.pid,
ppid: p.ppid,
command: p.name,
}))
}
if (process.platform === 'win32') {
return new Promise<ChildProcess[]>(resolve => {
windowsProcessTree.getProcessTree(truePID, tree => {
resolve(tree ? tree.children.map(child => ({
pid: child.pid,
ppid: tree.pid,
command: child.name,
})) : [])
})
})
}
return new Promise<ChildProcess[]>((resolve, reject) => {
psNode.lookup({ ppid: truePID }, (err, processes) => {
if (err) {
reject(err)
return
}
resolve(processes as ChildProcess[])
})
})
}
async getWorkingDirectory (): Promise<string|null> {
return getWorkingDirectoryFromPID(await this.getTruePID())
}
}

View File

@@ -1,6 +1,6 @@
import { NgZone, Injectable } from '@angular/core'
import { ConfigService, HostAppService, Platform, ProfilesService, TranslateService } from 'tabby-core'
import { ElectronService } from 'tabby-electron'
import { ElectronService } from './electron.service'
/** @hidden */
@Injectable({ providedIn: 'root' })

View File

@@ -234,6 +234,15 @@ export class ElectronPlatformService extends PlatformService {
handler(err)
})
}
async pickDirectory (): Promise<string> {
return (await this.electron.dialog.showOpenDialog(
this.hostWindow.getWindow(),
{
properties: ['openDirectory', 'showHiddenFiles'],
},
)).filePaths[0]
}
}
class ElectronFileUpload extends FileUpload {

View File

@@ -1,17 +1,16 @@
import * as path from 'path'
import { Injectable } from '@angular/core'
import * as path from 'path'
import { WIN_BUILD_CONPTY_SUPPORTED, isWindowsBuild } from 'tabby-core'
import { ElectronService } from 'tabby-electron'
import { SessionOptions } from '../api'
import { SessionOptions, UACService } from 'tabby-local'
import { ElectronService } from './electron.service'
/** @hidden */
@Injectable({ providedIn: 'root' })
export class UACService {
isAvailable = false
private constructor (
@Injectable()
export class ElectronUACService extends UACService {
constructor (
private electron: ElectronService,
) {
super()
this.isAvailable = isWindowsBuild(WIN_BUILD_CONPTY_SUPPORTED)
}
@@ -37,5 +36,4 @@ export class UACService {
options.command = helperPath
return options
}
}

View File

@@ -2,7 +2,7 @@ import * as path from 'path'
import { Injectable } from '@angular/core'
import { HostAppService, Platform } from 'tabby-core'
import { ShellProvider, Shell } from '../api'
import { ShellProvider, Shell } from 'tabby-local'
/** @hidden */
@Injectable()

View File

@@ -2,7 +2,7 @@ import * as path from 'path'
import { Injectable } from '@angular/core'
import { HostAppService, Platform } from 'tabby-core'
import { ShellProvider, Shell } from '../api'
import { ShellProvider, Shell } from 'tabby-local'
/* eslint-disable block-scoped-var */

View File

@@ -2,7 +2,7 @@ import * as path from 'path'
import { Injectable } from '@angular/core'
import { HostAppService, Platform } from 'tabby-core'
import { ShellProvider, Shell } from '../api'
import { ShellProvider, Shell } from 'tabby-local'
/* eslint-disable block-scoped-var */

View File

@@ -2,7 +2,7 @@ import * as path from 'path'
import { Injectable } from '@angular/core'
import { Platform, ConfigService, HostAppService } from 'tabby-core'
import { Shell } from '../api'
import { Shell } from 'tabby-local'
import { WindowsBaseShellProvider } from './windowsBase'
/* eslint-disable block-scoped-var */

View File

@@ -2,7 +2,7 @@ import * as fs from 'mz/fs'
import { Injectable } from '@angular/core'
import { HostAppService, Platform, LogService, Logger, TranslateService } from 'tabby-core'
import { ShellProvider, Shell } from '../api'
import { ShellProvider, Shell } from 'tabby-local'
/** @hidden */
@Injectable()

View File

@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'
import promiseIpc, { RendererProcessType } from 'electron-promise-ipc'
import { HostAppService, Platform, TranslateService } from 'tabby-core'
import { ShellProvider, Shell } from '../api'
import { ShellProvider, Shell } from 'tabby-local'
/** @hidden */
@Injectable()

View File

@@ -3,7 +3,7 @@ import * as path from 'path'
import { Injectable } from '@angular/core'
import { HostAppService, Platform } from 'tabby-core'
import { ShellProvider, Shell } from '../api'
import { ShellProvider, Shell } from 'tabby-local'
/** @hidden */
@Injectable()

View File

@@ -3,7 +3,7 @@ import slugify from 'slugify'
import { Injectable } from '@angular/core'
import { HostAppService, Platform } from 'tabby-core'
import { ShellProvider, Shell } from '../api'
import { ShellProvider, Shell } from 'tabby-local'
/** @hidden */
@Injectable()

View File

@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core'
import { HostAppService, ConfigService, Platform } from 'tabby-core'
import { Shell } from '../api'
import { Shell } from 'tabby-local'
import { WindowsBaseShellProvider } from './windowsBase'
/* eslint-disable block-scoped-var */

View File

@@ -3,7 +3,7 @@ import * as fs from 'fs/promises'
import { Injectable } from '@angular/core'
import { HostAppService, Platform } from 'tabby-core'
import { ShellProvider, Shell } from '../api'
import { ShellProvider, Shell } from 'tabby-local'
/* eslint-disable quote-props */
const vsIconMap: Record<string, string> = {

View File

@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core'
import { HostAppService, Platform, TranslateService } from 'tabby-core'
import { ShellProvider, Shell } from '../api'
import { ShellProvider, Shell } from 'tabby-local'
import { WSLShellProvider } from './wsl'
import { PowerShellCoreShellProvider } from './powershellCore'

View File

@@ -1,6 +1,6 @@
import { ConfigService, HostAppService } from 'tabby-core'
import { ShellProvider } from '../api'
import { ShellProvider } from 'tabby-local'
export abstract class WindowsBaseShellProvider extends ShellProvider {
constructor (

View File

@@ -3,9 +3,9 @@ import * as fs from 'fs/promises'
import hasbin from 'hasbin'
import { Injectable } from '@angular/core'
import { HostAppService, Platform, ConfigService } from 'tabby-core'
import { ElectronService } from 'tabby-electron'
import { ElectronService } from '../services/electron.service'
import { Shell } from '../api'
import { Shell } from 'tabby-local'
import { WindowsBaseShellProvider } from './windowsBase'
/** @hidden */

View File

@@ -4,7 +4,7 @@ import slugify from 'slugify'
import { Injectable } from '@angular/core'
import { HostAppService, Platform, isWindowsBuild, WIN_BUILD_WSL_EXE_DISTRO_FLAG } from 'tabby-core'
import { ShellProvider, Shell } from '../api'
import { ShellProvider, Shell } from 'tabby-local'
/* eslint-disable block-scoped-var */

View File

@@ -21,6 +21,11 @@ async@^3.2.3:
resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9"
integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==
async@~1.5:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@@ -88,6 +93,11 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
connected-domain@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/connected-domain/-/connected-domain-1.0.0.tgz#bfe77238c74be453a79f0cb6058deeb4f2358e93"
integrity sha512-lHlohUiJxlpunvDag2Y0pO20bnvarMjnrdciZeuJUqRwrf/5JHNhdpiPIr5GQ8IkqrFj5TDMQwcCjblGo1oeuA==
define-properties@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
@@ -199,6 +209,13 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
hasbin@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/hasbin/-/hasbin-1.2.3.tgz#78c5926893c80215c2b568ae1fd3fcab7a2696b0"
integrity sha512-CCd8e/w2w28G8DyZvKgiHnQJ/5XXDz6qiUHnthvtag/6T5acUeN5lqq+HMoBqcmgWueWDhiCplrw0Kb1zDACRg==
dependencies:
async "~1.5"
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -356,6 +373,13 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
ps-node@^0.1.6:
version "0.1.6"
resolved "https://registry.yarnpkg.com/ps-node/-/ps-node-0.1.6.tgz#9af67a99d7b1d0132e51a503099d38a8d2ace2c3"
integrity sha512-w7QJhUTbu70hpDso0YXDRNKCPNuchV8UTUZsAv0m7Qj5g85oHOJfr9drA1EjvK4nQK/bG8P97W4L6PJ3IQLoOA==
dependencies:
table-parser "^0.1.3"
readable-stream@^3.4.0, readable-stream@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
@@ -424,6 +448,13 @@ string_decoder@^1.1.1:
dependencies:
safe-buffer "~5.2.0"
table-parser@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/table-parser/-/table-parser-0.1.3.tgz#0441cfce16a59481684c27d1b5a67ff15a43c7b0"
integrity sha512-LCYeuvqqoPII3lzzYaXKbC3Forb+d2u4bNwhk/9FlivuGRxPE28YEWAYcujeSlLLDlMfvy29+WPybFJZFiKMYg==
dependencies:
connected-domain "^1.0.0"
text-hex@1.0.x:
version "1.0.0"
resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5"

View File

@@ -19,8 +19,6 @@
"devDependencies": {
"ansi-colors": "^4.1.1",
"dataurl": "0.1.0",
"hasbin": "^1.2.3",
"ps-node": "^0.1.6",
"runes": "^0.4.2"
},
"peerDependencies": {

View File

@@ -53,3 +53,28 @@ export interface ChildProcess {
ppid: number
command: string
}
export abstract class UACService {
isAvailable = false
abstract patchSessionOptionsForUAC (sessionOptions: SessionOptions): SessionOptions
}
export abstract class PTYProxy {
abstract getID (): string
abstract getPID (): Promise<number>
abstract resize (columns: number, rows: number): Promise<void>
abstract write (data: Buffer): Promise<void>
abstract kill (signal?: string): Promise<void>
abstract ackData (length: number): void
abstract subscribe (event: string, handler: (..._: any[]) => void): void
abstract unsubscribeAll (): void
abstract getChildProcesses (): Promise<ChildProcess[]>
abstract getTruePID (): Promise<number>
abstract getWorkingDirectory (): Promise<string|null>
}
export abstract class PTYInterface {
abstract spawn (...options: any[]): Promise<PTYProxy>
abstract restore (id: string): Promise<PTYProxy|null>
}

View File

@@ -13,7 +13,7 @@ ng-container(*ngIf='!argvMode')
(ngModelChange)='parseCommand()'
)
ng-container(*ngIf='argvMode')
ng-container(*ngIf='argvMode && _model')
.mb-3
label(translate) Program
.input-group
@@ -28,7 +28,7 @@ ng-container(*ngIf='argvMode')
[(ngModel)]='_model.command',
)
.mb-3
.mb-3(*ngIf='_model.args')
label(translate) Arguments
.input-group(
*ngFor='let arg of _model.args; index as i; trackBy: trackByIndex',

View File

@@ -1,6 +1,6 @@
command-line-editor([model]='profile.options')
.form-line(*ngIf='uac.isAvailable')
.form-line(*ngIf='uac?.isAvailable')
.header
.title(translate) Run as administrator
toggle(

View File

@@ -1,9 +1,7 @@
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { Component } from '@angular/core'
import { UACService } from '../services/uac.service'
import { LocalProfile } from '../api'
import { ElectronHostWindow, ElectronService } from 'tabby-electron'
import { ProfileSettingsComponent } from 'tabby-core'
import { Component, Inject, Optional } from '@angular/core'
import { LocalProfile, UACService } from '../api'
import { PlatformService, ProfileSettingsComponent } from 'tabby-core'
/** @hidden */
@@ -14,9 +12,8 @@ export class LocalProfileSettingsComponent implements ProfileSettingsComponent<L
profile: LocalProfile
constructor (
public uac: UACService,
private hostWindow: ElectronHostWindow,
private electron: ElectronService,
@Optional() @Inject(UACService) public uac: UACService|undefined,
private platform: PlatformService,
) { }
ngOnInit () {
@@ -30,14 +27,7 @@ export class LocalProfileSettingsComponent implements ProfileSettingsComponent<L
// if (!shell) {
// return
// }
const paths = (await this.electron.dialog.showOpenDialog(
this.hostWindow.getWindow(),
{
// TODO
// defaultPath: shell.fsBase,
properties: ['openDirectory', 'showHiddenFiles'],
},
)).filePaths
this.profile.options.cwd = paths[0]
this.profile.options.cwd = await this.platform.pickDirectory()
}
}

View File

@@ -1,10 +1,9 @@
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'
import { Component, Input, Injector } from '@angular/core'
import { Component, Input, Injector, Inject, Optional } from '@angular/core'
import { BaseTabProcess, WIN_BUILD_CONPTY_SUPPORTED, isWindowsBuild, GetRecoveryTokenOptions } from 'tabby-core'
import { BaseTerminalTabComponent } from 'tabby-terminal'
import { LocalProfile, SessionOptions } from '../api'
import { LocalProfile, SessionOptions, UACService } from '../api'
import { Session } from '../session'
import { UACService } from '../services/uac.service'
/** @hidden */
@Component({
@@ -20,7 +19,7 @@ export class TerminalTabComponent extends BaseTerminalTabComponent<LocalProfile>
// eslint-disable-next-line @typescript-eslint/no-useless-constructor
constructor (
injector: Injector,
private uac: UACService,
@Optional() @Inject(UACService) private uac: UACService|undefined,
) {
super(injector)
}
@@ -52,12 +51,12 @@ export class TerminalTabComponent extends BaseTerminalTabComponent<LocalProfile>
protected onFrontendReady (): void {
this.initializeSession(this.size.columns, this.size.rows)
this.savedStateIsLive = this.profile.options.restoreFromPTYID === this.session?.getPTYID()
this.savedStateIsLive = this.profile.options.restoreFromPTYID === this.session?.getID()
super.onFrontendReady()
}
initializeSession (columns: number, rows: number): void {
if (this.profile.options.runAsAdministrator && this.uac.isAvailable) {
if (this.profile.options.runAsAdministrator && this.uac?.isAvailable) {
this.profile = {
...this.profile,
options: this.uac.patchSessionOptionsForUAC(this.profile.options),
@@ -83,7 +82,7 @@ export class TerminalTabComponent extends BaseTerminalTabComponent<LocalProfile>
options: {
...this.profile.options,
cwd: cwd ?? this.profile.options.cwd,
restoreFromPTYID: options?.includeState && this.session?.getPTYID(),
restoreFromPTYID: options?.includeState && this.session?.getID(),
},
},
savedState: options?.includeState && this.frontend?.saveState(),

View File

@@ -4,9 +4,8 @@ import { FormsModule } from '@angular/forms'
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { ToastrModule } from 'ngx-toastr'
import TabbyCorePlugin, { HostAppService, ToolbarButtonProvider, TabRecoveryProvider, ConfigProvider, HotkeysService, HotkeyProvider, TabContextMenuItemProvider, CLIHandler, ConfigService, ProfileProvider } from 'tabby-core'
import TabbyCorePlugin, { HostAppService, ToolbarButtonProvider, TabRecoveryProvider, ConfigProvider, HotkeysService, HotkeyProvider, TabContextMenuItemProvider, CLIHandler, ProfileProvider } from 'tabby-core'
import TabbyTerminalModule from 'tabby-terminal'
import TabbyElectronPlugin from 'tabby-electron'
import { SettingsTabProvider } from 'tabby-settings'
import { TerminalTabComponent } from './components/terminalTab.component'
@@ -16,30 +15,14 @@ import { LocalProfileSettingsComponent } from './components/localProfileSettings
import { CommandLineEditorComponent } from './components/commandLineEditor.component'
import { TerminalService } from './services/terminal.service'
import { DockMenuService } from './services/dockMenu.service'
import { ButtonProvider } from './buttonProvider'
import { RecoveryProvider } from './recoveryProvider'
import { ShellProvider } from './api'
import { ShellSettingsTabProvider } from './settings'
import { TerminalConfigProvider } from './config'
import { LocalTerminalHotkeyProvider } from './hotkeys'
import { NewTabContextMenu, SaveAsProfileContextMenu } from './tabContextMenu'
import { CmderShellProvider } from './shells/cmder'
import { Cygwin32ShellProvider } from './shells/cygwin32'
import { Cygwin64ShellProvider } from './shells/cygwin64'
import { GitBashShellProvider } from './shells/gitBash'
import { LinuxDefaultShellProvider } from './shells/linuxDefault'
import { MacOSDefaultShellProvider } from './shells/macDefault'
import { MSYS2ShellProvider } from './shells/msys2'
import { POSIXShellsProvider } from './shells/posix'
import { PowerShellCoreShellProvider } from './shells/powershellCore'
import { WindowsDefaultShellProvider } from './shells/winDefault'
import { WindowsStockShellsProvider } from './shells/windowsStock'
import { WSLShellProvider } from './shells/wsl'
import { VSDevToolsProvider } from './shells/vs'
import { AutoOpenTabCLIHandler, OpenPathCLIHandler, TerminalCLIHandler } from './cli'
import { LocalProfilesService } from './profiles'
@@ -51,7 +34,6 @@ import { LocalProfilesService } from './profiles'
NgbModule,
ToastrModule,
TabbyCorePlugin,
TabbyElectronPlugin,
TabbyTerminalModule,
],
providers: [
@@ -62,20 +44,6 @@ import { LocalProfilesService } from './profiles'
{ provide: ConfigProvider, useClass: TerminalConfigProvider, multi: true },
{ provide: HotkeyProvider, useClass: LocalTerminalHotkeyProvider, multi: true },
{ provide: ShellProvider, useClass: WindowsDefaultShellProvider, multi: true },
{ provide: ShellProvider, useClass: MacOSDefaultShellProvider, multi: true },
{ provide: ShellProvider, useClass: LinuxDefaultShellProvider, multi: true },
{ provide: ShellProvider, useClass: WindowsStockShellsProvider, multi: true },
{ provide: ShellProvider, useClass: PowerShellCoreShellProvider, multi: true },
{ provide: ShellProvider, useClass: CmderShellProvider, multi: true },
{ provide: ShellProvider, useClass: Cygwin32ShellProvider, multi: true },
{ provide: ShellProvider, useClass: Cygwin64ShellProvider, multi: true },
{ provide: ShellProvider, useClass: GitBashShellProvider, multi: true },
{ provide: ShellProvider, useClass: POSIXShellsProvider, multi: true },
{ provide: ShellProvider, useClass: MSYS2ShellProvider, multi: true },
{ provide: ShellProvider, useClass: WSLShellProvider, multi: true },
{ provide: ShellProvider, useClass: VSDevToolsProvider, multi: true },
{ provide: ProfileProvider, useClass: LocalProfilesService, multi: true },
{ provide: TabContextMenuItemProvider, useClass: NewTabContextMenu, multi: true },
@@ -84,11 +52,6 @@ import { LocalProfilesService } from './profiles'
{ provide: CLIHandler, useClass: TerminalCLIHandler, multi: true },
{ provide: CLIHandler, useClass: OpenPathCLIHandler, multi: true },
{ provide: CLIHandler, useClass: AutoOpenTabCLIHandler, multi: true },
// For WindowsDefaultShellProvider
PowerShellCoreShellProvider,
WSLShellProvider,
WindowsStockShellsProvider,
],
declarations: [
TerminalTabComponent,
@@ -108,8 +71,6 @@ export default class LocalTerminalModule { // eslint-disable-line @typescript-es
hotkeys: HotkeysService,
terminal: TerminalService,
hostApp: HostAppService,
dockMenu: DockMenuService,
config: ConfigService,
) {
hotkeys.hotkey$.subscribe(async (hotkey) => {
if (hotkey === 'new-tab') {
@@ -119,10 +80,6 @@ export default class LocalTerminalModule { // eslint-disable-line @typescript-es
hostApp.newWindow()
}
})
config.ready$.toPromise().then(() => {
dockMenu.update()
})
}
}

View File

@@ -1,87 +1,12 @@
import * as psNode from 'ps-node'
import * as fs from 'mz/fs'
import * as fsSync from 'fs'
import { Injector } from '@angular/core'
import { HostAppService, ConfigService, WIN_BUILD_CONPTY_SUPPORTED, isWindowsBuild, Platform, BootstrapData, BOOTSTRAP_DATA, LogService } from 'tabby-core'
import { BaseSession } from 'tabby-terminal'
import { ipcRenderer } from 'electron'
import { getWorkingDirectoryFromPID } from 'native-process-working-directory'
import { SessionOptions, ChildProcess } from './api'
/* eslint-disable block-scoped-var */
try {
var macOSNativeProcessList = require('macos-native-processlist') // eslint-disable-line @typescript-eslint/no-var-requires, no-var
} catch { }
try {
var windowsProcessTree = require('windows-process-tree') // eslint-disable-line @typescript-eslint/no-var-requires, no-var
} catch { }
import { SessionOptions, ChildProcess, PTYInterface, PTYProxy } from './api'
const windowsDirectoryRegex = /([a-zA-Z]:[^\:\[\]\?\"\<\>\|]+)/mi
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
export class PTYProxy {
private id: string
private subscriptions: Map<string, any> = new Map()
static spawn (...options: any[]): PTYProxy {
return new PTYProxy(null, ...options)
}
static restore (id: string): PTYProxy|null {
if (ipcRenderer.sendSync('pty:exists', id)) {
return new PTYProxy(id)
}
return null
}
private constructor (id: string|null, ...options: any[]) {
if (id) {
this.id = id
} else {
this.id = ipcRenderer.sendSync('pty:spawn', ...options)
}
}
getPTYID (): string {
return this.id
}
getPID (): number {
return ipcRenderer.sendSync('pty:get-pid', this.id)
}
subscribe (event: string, handler: (..._: any[]) => void): void {
const key = `pty:${this.id}:${event}`
const newHandler = (_event, ...args) => handler(...args)
this.subscriptions.set(key, newHandler)
ipcRenderer.on(key, newHandler)
}
ackData (length: number): void {
ipcRenderer.send('pty:ack-data', this.id, length)
}
unsubscribeAll (): void {
for (const k of this.subscriptions.keys()) {
ipcRenderer.off(k, this.subscriptions.get(k))
}
}
resize (columns: number, rows: number): void {
ipcRenderer.send('pty:resize', this.id, columns, rows)
}
write (data: Buffer): void {
ipcRenderer.send('pty:write', this.id, data)
}
kill (signal?: string): void {
ipcRenderer.send('pty:kill', this.id, signal)
}
}
function mergeEnv (...envs) {
const result = {}
const keyMap = {}
@@ -121,19 +46,23 @@ export class Session extends BaseSession {
private config: ConfigService
private hostApp: HostAppService
private bootstrapData: BootstrapData
private ptyInterface: PTYInterface
constructor (injector: Injector) {
constructor (
injector: Injector,
) {
super(injector.get(LogService).create('local'))
this.config = injector.get(ConfigService)
this.hostApp = injector.get(HostAppService)
this.ptyInterface = injector.get(PTYInterface)
this.bootstrapData = injector.get(BOOTSTRAP_DATA)
}
start (options: SessionOptions): void {
async start (options: SessionOptions): Promise<void> {
let pty: PTYProxy|null = null
if (options.restoreFromPTYID) {
pty = PTYProxy.restore(options.restoreFromPTYID)
pty = await this.ptyInterface.restore(options.restoreFromPTYID)
options.restoreFromPTYID = undefined
}
@@ -175,7 +104,7 @@ export class Session extends BaseSession {
cwd = undefined
}
pty = PTYProxy.spawn(options.command, options.args ?? [], {
pty = await this.ptyInterface.spawn(options.command, options.args ?? [], {
name: 'xterm-256color',
cols: options.width ?? 80,
rows: options.height ?? 30,
@@ -191,17 +120,9 @@ export class Session extends BaseSession {
this.pty = pty
this.truePID = this.pty.getPID()
setTimeout(async () => {
// Retrieve any possible single children now that shell has fully started
let processes = await this.getChildProcesses()
while (processes.length === 1) {
this.truePID = processes[0].pid
processes = await this.getChildProcesses()
}
pty.getTruePID().then(async () => {
this.initialCWD = await this.getWorkingDirectory()
}, 2000)
})
this.open = true
@@ -236,8 +157,8 @@ export class Session extends BaseSession {
this.destroyed$.subscribe(() => this.pty!.unsubscribeAll())
}
getPTYID (): string|null {
return this.pty?.getPTYID() ?? null
getID (): string|null {
return this.pty?.getID() ?? null
}
resize (columns: number, rows: number): void {
@@ -258,37 +179,7 @@ export class Session extends BaseSession {
}
async getChildProcesses (): Promise<ChildProcess[]> {
if (!this.truePID) {
return []
}
if (this.hostApp.platform === Platform.macOS) {
const processes = await macOSNativeProcessList.getProcessList()
return processes.filter(x => x.ppid === this.truePID).map(p => ({
pid: p.pid,
ppid: p.ppid,
command: p.name,
}))
}
if (this.hostApp.platform === Platform.Windows) {
return new Promise<ChildProcess[]>(resolve => {
windowsProcessTree.getProcessTree(this.truePID, tree => {
resolve(tree ? tree.children.map(child => ({
pid: child.pid,
ppid: tree.pid,
command: child.name,
})) : [])
})
})
}
return new Promise<ChildProcess[]>((resolve, reject) => {
psNode.lookup({ ppid: this.truePID }, (err, processes) => {
if (err) {
reject(err)
return
}
resolve(processes as ChildProcess[])
})
})
return this.pty?.getChildProcesses() ?? []
}
async gracefullyKillProcess (): Promise<void> {
@@ -297,9 +188,9 @@ export class Session extends BaseSession {
} else {
await new Promise<void>((resolve) => {
this.kill('SIGTERM')
setTimeout(() => {
setTimeout(async () => {
try {
process.kill(this.pty!.getPID(), 0)
process.kill(await this.pty!.getPID(), 0)
// still alive
this.kill('SIGKILL')
resolve()
@@ -312,19 +203,16 @@ export class Session extends BaseSession {
}
supportsWorkingDirectory (): boolean {
return !!(this.truePID ?? this.reportedCWD ?? this.guessedCWD)
return !!(this.initialCWD ?? this.reportedCWD ?? this.guessedCWD)
}
async getWorkingDirectory (): Promise<string|null> {
if (this.reportedCWD) {
return this.reportedCWD
}
if (!this.truePID) {
return null
}
let cwd: string|null = null
try {
cwd = getWorkingDirectoryFromPID(this.truePID)
cwd = await this.pty?.getWorkingDirectory() ?? null
} catch (exc) {
console.info('Could not read working directory:', exc)
}

View File

@@ -1,10 +1,9 @@
import { Injectable } from '@angular/core'
import { Inject, Injectable, Optional } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { ConfigService, BaseTabComponent, TabContextMenuItemProvider, NotificationsService, MenuItemOptions, ProfilesService, PromptModalComponent, TranslateService } from 'tabby-core'
import { TerminalTabComponent } from './components/terminalTab.component'
import { UACService } from './services/uac.service'
import { TerminalService } from './services/terminal.service'
import { LocalProfile } from './api'
import { LocalProfile, UACService } from './api'
/** @hidden */
@Injectable()
@@ -64,7 +63,7 @@ export class NewTabContextMenu extends TabContextMenuItemProvider {
public config: ConfigService,
private profilesService: ProfilesService,
private terminalService: TerminalService,
private uac: UACService,
@Optional() @Inject(UACService) private uac: UACService|undefined,
private translate: TranslateService,
) {
super()
@@ -99,7 +98,7 @@ export class NewTabContextMenu extends TabContextMenuItemProvider {
},
]
if (this.uac.isAvailable) {
if (this.uac?.isAvailable) {
items.push({
label: this.translate.instant('New admin tab'),
submenu: profiles.map(profile => ({
@@ -117,7 +116,7 @@ export class NewTabContextMenu extends TabContextMenuItemProvider {
})
}
if (tab instanceof TerminalTabComponent && tabHeader && this.uac.isAvailable) {
if (tab instanceof TerminalTabComponent && tabHeader && this.uac?.isAvailable) {
const terminalTab = tab
items.push({
label: this.translate.instant('Duplicate as administrator'),

View File

@@ -7,43 +7,12 @@ ansi-colors@^4.1.1:
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
async@~1.5:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
connected-domain@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/connected-domain/-/connected-domain-1.0.0.tgz#bfe77238c74be453a79f0cb6058deeb4f2358e93"
integrity sha1-v+dyOMdL5FOnnwy2BY3utPI1jpM=
dataurl@0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/dataurl/-/dataurl-0.1.0.tgz#1f4734feddec05ffe445747978d86759c4b33199"
integrity sha1-H0c0/t3sBf/kRXR5eNhnWcSzMZk=
hasbin@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/hasbin/-/hasbin-1.2.3.tgz#78c5926893c80215c2b568ae1fd3fcab7a2696b0"
integrity sha1-eMWSaJPIAhXCtWiuH9P8q3omlrA=
dependencies:
async "~1.5"
ps-node@^0.1.6:
version "0.1.6"
resolved "https://registry.yarnpkg.com/ps-node/-/ps-node-0.1.6.tgz#9af67a99d7b1d0132e51a503099d38a8d2ace2c3"
integrity sha1-mvZ6mdex0BMuUaUDCZ04qNKs4sM=
dependencies:
table-parser "^0.1.3"
runes@^0.4.2:
version "0.4.3"
resolved "https://registry.yarnpkg.com/runes/-/runes-0.4.3.tgz#32f7738844bc767b65cc68171528e3373c7bb355"
integrity sha512-K6p9y4ZyL9wPzA+PMDloNQPfoDGTiFYDvdlXznyGKgD10BJpcAosvATKrExRKOrNLgD8E7Um7WGW0lxsnOuNLg==
table-parser@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/table-parser/-/table-parser-0.1.3.tgz#0441cfce16a59481684c27d1b5a67ff15a43c7b0"
integrity sha1-BEHPzhallIFoTCfRtaZ/8VpDx7A=
dependencies:
connected-domain "^1.0.0"

View File

@@ -21,8 +21,8 @@ ul.nav-tabs.mb-2(ngbNav, #nav='ngbNav')
i.fas.fa-fw.fa-search(*ngIf='availablePluginsReady')
input.form-control(
type='text',
[(ngModel)]='_1',
(ngModelChange)='searchAvailable(_1)',
[(ngModel)]='availableFilter',
(ngModelChange)='searchAvailable(availableFilter)',
[placeholder]='"Search plugins"|translate'
)
@@ -64,8 +64,8 @@ ul.nav-tabs.mb-2(ngbNav, #nav='ngbNav')
i.fas.fa-fw.fa-search
input.form-control(
type='text',
[(ngModel)]='_2',
(ngModelChange)='searchInstalled(_2)',
[(ngModel)]='installedFilter',
(ngModelChange)='searchInstalled(installedFilter)',
[placeholder]='"Search plugins"|translate'
)
@@ -89,7 +89,7 @@ ul.nav-tabs.mb-2(ngbNav, #nav='ngbNav')
i.fas.fa-fw.fa-circle-notch.fa-spin(*ngIf='busy.get(plugin.name) == BusyState.Installing')
span(
translate='Upgrade to {version}',
[translateParams]='{version: knownUpgrades[plugin.name].version}'
[translateParams]='{version: knownUpgrades[plugin.name]?.version}'
)
ng-template(ngbPanelContent)

View File

@@ -32,6 +32,8 @@ export class PluginsSettingsTabComponent {
@HostBinding('class.content-box') true
installedPlugins$: PluginInfo[] = []
installedFilter = ''
availableFilter = ''
constructor (
private config: ConfigService,

View File

@@ -132,7 +132,7 @@ export class SerialSession extends BaseSession {
}
write (data: Buffer): void {
this.serial?.write(data.toString())
this.serial?.write(data)
}
async destroy (): Promise<void> {

View File

@@ -85,7 +85,7 @@ ul.nav-tabs(ngbNav, #nav='ngbNav')
.header
.title(translate) Slow feed
.description(translate) Sends data one byte at a time
toggle([(ngModel)]='profile.options.slowFeed')
toggle([(ngModel)]='profile.options.slowSend')
li(ngbNavItem)
a(ngbNavLink, translate) Login scripts

View File

@@ -9,6 +9,18 @@ h3.mb-3(translate) Window
)
option(*ngFor='let theme of themes', [ngValue]='theme.name') {{theme.name}}
.form-line
.header
.title(translate) Spaciness
.description(translate) Controls the amount of space between elements
input(
type='range',
[(ngModel)]='config.store.appearance.spaciness',
(mouseup)='saveConfiguration()',
min='0.6',
max='1.4',
step='0.1'
)
.form-line(*ngIf='hostApp.platform === Platform.Web')
.header
@@ -185,6 +197,7 @@ h3.mt-4(translate) Docking
label.btn.btn-secondary(id='dockScreenCurrent')
span(translate) Current
input.btn-check(
*ngFor='let screen of screens',
type='radio',
name='dockScreen',
[(ngModel)]='config.store.appearance.dockScreen',

View File

@@ -10,7 +10,7 @@
.d-flex.align-items-center
label(translate) Last known host key fingerprint
.badge.text-bg-danger.ms-auto {{ selector.type }}
code {{knownHost.digest}}
code {{knownHost?.digest}}
.mb-3
.d-flex.align-items-center

View File

@@ -46,6 +46,6 @@
}
}
.btn-close svg {
.btn-link svg {
width: 12px;
}

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