mirror of
https://github.com/Eugeny/tabby.git
synced 2025-07-30 14:14:35 +00:00
Compare commits
11 Commits
revert-861
...
all-contri
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a7ce222041 | ||
![]() |
4c31b50da5 | ||
![]() |
ce3dbbd2b4 | ||
![]() |
afee91d04a | ||
![]() |
b976aef820 | ||
![]() |
9259ec2825 | ||
![]() |
6b2b0cc1f0 | ||
![]() |
2ee37ece6e | ||
![]() |
29532884df | ||
![]() |
0afb4e1fe7 | ||
![]() |
de1c621969 |
@@ -1130,60 +1130,6 @@
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "CryptoGnome",
|
||||
"name": "Crypto Gnome",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/33667144?v=4",
|
||||
"profile": "https://www.gnomegarden.io/",
|
||||
"contributions": [
|
||||
"financial"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "rbukovansky",
|
||||
"name": "Richard Bukovansky",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/1004491?v=4",
|
||||
"profile": "https://github.com/rbukovansky",
|
||||
"contributions": [
|
||||
"financial"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "pseudocc",
|
||||
"name": "catlas",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/85104110?v=4",
|
||||
"profile": "https://github.com/pseudocc",
|
||||
"contributions": [
|
||||
"financial"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "Kapocsi",
|
||||
"name": "Thomas Kapocsi",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/84490604?v=4",
|
||||
"profile": "http://kapocsi.ca",
|
||||
"contributions": [
|
||||
"doc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "dylhack",
|
||||
"name": "Dylan Hackworth",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/27179786?v=4",
|
||||
"profile": "https://dylhack.dev/",
|
||||
"contributions": [
|
||||
"financial"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "echo304",
|
||||
"name": "Sangboak Lee",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/16456651?v=4",
|
||||
"profile": "https://github.com/echo304",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
}
|
||||
],
|
||||
"contributorsPerLine": 7,
|
||||
|
10
.github/workflows/build.yml
vendored
10
.github/workflows/build.yml
vendored
@@ -11,7 +11,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Installing Node
|
||||
uses: actions/setup-node@v3.6.0
|
||||
uses: actions/setup-node@v3.5.1
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
@@ -47,7 +47,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Installing Node
|
||||
uses: actions/setup-node@v3.6.0
|
||||
uses: actions/setup-node@v3.5.1
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
@@ -127,7 +127,7 @@ jobs:
|
||||
path: artifact-zip
|
||||
|
||||
Linux-Build:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-18.04 # build against an older glibc for compatibility
|
||||
needs: Lint
|
||||
strategy:
|
||||
matrix:
|
||||
@@ -144,7 +144,7 @@ jobs:
|
||||
if: matrix.build-arch != 'x64'
|
||||
|
||||
- name: Install Node (x64)
|
||||
uses: actions/setup-node@v3.6.0
|
||||
uses: actions/setup-node@v3.5.1
|
||||
with:
|
||||
node-version: 16
|
||||
if: matrix.build-arch == 'x64'
|
||||
@@ -293,7 +293,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Installing Node
|
||||
uses: actions/setup-node@v3.6.0
|
||||
uses: actions/setup-node@v3.5.1
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
|
2
.github/workflows/docs.yml
vendored
2
.github/workflows/docs.yml
vendored
@@ -12,7 +12,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Installing Node
|
||||
uses: actions/setup-node@v3.6.0
|
||||
uses: actions/setup-node@v3.5.1
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
|
@@ -42,13 +42,13 @@ yarn start
|
||||
To build an installer, first complete a "normal" build as described above and then run:
|
||||
|
||||
```
|
||||
node scripts/prepackage-plugins.mjs
|
||||
node scripts/prepackage-plugins.js
|
||||
|
||||
node scripts/build-windows.mjs
|
||||
node scripts/build-windows.js
|
||||
# or
|
||||
node scripts/build-linux.mjs
|
||||
node scripts/build-linux.js
|
||||
# or
|
||||
node scripts/build-macos.mjs
|
||||
node scripts/build-macos.js
|
||||
```
|
||||
|
||||
The artifacts will be produced in the `dist` folder.
|
||||
|
@@ -313,14 +313,6 @@ Dank geht an diese wunderbaren Menschen ([emoji key](https://allcontributors.org
|
||||
<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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -315,14 +315,6 @@ Gracias a estas maravillosas personas ([emoji key](https://allcontributors.org/d
|
||||
<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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -312,14 +312,6 @@ Terima kasih kepada mereka yang telah membantu ([emoji key](https://allcontribut
|
||||
<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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -308,14 +308,6 @@ Grazie a queste persone meravigliose ([emoji key](https://allcontributors.org/do
|
||||
<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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -11,24 +11,17 @@
|
||||
</a>
|
||||
</p>
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
> 👋 リモート環境の管理に困ってませんか? [WarpgateというSSH/HTTP/MySQL向けの便利な踏み台サーバー](https://github.com/warp-tech/warpgate)も作ってます。Tabbyとも相性ばっちりなので良かったらお試しください。
|
||||
|
||||
|
||||
----
|
||||
|
||||
### ダウンロード:
|
||||
|
||||
* [最新のリリース](https://github.com/Eugeny/tabby/releases/latest)
|
||||
* [リポジトリ](https://packagecloud.io/eugeny/tabby): [Debian/Ubuntu向け](https://packagecloud.io/eugeny/tabby/install#bash-deb), [RPM向け](https://packagecloud.io/eugeny/tabby/install#bash-rpm)
|
||||
* [最新の開発ビルド版](https://nightly.link/Eugeny/tabby/workflows/build/master)
|
||||
* [Latest release](https://github.com/Eugeny/tabby/releases/latest)
|
||||
* [Repositories](https://packagecloud.io/eugeny/tabby): [Debian/Ubuntu-based](https://packagecloud.io/eugeny/tabby/install#bash-deb), [RPM-based](https://packagecloud.io/eugeny/tabby/install#bash-rpm)
|
||||
* [Latest nightly build](https://nightly.link/Eugeny/tabby/workflows/build/master)
|
||||
|
||||
<br/>
|
||||
<p align="center">
|
||||
このREADMEは次の言語でもご覧いただけます: <a href="./README.md">:gb: English</a> · <a href="./README.es-ES.md">:es: Spanish</a> · <a href="./README.ru-RU.md">:ru: Русский</a> · <a href="./README.ko-KR.md">:kr: 한국어</a> · <a href="./README.zh-CN.md">:cn: 简体中文</a> · <a href="./README.it-IT.md">:it: Italiano</a> · <a href="./README.de-DE.md">:de: Deutsch</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a> · <a href="./README.pt-BR.md">:br: Português</a>
|
||||
このREADMEは次の言語にも対応: <a href="./README.md">:gb: English</a> · <a href="./README.es-ES.md">:es: Spanish</a> · <a href="./README.ru-RU.md">:ru: Русский</a> · <a href="./README.ko-KR.md">:kr: 한국어</a> · <a href="./README.zh-CN.md">:cn: 简体中文</a> · <a href="./README.it-IT.md">:it: Italiano</a> · <a href="./README.de-DE.md">:de: Deutsch</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a> · <a href="./README.pt-BR.md">:br: Português</a>
|
||||
</p>
|
||||
|
||||
----
|
||||
@@ -47,7 +40,7 @@
|
||||
* 大量の出力にも止まることはありません
|
||||
* タブキーによる補完機能にも対応したWindows上での快適なシェル (Clink使用)
|
||||
* SSHの機密性の高い情報と設定を保存する暗号化コンテナの搭載
|
||||
* SSH、SFTP、Telnetクライアントが[Webアプリ](https://tabby.sh/app)としても利用できます ([セルフホスティング](https://github.com/Eugeny/tabby-web)も可能)
|
||||
* SSH、SFTP、Telnetクライアントが[Webアプリ](https://tabby.sh/app)として利用可能 ([セルフホスティング](https://github.com/Eugeny/tabby-web)も可能)
|
||||
|
||||
# コンテンツ <!-- omit in toc -->
|
||||
|
||||
@@ -94,7 +87,7 @@
|
||||
* SSH2クライアントと接続マネージャー
|
||||
* X11とポートフォワーディング
|
||||
* 自動ジャンプサーバー管理
|
||||
* エージェント転送(PageantとWindows標準OpenSSHエージェントを含む)
|
||||
* エージェント転送(PageantとWindows標準OpenSSHエージェントを含む)
|
||||
* ログインスクリプト
|
||||
|
||||
<a name="serial"></a>
|
||||
@@ -111,7 +104,7 @@
|
||||
|
||||
# ポータブル機能
|
||||
|
||||
Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォルダを作成すれば、ポータブルアプリとして実行することができます。
|
||||
Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォルダを作成すれば、ポータブルアプリケーションとして実行することができます。
|
||||
|
||||
<a name="plugins"></a>
|
||||
|
||||
@@ -123,10 +116,10 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
|
||||
* [title-control](https://github.com/kbjr/terminus-title-control) - タブ名の前後に文字を入れたり指定した文字の削除をすることができます
|
||||
* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - 一つもしくは複数のタブに手軽にコマンド送信することができます
|
||||
* [save-output](https://github.com/Eugeny/tabby-save-output) - ターミナルの出力をファイルに保存することができます
|
||||
* [sync-config](https://github.com/starxg/terminus-sync-config) - GistやGiteeで設定ファイルを同期することができます
|
||||
* [clippy](https://github.com/Eugeny/tabby-clippy) - プラグインの作例として、いつも厄介なあいつが出てくるプラグイン
|
||||
* [sync-config](https://github.com/starxg/terminus-sync-config) - GistやGiteeに設定ファイルを同期することができます
|
||||
* [clippy](https://github.com/Eugeny/tabby-clippy) - いつもあなたを悩ますプラグインの作例
|
||||
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - 指定された設定からカスタマイズされたワークスペースを作成することができます
|
||||
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - Tabby内の端末で選択したテキストを既定ブラウザで開くことができます。
|
||||
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - Tabby内の端末で選択したテキストを標準の既定ブラウザで開くことができます。
|
||||
|
||||
<a name="themes"></a>
|
||||
|
||||
@@ -144,21 +137,17 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
|
||||
|
||||
[**packagecloud**](https://packagecloud.io)は、Debian/RPMリポジトリのホスティングを無償で提供しています
|
||||
|
||||
[](https://keygen.sh/?via=eugene)
|
||||
|
||||
[**keygen**](https://keygen.sh/?via=eugene)は、自動リリース機能および自動更新機能のホスティングを無償で提供しています
|
||||
|
||||
<a name="contributing"></a>
|
||||
# コントリビュート
|
||||
|
||||
プルリクエストやプラグインは大歓迎です!
|
||||
|
||||
プロジェクトの構成や、非常に簡単なプラグイン開発のチュートリアルについては、[HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md)および、[API docs](https://docs.tabby.sh/)を参照してください。
|
||||
プロジェクトの構成や、ごく簡単なプラグイン開発のチュートリアルについては、[HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md)及び、[API docs](https://docs.tabby.sh/)を参照してください。
|
||||
|
||||
---
|
||||
<a name="contributors"></a>
|
||||
|
||||
以下の素晴らしい方々([emoji key](https://allcontributors.org/docs/en/emoji-key))に感謝いたします:
|
||||
この素晴らしい人たち([emoji key](https://allcontributors.org/docs/en/emoji-key))に感謝します:
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
@@ -323,14 +312,6 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
|
||||
<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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -340,4 +321,4 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
このプロジェクトは[all-contributors](https://github.com/all-contributors/all-contributors)の仕様に準拠しています。どのような形の貢献でも歓迎いたします!
|
||||
このプロジェクトは[all-contributors](https://github.com/all-contributors/all-contributors)の仕様に準拠しています。どのような形の貢献でも歓迎します!
|
||||
|
@@ -302,14 +302,6 @@ Pull requests and plugins are welcome!
|
||||
<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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
10
README.md
10
README.md
@@ -16,8 +16,6 @@
|
||||
|
||||
> 👋 Managing remote environments? Check out [Warpgate, my smart SSH/HTTP/MySQL bastion server](https://github.com/warp-tech/warpgate), it works great with Tabby, you'll love it.
|
||||
|
||||
> 👋 [Tabby-web](https://github.com/Eugeny/tabby-web) is looking for sponsors. As I can't afford to host it myself any longer, I'm looking for a sponsor to cover the hosting costs. If you're interested, please [get in touch](https://twitter.com/eugeeeeny)!
|
||||
|
||||
|
||||
----
|
||||
|
||||
@@ -324,14 +322,6 @@ 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/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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -316,14 +316,6 @@ Obrigado vai para essas pessoas maravilhosas ([emoji key](https://allcontributor
|
||||
<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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -308,14 +308,6 @@ Pull-запросы и плагины приветствуются!
|
||||
<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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -307,14 +307,6 @@
|
||||
<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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -125,11 +125,7 @@ export class Window {
|
||||
})
|
||||
|
||||
this.window.on('blur', () => {
|
||||
if (
|
||||
(this.configStore.appearance?.dock ?? 'off') !== 'off' &&
|
||||
this.configStore.appearance?.dockHideOnBlur &&
|
||||
!BrowserWindow.getFocusedWindow()
|
||||
) {
|
||||
if ((this.configStore.appearance?.dock ?? 'off') !== 'off' && this.configStore.appearance?.dockHideOnBlur) {
|
||||
this.hide()
|
||||
}
|
||||
})
|
||||
|
@@ -15,7 +15,7 @@
|
||||
"watch": "webpack --progress --color --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@electron/remote": "2.0.10",
|
||||
"@electron/remote": "2.0.8",
|
||||
"@tabby-gang/node-pty": "^0.11.0-beta.203",
|
||||
"any-promise": "^1.3.0",
|
||||
"electron-config": "2.0.0",
|
||||
@@ -32,24 +32,24 @@
|
||||
"rxjs": "^7.5.7",
|
||||
"source-map-support": "^0.5.20",
|
||||
"v8-compile-cache": "^2.3.0",
|
||||
"yargs": "^17.7.2"
|
||||
"yargs": "^17.3.1"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@tabby-gang/windows-blurbehind": "^3.0.0",
|
||||
"macos-native-processlist": "^2.1.0",
|
||||
"patch-package": "^6.5.0",
|
||||
"serialport": "11.0.0",
|
||||
"serialport": "10.5.0",
|
||||
"serialport-binding-webserialapi": "^1.0.3",
|
||||
"windows-native-registry": "^3.2.1",
|
||||
"windows-process-tree": "^0.4.0"
|
||||
"windows-process-tree": "^0.3.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@ngx-translate/core": "^14.0.0",
|
||||
"@types/mz": "2.7.4",
|
||||
"@types/node": "20.3.1",
|
||||
"@types/node": "18.11.19",
|
||||
"atomically": "^1.7.0",
|
||||
"filesize": "^9",
|
||||
"ngx-filesize": "^3.0.2"
|
||||
"ngx-filesize": "^3.0.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"tabby-community-color-schemes": "*",
|
||||
|
@@ -1,7 +1,3 @@
|
||||
html {
|
||||
--spaciness: 1;
|
||||
}
|
||||
|
||||
body {
|
||||
min-height: 100vh;
|
||||
overflow: hidden;
|
||||
@@ -25,8 +21,8 @@ a, button {
|
||||
|
||||
& > svg {
|
||||
pointer-events: none;
|
||||
// width: 16px;
|
||||
// height: 16px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -4,6 +4,4 @@ export const PLUGIN_BLACKLIST = [
|
||||
'terminus-clickable-links', // now bundled with Tabby
|
||||
'tabby-clickable-links', // now bundled with Tabby
|
||||
'terminus-clickable-ips', // broken, functionality now bundled with Tabby
|
||||
'terminus-elastic-quick-commands', // broken and abandoned, fork of quick-commands
|
||||
'terminus-elastic-quick-cmds', // broken and abandoned, fork of quick-commands
|
||||
]
|
||||
|
@@ -27,8 +27,6 @@ const cachedBuiltinModules = {
|
||||
'@angular/compiler': require('@angular/compiler'),
|
||||
'@angular/core': require('@angular/core'),
|
||||
'@angular/forms': require('@angular/forms'),
|
||||
'@angular/localize': require('@angular/localize'),
|
||||
'@angular/localize/init': require('@angular/localize/init'),
|
||||
'@angular/platform-browser': require('@angular/platform-browser'),
|
||||
'@angular/platform-browser/animations': require('@angular/platform-browser/animations'),
|
||||
'@angular/platform-browser-dynamic': require('@angular/platform-browser-dynamic'),
|
||||
@@ -92,43 +90,12 @@ export function initModuleLookup (userPluginsPath: string): void {
|
||||
})
|
||||
}
|
||||
|
||||
const PLUGIN_PREFIX = 'tabby-'
|
||||
const LEGACY_PLUGIN_PREFIX = 'terminus-'
|
||||
|
||||
async function getCandidateLocationsInPluginDir (pluginDir: any): Promise<{ pluginDir: string, packageName: string }[]> {
|
||||
export async function findPlugins (): Promise<PluginInfo[]> {
|
||||
const paths = nodeModule.globalPaths
|
||||
let foundPlugins: PluginInfo[] = []
|
||||
const candidateLocations: { pluginDir: string, packageName: string }[] = []
|
||||
|
||||
if (await fs.exists(pluginDir)) {
|
||||
const pluginNames = await fs.readdir(pluginDir)
|
||||
if (await fs.exists(path.join(pluginDir, 'package.json'))) {
|
||||
candidateLocations.push({
|
||||
pluginDir: path.dirname(pluginDir),
|
||||
packageName: path.basename(pluginDir),
|
||||
})
|
||||
}
|
||||
|
||||
const promises = []
|
||||
|
||||
for (const packageName of pluginNames) {
|
||||
if ((packageName.startsWith(PLUGIN_PREFIX) || packageName.startsWith(LEGACY_PLUGIN_PREFIX)) && !PLUGIN_BLACKLIST.includes(packageName)) {
|
||||
const pluginPath = path.join(pluginDir, packageName)
|
||||
const infoPath = path.join(pluginPath, 'package.json')
|
||||
promises.push(fs.exists(infoPath).then(result => {
|
||||
if (result) {
|
||||
candidateLocations.push({ pluginDir, packageName })
|
||||
}
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
await Promise.all(promises)
|
||||
}
|
||||
|
||||
return candidateLocations
|
||||
}
|
||||
|
||||
async function getPluginCandidateLocation (paths: any): Promise<{ pluginDir: string, packageName: string }[]> {
|
||||
const candidateLocationsPromises: Promise<{ pluginDir: string, packageName: string }[]>[] = []
|
||||
const PREFIX = 'tabby-'
|
||||
const LEGACY_PREFIX = 'terminus-'
|
||||
|
||||
const processedPaths = []
|
||||
|
||||
@@ -139,84 +106,69 @@ async function getPluginCandidateLocation (paths: any): Promise<{ pluginDir: str
|
||||
processedPaths.push(pluginDir)
|
||||
|
||||
pluginDir = normalizePath(pluginDir)
|
||||
|
||||
candidateLocationsPromises.push(getCandidateLocationsInPluginDir(pluginDir))
|
||||
|
||||
}
|
||||
|
||||
const candidateLocations: { pluginDir: string, packageName: string }[] = []
|
||||
for (const pluginCandidateLocations of await Promise.all(candidateLocationsPromises)) {
|
||||
candidateLocations.push(...pluginCandidateLocations)
|
||||
}
|
||||
|
||||
return candidateLocations
|
||||
}
|
||||
|
||||
async function parsePluginInfo (pluginDir: string, packageName: string): Promise<PluginInfo|null> {
|
||||
const pluginPath = path.join(pluginDir, packageName)
|
||||
const infoPath = path.join(pluginPath, 'package.json')
|
||||
|
||||
const name = packageName.startsWith(PLUGIN_PREFIX) ? packageName.substring(PLUGIN_PREFIX.length) : packageName.substring(LEGACY_PLUGIN_PREFIX.length)
|
||||
|
||||
try {
|
||||
const info = JSON.parse(await fs.readFile(infoPath, { encoding: 'utf-8' }))
|
||||
|
||||
if (!info.keywords || !(info.keywords.includes('terminus-plugin') || info.keywords.includes('terminus-builtin-plugin') || info.keywords.includes('tabby-plugin') || info.keywords.includes('tabby-builtin-plugin'))) {
|
||||
return null
|
||||
if (!await fs.exists(pluginDir)) {
|
||||
continue
|
||||
}
|
||||
|
||||
let author = info.author
|
||||
author = author.name || author
|
||||
|
||||
console.log(`Found ${name} in ${pluginDir}`)
|
||||
|
||||
return {
|
||||
name: name,
|
||||
packageName: packageName,
|
||||
isBuiltin: pluginDir === builtinPluginsPath,
|
||||
isLegacy: info.keywords.includes('terminus-plugin') || info.keywords.includes('terminus-builtin-plugin'),
|
||||
version: info.version,
|
||||
description: info.description,
|
||||
author,
|
||||
path: pluginPath,
|
||||
info,
|
||||
const pluginNames = await fs.readdir(pluginDir)
|
||||
if (await fs.exists(path.join(pluginDir, 'package.json'))) {
|
||||
candidateLocations.push({
|
||||
pluginDir: path.dirname(pluginDir),
|
||||
packageName: path.basename(pluginDir),
|
||||
})
|
||||
}
|
||||
for (const packageName of pluginNames) {
|
||||
if ((packageName.startsWith(PREFIX) || packageName.startsWith(LEGACY_PREFIX)) && !PLUGIN_BLACKLIST.includes(packageName)) {
|
||||
candidateLocations.push({ pluginDir, packageName })
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Cannot load package info for', packageName)
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
export async function findPlugins (): Promise<PluginInfo[]> {
|
||||
const paths = nodeModule.globalPaths
|
||||
let foundPlugins: PluginInfo[] = []
|
||||
|
||||
const candidateLocations: { pluginDir: string, packageName: string }[] = await getPluginCandidateLocation(paths)
|
||||
|
||||
const foundPluginsPromises: Promise<PluginInfo|null>[] = []
|
||||
for (const { pluginDir, packageName } of candidateLocations) {
|
||||
const pluginPath = path.join(pluginDir, packageName)
|
||||
const infoPath = path.join(pluginPath, 'package.json')
|
||||
if (!await fs.exists(infoPath)) {
|
||||
continue
|
||||
}
|
||||
|
||||
const name = packageName.startsWith(PREFIX) ? packageName.substring(PREFIX.length) : packageName.substring(LEGACY_PREFIX.length)
|
||||
|
||||
if (builtinModules.includes(packageName) && pluginDir !== builtinPluginsPath) {
|
||||
continue
|
||||
}
|
||||
|
||||
foundPluginsPromises.push(parsePluginInfo(pluginDir, packageName))
|
||||
}
|
||||
console.log(`Found ${name} in ${pluginDir}`)
|
||||
|
||||
for (const pluginInfo of await Promise.all(foundPluginsPromises)) {
|
||||
if (pluginInfo) {
|
||||
const existing = foundPlugins.find(x => x.name === pluginInfo.name)
|
||||
if (existing) {
|
||||
if (existing.isLegacy) {
|
||||
console.info(`Plugin ${pluginInfo.packageName} already exists, overriding`)
|
||||
foundPlugins = foundPlugins.filter(x => x.name !== pluginInfo.name)
|
||||
} else {
|
||||
console.info(`Plugin ${pluginInfo.packageName} already exists, skipping`)
|
||||
continue
|
||||
}
|
||||
const existing = foundPlugins.find(x => x.name === name)
|
||||
if (existing) {
|
||||
if (existing.isLegacy) {
|
||||
console.info(`Plugin ${packageName} already exists, overriding`)
|
||||
foundPlugins = foundPlugins.filter(x => x.name !== name)
|
||||
} else {
|
||||
console.info(`Plugin ${packageName} already exists, skipping`)
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
foundPlugins.push(pluginInfo)
|
||||
try {
|
||||
const info = JSON.parse(await fs.readFile(infoPath, { encoding: 'utf-8' }))
|
||||
if (!info.keywords || !(info.keywords.includes('terminus-plugin') || info.keywords.includes('terminus-builtin-plugin') || info.keywords.includes('tabby-plugin') || info.keywords.includes('tabby-builtin-plugin'))) {
|
||||
continue
|
||||
}
|
||||
let author = info.author
|
||||
author = author.name || author
|
||||
foundPlugins.push({
|
||||
name: name,
|
||||
packageName: packageName,
|
||||
isBuiltin: pluginDir === builtinPluginsPath,
|
||||
isLegacy: info.keywords.includes('terminus-plugin') || info.keywords.includes('terminus-builtin-plugin'),
|
||||
version: info.version,
|
||||
description: info.description,
|
||||
author,
|
||||
path: pluginPath,
|
||||
info,
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('Cannot load package info for', packageName)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,36 +179,26 @@ export async function findPlugins (): Promise<PluginInfo[]> {
|
||||
|
||||
export async function loadPlugins (foundPlugins: PluginInfo[], progress: ProgressCallback): Promise<any[]> {
|
||||
const plugins: any[] = []
|
||||
const pluginsPromises: Promise<any>[] = []
|
||||
|
||||
let index = 0
|
||||
const setProgress = function () {
|
||||
index++
|
||||
progress(index, foundPlugins.length)
|
||||
}
|
||||
|
||||
progress(0, 1)
|
||||
let index = 0
|
||||
for (const foundPlugin of foundPlugins) {
|
||||
pluginsPromises.push(new Promise(x => {
|
||||
console.info(`Loading ${foundPlugin.name}: ${nodeRequire.resolve(foundPlugin.path)}`)
|
||||
try {
|
||||
const packageModule = nodeRequire(foundPlugin.path)
|
||||
if (foundPlugin.packageName.startsWith('tabby-')) {
|
||||
cachedBuiltinModules[foundPlugin.packageName.replace('tabby-', 'terminus-')] = packageModule
|
||||
}
|
||||
const pluginModule = packageModule.default.forRoot ? packageModule.default.forRoot() : packageModule.default
|
||||
pluginModule.pluginName = foundPlugin.name
|
||||
pluginModule.bootstrap = packageModule.bootstrap
|
||||
plugins.push(pluginModule)
|
||||
} catch (error) {
|
||||
console.error(`Could not load ${foundPlugin.name}:`, error)
|
||||
console.info(`Loading ${foundPlugin.name}: ${nodeRequire.resolve(foundPlugin.path)}`)
|
||||
progress(index, foundPlugins.length)
|
||||
try {
|
||||
const packageModule = nodeRequire(foundPlugin.path)
|
||||
if (foundPlugin.packageName.startsWith('tabby-')) {
|
||||
cachedBuiltinModules[foundPlugin.packageName.replace('tabby-', 'terminus-')] = packageModule
|
||||
}
|
||||
setProgress()
|
||||
setTimeout(x, 50)
|
||||
}))
|
||||
const pluginModule = packageModule.default.forRoot ? packageModule.default.forRoot() : packageModule.default
|
||||
pluginModule.pluginName = foundPlugin.name
|
||||
pluginModule.bootstrap = packageModule.bootstrap
|
||||
plugins.push(pluginModule)
|
||||
await new Promise(x => setTimeout(x, 50))
|
||||
} catch (error) {
|
||||
console.error(`Could not load ${foundPlugin.name}:`, error)
|
||||
}
|
||||
index++
|
||||
}
|
||||
await Promise.all(pluginsPromises)
|
||||
|
||||
progress(1, 1)
|
||||
return plugins
|
||||
}
|
||||
|
260
app/yarn.lock
260
app/yarn.lock
@@ -2,10 +2,10 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@electron/remote@2.0.10":
|
||||
version "2.0.10"
|
||||
resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-2.0.10.tgz#133e2f607b1861ac249bd78b5abd1e961feed713"
|
||||
integrity sha512-3SFKKaQXcyWgwmibud+UqJl/XlHOgLcI3fwtB9pNelPSJAcTxocOJrF6FaxBIQaj1+R05Di6xuAswZpXAW7xhA==
|
||||
"@electron/remote@2.0.8":
|
||||
version "2.0.8"
|
||||
resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-2.0.8.tgz#85ff321f0490222993207106e2f720273bb1a5c3"
|
||||
integrity sha512-P10v3+iFCIvEPeYzTWWGwwHmqWnjoh8RYnbtZAb3RlQefy4guagzIwcWtfftABIfm6JJTNQf4WPSKWZOpLmHXw==
|
||||
|
||||
"@iarna/cli@^1.2.0":
|
||||
version "1.2.0"
|
||||
@@ -38,16 +38,16 @@
|
||||
"@serialport/bindings-interface" "^1.2.1"
|
||||
debug "^4.3.3"
|
||||
|
||||
"@serialport/bindings-cpp@11.0.1":
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/bindings-cpp/-/bindings-cpp-11.0.1.tgz#38afa6105ceb7888c6a2af2782822fca9130d65a"
|
||||
integrity sha512-3I1mniVg3osYuIUXxU0jB5AHPsxWmErmc3JC3WfUSlfXsjWMHkHfFzbW9Scuv/z/6DLCJIDyltabRa2FoW2qsQ==
|
||||
"@serialport/bindings-cpp@10.8.0":
|
||||
version "10.8.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/bindings-cpp/-/bindings-cpp-10.8.0.tgz#79507b57022ac264e963e7fbf3647a3821569a20"
|
||||
integrity sha512-OMQNJz5kJblbmZN5UgJXLwi2XNtVLxSKmq5VyWuXQVsUIJD4l9UGHnLPqM5LD9u3HPZgDI5w7iYN7gxkQNZJUw==
|
||||
dependencies:
|
||||
"@serialport/bindings-interface" "1.2.2"
|
||||
"@serialport/parser-readline" "10.5.0"
|
||||
debug "4.3.4"
|
||||
node-addon-api "6.1.0"
|
||||
node-gyp-build "4.6.0"
|
||||
"@serialport/parser-readline" "^10.2.1"
|
||||
debug "^4.3.2"
|
||||
node-addon-api "^5.0.0"
|
||||
node-gyp-build "^4.3.0"
|
||||
|
||||
"@serialport/bindings-interface@1.2.2":
|
||||
version "1.2.2"
|
||||
@@ -59,77 +59,65 @@
|
||||
resolved "https://registry.yarnpkg.com/@serialport/bindings-interface/-/bindings-interface-1.2.1.tgz#1ee80b0951ef4e4fd8a5a186621feff046aa2faf"
|
||||
integrity sha512-63Dyqz2gtryRDDckFusOYqLYhR3Hq/M4sEdbF9i/VsvDb6T+tNVgoAKUZ+FMrXXKnCSu+hYbk+MTc0XQANszxw==
|
||||
|
||||
"@serialport/parser-byte-length@11.0.0":
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-byte-length/-/parser-byte-length-11.0.0.tgz#074e6ed6b18d7a61edc75dba22d3115e8f37dd8c"
|
||||
integrity sha512-rExsdFKdzOIHOBqTwzxUF1A9nrluVIZKZOtvMq5i0Hc3euooGdmkx0VXYNRlI2rd6kJLTL2P+uIR+ZtCTRyT+w==
|
||||
"@serialport/parser-byte-length@10.5.0":
|
||||
version "10.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-byte-length/-/parser-byte-length-10.5.0.tgz#f3d4c1c7923222df2f3d3c7c8aaaa207fe373b49"
|
||||
integrity sha512-eHhr4lHKboq1OagyaXAqkemQ1XyoqbLQC8XJbvccm95o476TmEdW5d7AElwZV28kWprPW68ZXdGF2VXCkJgS2w==
|
||||
|
||||
"@serialport/parser-cctalk@11.0.0":
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-cctalk/-/parser-cctalk-11.0.0.tgz#6a5e2b299e8f1ef00308980e45ecdae23825181e"
|
||||
integrity sha512-eN1MvEIFwI4GedWJhte6eWF+NZtrjchZbMf0CE6NV9TRzJI1KLnFf90ZOj/mhGuANojX4sqWfJKQXwN6E8VSHQ==
|
||||
"@serialport/parser-cctalk@10.5.0":
|
||||
version "10.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-cctalk/-/parser-cctalk-10.5.0.tgz#0ee88db0768a361b7cfb9a394b74e480c38e1992"
|
||||
integrity sha512-Iwsdr03xmCKAiibLSr7b3w6ZUTBNiS+PwbDQXdKU/clutXjuoex83XvsOtYVcNZmwJlVNhAUbkG+FJzWwIa4DA==
|
||||
|
||||
"@serialport/parser-delimiter@10.5.0":
|
||||
version "10.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-delimiter/-/parser-delimiter-10.5.0.tgz#b0d93100cdfd0619d020a427d652495073f3b828"
|
||||
integrity sha512-/uR/yT3jmrcwnl2FJU/2ySvwgo5+XpksDUR4NF/nwTS5i3CcuKS+FKi/tLzy1k8F+rCx5JzpiK+koqPqOUWArA==
|
||||
|
||||
"@serialport/parser-delimiter@11.0.0":
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-delimiter/-/parser-delimiter-11.0.0.tgz#e830c6bb49723d4446131277dc3243b502d09388"
|
||||
integrity sha512-aZLJhlRTjSmEwllLG7S4J8s8ctRAS0cbvCpO87smLvl3e4BgzbVgF6Z6zaJd3Aji2uSiYgfedCdNc4L6W+1E2g==
|
||||
"@serialport/parser-inter-byte-timeout@10.5.0":
|
||||
version "10.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-10.5.0.tgz#8665ee5e6138f794ac055e83ef2d1c3653a577c0"
|
||||
integrity sha512-WPvVlSx98HmmUF9jjK6y9mMp3Wnv6JQA0cUxLeZBgS74TibOuYG3fuUxUWGJALgAXotOYMxfXSezJ/vSnQrkhQ==
|
||||
|
||||
"@serialport/parser-inter-byte-timeout@11.0.0":
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-11.0.0.tgz#baf7223bf3d49d159c82386928c763bfecf8f70f"
|
||||
integrity sha512-RLgqZC50IET6FtEIt6Oi0vdRsesSBWLNwB7ldzR9OzyXKgK0XHRzqKqbB0u5Q+tC5OScdWeiQ2AO6jooKUZtsw==
|
||||
"@serialport/parser-packet-length@10.5.0":
|
||||
version "10.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-packet-length/-/parser-packet-length-10.5.0.tgz#4c4d733bdff8cc4749f2bd750e42e66f8f478def"
|
||||
integrity sha512-jkpC/8w4/gUBRa2Teyn7URv1D7T//0lGj27/4u9AojpDVXsR6dtdcTG7b7dNirXDlOrSLvvN7aS5/GNaRlEByw==
|
||||
|
||||
"@serialport/parser-packet-length@11.0.0":
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-packet-length/-/parser-packet-length-11.0.0.tgz#ec06934b40b45b8f5eb04ba5527e98a1062c2a20"
|
||||
integrity sha512-6ZkOiaCooabpV/EM7ttSRbisbDWpGEf7Yxyr13t28LicYR43THRdjdMZcRnWxEM/jpwfskkLLXAR6wziVpKrlw==
|
||||
|
||||
"@serialport/parser-readline@10.5.0":
|
||||
"@serialport/parser-readline@10.5.0", "@serialport/parser-readline@^10.2.1":
|
||||
version "10.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-readline/-/parser-readline-10.5.0.tgz#df23365ae7f45679b1735deae26f72ba42802862"
|
||||
integrity sha512-0aXJknodcl94W9zSjvU+sLdXiyEG2rqjQmvBWZCr8wJZjWEtv3RgrnYiWq4i2OTOyC8C/oPK8ZjpBjQptRsoJQ==
|
||||
dependencies:
|
||||
"@serialport/parser-delimiter" "10.5.0"
|
||||
|
||||
"@serialport/parser-readline@11.0.0":
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-readline/-/parser-readline-11.0.0.tgz#c2c8c88e163d2abf7c0ffddbc1845336444e3454"
|
||||
integrity sha512-rRAivhRkT3YO28WjmmG4FQX6L+KMb5/ikhyylRfzWPw0nSXy97+u07peS9CbHqaNvJkMhH1locp2H36aGMOEIA==
|
||||
dependencies:
|
||||
"@serialport/parser-delimiter" "11.0.0"
|
||||
"@serialport/parser-ready@10.5.0":
|
||||
version "10.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-ready/-/parser-ready-10.5.0.tgz#1d9029f57b1abd664cb468e21bfccf7b44c6e8ea"
|
||||
integrity sha512-QIf65LTvUoxqWWHBpgYOL+soldLIIyD1bwuWelukem2yDZVWwEjR288cLQ558BgYxH4U+jLAQahhqoyN1I7BaA==
|
||||
|
||||
"@serialport/parser-ready@11.0.0":
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-ready/-/parser-ready-11.0.0.tgz#802e7189d9e5d13df70d3aa1559403b72fcfa700"
|
||||
integrity sha512-lSsCPIctoc5kADCKnZDYBz1j69TsFqtnaWUicBzUAIAoUXpYKeYld8YX5NrvjViuVfIJeiqLZeGjxOWe5fqQqQ==
|
||||
"@serialport/parser-regex@10.5.0":
|
||||
version "10.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-regex/-/parser-regex-10.5.0.tgz#f98eab6e3d9bc99086269e9acf39a82db36d245f"
|
||||
integrity sha512-9jnr9+PCxRoLjtGs7uxwsFqvho+rxuJlW6ZWSB7oqfzshEZWXtTJgJRgac/RuLft4hRlrmRz5XU40i3uoL4HKw==
|
||||
|
||||
"@serialport/parser-regex@11.0.0":
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-regex/-/parser-regex-11.0.0.tgz#bb247297851b1a789f4dde1c4ad48c39d6db7ed6"
|
||||
integrity sha512-aKuc/+/KE9swahTbYpSuOsQa7LggPx7jhfobJLPVVbAic80OpfCIY+MKr6Ax4R6UtQwF90O5Yk6OEmbbvtEmiA==
|
||||
"@serialport/parser-slip-encoder@10.5.0":
|
||||
version "10.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-slip-encoder/-/parser-slip-encoder-10.5.0.tgz#cb79ac0fda1fc87f049690ff7b498c787da67991"
|
||||
integrity sha512-wP8m+uXQdkWSa//3n+VvfjLthlabwd9NiG6kegf0fYweLWio8j4pJRL7t9eTh2Lbc7zdxuO0r8ducFzO0m8CQw==
|
||||
|
||||
"@serialport/parser-slip-encoder@11.0.0":
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-slip-encoder/-/parser-slip-encoder-11.0.0.tgz#f1c3f56e04c497ca89059c69ea79411b30e8da60"
|
||||
integrity sha512-3ZI/swd2it20vmu2tzqDbkyE4dqy+kExEDY6T33YQ210HDKPVhqj7FAVGo5P++MZ3dup1of11t4P9UPBNkuJnQ==
|
||||
"@serialport/parser-spacepacket@10.5.0":
|
||||
version "10.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-spacepacket/-/parser-spacepacket-10.5.0.tgz#2fc077c0ec16a9532c511ad5f2ab12d588796bc7"
|
||||
integrity sha512-BEZ/HAEMwOd8xfuJSeI/823IR/jtnThovh7ils90rXD4DPL1ZmrP4abAIEktwe42RobZjIPfA4PaVfyO0Fjfhg==
|
||||
|
||||
"@serialport/parser-spacepacket@11.0.0":
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-spacepacket/-/parser-spacepacket-11.0.0.tgz#7737aaa1397db4bf820160dd2f7dd0c9df5f74a0"
|
||||
integrity sha512-+hqRckrTEqz+/uAUZY0Tq6YIRyCl4oQOH1MeVzKiFiGNjZP7hDJCDoY7LTr9CeJhxvcT0ItTbtjGBqGumV8fxg==
|
||||
|
||||
"@serialport/stream@11.0.0":
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/stream/-/stream-11.0.0.tgz#9887db096b51fabe1919a591b920b06f7580e8ee"
|
||||
integrity sha512-Zty7B8C1H2XRnay2mVmW1ygEHXRHXQDcaC5wAVvOZMbQSc7ye03rMlPvviDS+pGxU2t2A2bMo34CUrRduSBong==
|
||||
"@serialport/stream@10.5.0":
|
||||
version "10.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/stream/-/stream-10.5.0.tgz#cda8fb3e8d03094b0962a3d14b73adfcd591be58"
|
||||
integrity sha512-gbcUdvq9Kyv2HsnywS7QjnEB28g+6OGB5Z8TLP7X+UPpoMIWoUsoQIq5Kt0ZTgMoWn3JGM2lqwTsSHF+1qhniA==
|
||||
dependencies:
|
||||
"@serialport/bindings-interface" "1.2.2"
|
||||
debug "4.3.4"
|
||||
debug "^4.3.2"
|
||||
|
||||
"@serialport/stream@^9.0.2":
|
||||
version "9.2.4"
|
||||
@@ -159,10 +147,15 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/node@*", "@types/node@20.3.1":
|
||||
version "20.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe"
|
||||
integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==
|
||||
"@types/node@*":
|
||||
version "18.7.23"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.23.tgz#75c580983846181ebe5f4abc40fe9dfb2d65665f"
|
||||
integrity sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==
|
||||
|
||||
"@types/node@18.11.19":
|
||||
version "18.11.19"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.19.tgz#35e26df9ec441ab99d73e99e9aca82935eea216d"
|
||||
integrity sha512-YUgMWAQBWLObABqrvx8qKO1enAvBUdjZOAWQ5grBAkp5LQv45jBvYKZ3oFS9iKRCQyFjqw6iuEa1vmFqtxYLZw==
|
||||
|
||||
"@types/node@^10.12.18":
|
||||
version "10.17.60"
|
||||
@@ -590,13 +583,13 @@ cliui@^5.0.0:
|
||||
strip-ansi "^5.2.0"
|
||||
wrap-ansi "^5.1.0"
|
||||
|
||||
cliui@^8.0.1:
|
||||
version "8.0.1"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
|
||||
integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
|
||||
cliui@^7.0.2:
|
||||
version "7.0.4"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
|
||||
integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
|
||||
dependencies:
|
||||
string-width "^4.2.0"
|
||||
strip-ansi "^6.0.1"
|
||||
strip-ansi "^6.0.0"
|
||||
wrap-ansi "^7.0.0"
|
||||
|
||||
clone@^1.0.2:
|
||||
@@ -780,13 +773,6 @@ debug@3.1.0:
|
||||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@4.3.4, debug@^4.0.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
debug@^3.1.0:
|
||||
version "3.2.7"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
|
||||
@@ -794,6 +780,13 @@ debug@^3.1.0:
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@^4.0.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
debuglog@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz"
|
||||
@@ -805,9 +798,9 @@ decamelize@^1.1.1, decamelize@^1.2.0:
|
||||
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
|
||||
|
||||
decode-uri-component@^0.2.0:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
|
||||
integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
|
||||
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
|
||||
|
||||
decompress-response@^6.0.0:
|
||||
version "6.0.0"
|
||||
@@ -2264,7 +2257,7 @@ mz@^2.7.0:
|
||||
object-assign "^4.0.1"
|
||||
thenify-all "^1.0.0"
|
||||
|
||||
nan@^2.16.0, nan@^2.17.0, "nan@github:jkleinsc/nan#remove_accessor_signature":
|
||||
nan@^2.13.2, nan@^2.16.0, "nan@github:jkleinsc/nan#remove_accessor_signature":
|
||||
version "2.16.0"
|
||||
resolved "https://codeload.github.com/jkleinsc/nan/tar.gz/6a2f95a6a2209d8aa7542fb18099fd808a802059"
|
||||
|
||||
@@ -2280,10 +2273,10 @@ native-process-working-directory@^1.0.2:
|
||||
dependencies:
|
||||
node-addon-api "^3.1.0"
|
||||
|
||||
ngx-filesize@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/ngx-filesize/-/ngx-filesize-3.0.2.tgz#aab5ce9ce6eaa421f0393447d9c01653f3839a2c"
|
||||
integrity sha512-0h1gzcQYeNcGzDVcQcdhKK8RCrXdIXn4foT/DcXRwoht0KL3FQemJFKZowZmXESL7cnLlETaeRSnsHuqfchoWg==
|
||||
ngx-filesize@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ngx-filesize/-/ngx-filesize-3.0.1.tgz#620933ae181a1128905404e43b26abb99accba90"
|
||||
integrity sha512-792I4fiG9EEPYjGib2+YTYAzfWIlccfy8uXNSXFFepuAntoS+eijLwnl0m7ajcQuNgbTtwEf9VmYIPN8mS3jqQ==
|
||||
dependencies:
|
||||
tslib "^2.3.0"
|
||||
|
||||
@@ -2311,16 +2304,16 @@ node-addon-api@3.1.0, node-addon-api@^3.0.2, node-addon-api@^3.1.0:
|
||||
resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz"
|
||||
integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==
|
||||
|
||||
node-addon-api@6.1.0:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76"
|
||||
integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==
|
||||
|
||||
node-addon-api@^4.0.0, node-addon-api@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
|
||||
integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==
|
||||
|
||||
node-addon-api@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.0.0.tgz#7d7e6f9ef89043befdb20c1989c905ebde18c501"
|
||||
integrity sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==
|
||||
|
||||
node-fetch-npm@^2.0.2:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4"
|
||||
@@ -2330,10 +2323,10 @@ node-fetch-npm@^2.0.2:
|
||||
json-parse-better-errors "^1.0.0"
|
||||
safe-buffer "^5.1.1"
|
||||
|
||||
node-gyp-build@4.6.0:
|
||||
version "4.6.0"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055"
|
||||
integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==
|
||||
node-gyp-build@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3"
|
||||
integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==
|
||||
|
||||
node-gyp@^5.0.2, node-gyp@^5.1.0:
|
||||
version "5.1.1"
|
||||
@@ -3011,9 +3004,9 @@ qrcode-terminal@^0.12.0:
|
||||
integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==
|
||||
|
||||
qs@~6.5.2:
|
||||
version "6.5.3"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad"
|
||||
integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
|
||||
version "6.5.2"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz"
|
||||
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
|
||||
|
||||
query-string@^6.8.2:
|
||||
version "6.13.8"
|
||||
@@ -3299,25 +3292,25 @@ serialport-binding-webserialapi@^1.0.3:
|
||||
"@serialport/binding-abstract" "^9.0.2"
|
||||
"@serialport/stream" "^9.0.2"
|
||||
|
||||
serialport@11.0.0:
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/serialport/-/serialport-11.0.0.tgz#a4114fc60e91b23f133ec459345b7be637b1e8ef"
|
||||
integrity sha512-bxs3XejQcOHWpzPAaXMhxVRlbem6fjNUrux3ToqrGvFR6BcjOYhqE5CsHOuutv37kmhmnuHrn+/hN+1BpTmaFg==
|
||||
serialport@10.5.0:
|
||||
version "10.5.0"
|
||||
resolved "https://registry.yarnpkg.com/serialport/-/serialport-10.5.0.tgz#b85f614def6e8914e5865c798b0555330903a0f8"
|
||||
integrity sha512-7OYLDsu5i6bbv3lU81pGy076xe0JwpK6b49G6RjNvGibstUqQkI+I3/X491yBGtf4gaqUdOgoU1/5KZ/XxL4dw==
|
||||
dependencies:
|
||||
"@serialport/binding-mock" "10.2.2"
|
||||
"@serialport/bindings-cpp" "11.0.1"
|
||||
"@serialport/parser-byte-length" "11.0.0"
|
||||
"@serialport/parser-cctalk" "11.0.0"
|
||||
"@serialport/parser-delimiter" "11.0.0"
|
||||
"@serialport/parser-inter-byte-timeout" "11.0.0"
|
||||
"@serialport/parser-packet-length" "11.0.0"
|
||||
"@serialport/parser-readline" "11.0.0"
|
||||
"@serialport/parser-ready" "11.0.0"
|
||||
"@serialport/parser-regex" "11.0.0"
|
||||
"@serialport/parser-slip-encoder" "11.0.0"
|
||||
"@serialport/parser-spacepacket" "11.0.0"
|
||||
"@serialport/stream" "11.0.0"
|
||||
debug "4.3.4"
|
||||
"@serialport/bindings-cpp" "10.8.0"
|
||||
"@serialport/parser-byte-length" "10.5.0"
|
||||
"@serialport/parser-cctalk" "10.5.0"
|
||||
"@serialport/parser-delimiter" "10.5.0"
|
||||
"@serialport/parser-inter-byte-timeout" "10.5.0"
|
||||
"@serialport/parser-packet-length" "10.5.0"
|
||||
"@serialport/parser-readline" "10.5.0"
|
||||
"@serialport/parser-ready" "10.5.0"
|
||||
"@serialport/parser-regex" "10.5.0"
|
||||
"@serialport/parser-slip-encoder" "10.5.0"
|
||||
"@serialport/parser-spacepacket" "10.5.0"
|
||||
"@serialport/stream" "10.5.0"
|
||||
debug "^4.3.3"
|
||||
|
||||
set-blocking@^2.0.0, set-blocking@~2.0.0:
|
||||
version "2.0.0"
|
||||
@@ -3735,7 +3728,12 @@ tough-cookie@~2.5.0:
|
||||
psl "^1.1.28"
|
||||
punycode "^2.1.1"
|
||||
|
||||
tslib@^2.1.0, tslib@^2.3.0:
|
||||
tslib@^2.1.0:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
|
||||
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
|
||||
|
||||
tslib@^2.3.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
|
||||
integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
|
||||
@@ -3941,12 +3939,12 @@ windows-native-registry@^3.2.1:
|
||||
dependencies:
|
||||
node-addon-api "^3.1.0"
|
||||
|
||||
windows-process-tree@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/windows-process-tree/-/windows-process-tree-0.4.0.tgz#31ac49c5da557e628ce7e37a5800972173d3349a"
|
||||
integrity sha512-9LunDnc1WwuhyLeTAXMFX8wbActGJtDCBaiapQXFYk/nO4W4X9YxOKV5g/lQL3XX69QYxveDbjVVrdnTt1qqCQ==
|
||||
windows-process-tree@^0.3.4:
|
||||
version "0.3.4"
|
||||
resolved "https://registry.yarnpkg.com/windows-process-tree/-/windows-process-tree-0.3.4.tgz#6bc4b8010129c30ff95bcd333b9f94744dd3c4fb"
|
||||
integrity sha512-rtSX73i9OnkDxSdBP9c1YBunEwheZdO/hjRwNk9uSoWqO92x0zDRGfIIK0MtUn8gZZD+2kPEVpj5MmfNl7JpJA==
|
||||
dependencies:
|
||||
nan "^2.17.0"
|
||||
nan "^2.13.2"
|
||||
|
||||
worker-farm@^1.6.0, worker-farm@^1.7.0:
|
||||
version "1.7.0"
|
||||
@@ -4055,10 +4053,10 @@ yargs-parser@^15.0.1:
|
||||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
||||
yargs-parser@^21.1.1:
|
||||
version "21.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
|
||||
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
|
||||
yargs-parser@^21.0.0:
|
||||
version "21.0.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55"
|
||||
integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==
|
||||
|
||||
yargs-parser@^7.0.0:
|
||||
version "7.0.0"
|
||||
@@ -4084,18 +4082,18 @@ yargs@^14.2.3:
|
||||
y18n "^4.0.0"
|
||||
yargs-parser "^15.0.1"
|
||||
|
||||
yargs@^17.7.2:
|
||||
version "17.7.2"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
|
||||
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
|
||||
yargs@^17.3.1:
|
||||
version "17.3.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9"
|
||||
integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==
|
||||
dependencies:
|
||||
cliui "^8.0.1"
|
||||
cliui "^7.0.2"
|
||||
escalade "^3.1.1"
|
||||
get-caller-file "^2.0.5"
|
||||
require-directory "^2.1.1"
|
||||
string-width "^4.2.3"
|
||||
y18n "^5.0.5"
|
||||
yargs-parser "^21.1.1"
|
||||
yargs-parser "^21.0.0"
|
||||
|
||||
yargs@^8.0.2:
|
||||
version "8.0.2"
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const notarizer = require('@electron/notarize')
|
||||
const notarizer = require('electron-notarize')
|
||||
|
||||
module.exports = async function (params) {
|
||||
// notarize the app on Mac OS only.
|
||||
|
452
locale/af-ZA.po
452
locale/af-ZA.po
File diff suppressed because it is too large
Load Diff
223
locale/app.pot
223
locale/app.pot
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
||||
#: tabby-local/src/components/terminalTab.component.ts:111
|
||||
#: tabby-local/src/components/terminalTab.component.ts:112
|
||||
msgid "\"{command}\" is still running. Close?"
|
||||
msgstr ""
|
||||
|
||||
@@ -31,7 +31,7 @@ msgstr ""
|
||||
msgid "Accessibility"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20
|
||||
msgid "Acrylic background"
|
||||
msgstr ""
|
||||
|
||||
@@ -116,7 +116,7 @@ msgstr ""
|
||||
msgid "Ask a question"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13
|
||||
msgid "Ask before closing the browser tab"
|
||||
msgstr ""
|
||||
|
||||
@@ -158,12 +158,12 @@ msgstr ""
|
||||
msgid "Available"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28
|
||||
msgid "Background type"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14
|
||||
#: tabby-serial/src/components/serialTab.component.ts:111
|
||||
#: tabby-serial/src/components/serialTab.component.ts:112
|
||||
#: tabby-serial/src/profiles.ts:86
|
||||
msgid "Baud rate"
|
||||
msgstr ""
|
||||
@@ -180,7 +180,7 @@ msgstr ""
|
||||
msgid "Blue"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:32
|
||||
msgid "Blur"
|
||||
msgstr ""
|
||||
|
||||
@@ -188,8 +188,8 @@ msgstr ""
|
||||
msgid "Bold font weight"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:125
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:73
|
||||
msgid "Bottom"
|
||||
msgstr ""
|
||||
|
||||
@@ -214,12 +214,12 @@ msgstr ""
|
||||
#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7
|
||||
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:32
|
||||
#: tabby-electron/src/services/updater.service.ts:134
|
||||
#: tabby-local/src/components/terminalTab.component.ts:116
|
||||
#: tabby-local/src/components/terminalTab.component.ts:117
|
||||
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117
|
||||
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79
|
||||
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99
|
||||
#: tabby-ssh/src/sftpContextMenu.ts:40
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:484
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:480
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
@@ -294,7 +294,7 @@ msgstr ""
|
||||
msgid "Close tabs to the right"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:175
|
||||
msgid "Close the window after closing the last tab"
|
||||
msgstr ""
|
||||
|
||||
@@ -327,7 +327,7 @@ msgstr ""
|
||||
msgid "Commands"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-core/src/theme.ts:21
|
||||
#: tabby-core/src/theme.ts:20
|
||||
msgid "Compact (legacy)"
|
||||
msgstr ""
|
||||
|
||||
@@ -339,8 +339,8 @@ msgstr ""
|
||||
msgid "Config downloaded"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:109
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:114
|
||||
msgid "Config file"
|
||||
msgstr ""
|
||||
|
||||
@@ -361,7 +361,7 @@ msgstr ""
|
||||
msgid "Connect through a proxy server"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-core/src/index.ts:214
|
||||
#: tabby-core/src/index.ts:212
|
||||
#: tabby-core/src/services/profiles.service.ts:178
|
||||
msgid "Connect to \"%s\"..."
|
||||
msgstr ""
|
||||
@@ -371,7 +371,7 @@ msgid "Connect to a different host first and use it as a proxy"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19
|
||||
#: tabby-serial/src/components/serialTab.component.ts:65
|
||||
#: tabby-serial/src/components/serialTab.component.ts:66
|
||||
#: tabby-ssh/src/components/sshTab.component.ts:143
|
||||
#: tabby-telnet/src/components/telnetTab.component.ts:72
|
||||
msgid "Connecting"
|
||||
@@ -393,14 +393,10 @@ msgstr ""
|
||||
msgid "Context menu"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14
|
||||
msgid "Controls the amount of space between elements"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:229
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:237
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:553
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:775
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:225
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:233
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:549
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:770
|
||||
#: tabby-terminal/src/tabContextMenu.ts:30
|
||||
msgid "Copied"
|
||||
msgstr ""
|
||||
@@ -443,7 +439,7 @@ msgstr ""
|
||||
msgid "Create directory"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:83
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
@@ -495,7 +491,7 @@ msgstr ""
|
||||
msgid "Default profile settings"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:118
|
||||
msgid "Defaults"
|
||||
msgstr ""
|
||||
|
||||
@@ -576,11 +572,11 @@ msgstr ""
|
||||
msgid "Disable dynamic tab title"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211
|
||||
msgid "Disable fluent background while dragging"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197
|
||||
msgid "Disable GPU acceleration"
|
||||
msgstr ""
|
||||
|
||||
@@ -603,7 +599,7 @@ msgstr ""
|
||||
msgid "Display images via Sixel escape sequences"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78
|
||||
msgid "Display on"
|
||||
msgstr ""
|
||||
|
||||
@@ -621,23 +617,23 @@ msgstr ""
|
||||
msgid "Do not remember"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90
|
||||
msgid "Dock always on top"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:60
|
||||
msgid "Dock the terminal"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97
|
||||
msgid "Docked terminal size"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104
|
||||
msgid "Docked terminal space"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57
|
||||
msgid "Docking"
|
||||
msgstr ""
|
||||
|
||||
@@ -661,7 +657,7 @@ msgstr ""
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/tabContextMenu.ts:122
|
||||
#: tabby-local/src/tabContextMenu.ts:123
|
||||
msgid "Duplicate as administrator"
|
||||
msgstr ""
|
||||
|
||||
@@ -695,7 +691,7 @@ msgstr ""
|
||||
msgid "Enable automatic installation of updates when they become available."
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204
|
||||
msgid "Enable fluent background option"
|
||||
msgstr ""
|
||||
|
||||
@@ -744,7 +740,7 @@ msgstr ""
|
||||
msgid "Example:"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205
|
||||
msgid "Experimental Windows 10 background style known to cause issues"
|
||||
msgstr ""
|
||||
|
||||
@@ -768,11 +764,11 @@ msgstr ""
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:140
|
||||
msgid "Fixed"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212
|
||||
msgid "Fluent background sometimes causes drag lag"
|
||||
msgstr ""
|
||||
|
||||
@@ -792,7 +788,7 @@ msgstr ""
|
||||
msgid "Focus all tabs at once (broadcast)"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189
|
||||
msgid "Focus follows mouse"
|
||||
msgstr ""
|
||||
|
||||
@@ -832,7 +828,7 @@ msgstr ""
|
||||
msgid "Focus the pane on the right"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-core/src/theme.ts:43
|
||||
#: tabby-core/src/theme.ts:42
|
||||
msgid "Follow the color scheme"
|
||||
msgstr ""
|
||||
|
||||
@@ -840,7 +836,7 @@ msgstr ""
|
||||
msgid "Font"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:183
|
||||
msgid "For keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
@@ -884,7 +880,7 @@ msgstr ""
|
||||
msgid "Frontend"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:54
|
||||
msgid "Full"
|
||||
msgstr ""
|
||||
|
||||
@@ -906,7 +902,7 @@ msgstr ""
|
||||
msgid "Get it from the Tabby Web settings window"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:22
|
||||
msgid "Gives the window a blurred transparent background"
|
||||
msgstr ""
|
||||
|
||||
@@ -922,7 +918,7 @@ msgstr ""
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:194
|
||||
msgid "Hacks"
|
||||
msgstr ""
|
||||
|
||||
@@ -939,23 +935,23 @@ msgstr ""
|
||||
msgid "Hexadecimal"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:169
|
||||
msgid "Hide tab close button"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:151
|
||||
msgid "Hide tab index"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:163
|
||||
msgid "Hide tab options button"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111
|
||||
msgid "Hide window on focus loss"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112
|
||||
msgid "Hides the docked terminal when you click away."
|
||||
msgstr ""
|
||||
|
||||
@@ -1001,7 +997,7 @@ msgstr ""
|
||||
msgid "Icon"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:138
|
||||
msgid "id.tab-width.dynamic"
|
||||
msgstr ""
|
||||
|
||||
@@ -1049,7 +1045,7 @@ msgstr ""
|
||||
msgid "Interactive"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124
|
||||
msgid "Invalid syntax"
|
||||
msgstr ""
|
||||
|
||||
@@ -1079,7 +1075,7 @@ msgstr ""
|
||||
msgid "Keep Alive Interval (Milliseconds)"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:91
|
||||
msgid "Keep docked terminal always on top"
|
||||
msgstr ""
|
||||
|
||||
@@ -1099,7 +1095,7 @@ msgstr ""
|
||||
msgid "Keyboard-interactive auth"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/components/terminalTab.component.ts:115
|
||||
#: tabby-local/src/components/terminalTab.component.ts:116
|
||||
msgid "Kill"
|
||||
msgstr ""
|
||||
|
||||
@@ -1125,8 +1121,8 @@ msgstr ""
|
||||
msgid "Learn how to allow Tabby to detect remote shell's working directory."
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:127
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:69
|
||||
#: tabby-core/src/tabContextMenu.ts:80
|
||||
msgid "Left"
|
||||
msgstr ""
|
||||
@@ -1190,7 +1186,6 @@ msgstr ""
|
||||
msgid "Maximize the active pane"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93
|
||||
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70
|
||||
msgid "Minimum contrast ratio"
|
||||
msgstr ""
|
||||
@@ -1215,7 +1210,7 @@ msgstr ""
|
||||
msgid "Move to \"Ungrouped\""
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190
|
||||
msgid "Moving the mouse over an inactive pane will cause it to activate"
|
||||
msgstr ""
|
||||
|
||||
@@ -1232,11 +1227,11 @@ msgstr ""
|
||||
msgid "Name for the new directory"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:50
|
||||
msgid "Native"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/tabContextMenu.ts:103
|
||||
#: tabby-local/src/tabContextMenu.ts:104
|
||||
msgid "New admin tab"
|
||||
msgstr ""
|
||||
|
||||
@@ -1257,7 +1252,7 @@ msgstr ""
|
||||
msgid "New profile"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/tabContextMenu.ts:30
|
||||
#: tabby-local/src/tabContextMenu.ts:31
|
||||
msgid "New profile name"
|
||||
msgstr ""
|
||||
|
||||
@@ -1270,7 +1265,7 @@ msgid "New tab: {profile}"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/buttonProvider.ts:20
|
||||
#: tabby-local/src/tabContextMenu.ts:77
|
||||
#: tabby-local/src/tabContextMenu.ts:78
|
||||
msgid "New terminal"
|
||||
msgstr ""
|
||||
|
||||
@@ -1278,11 +1273,11 @@ msgstr ""
|
||||
msgid "New window"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-electron/src/services/dockMenu.service.ts:62
|
||||
#: tabby-local/src/services/dockMenu.service.ts:62
|
||||
msgid "New Window"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/tabContextMenu.ts:87
|
||||
#: tabby-local/src/tabContextMenu.ts:88
|
||||
msgid "New with profile"
|
||||
msgstr ""
|
||||
|
||||
@@ -1328,7 +1323,7 @@ msgstr ""
|
||||
msgid "Number of lines kept in the buffer"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:65
|
||||
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137
|
||||
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60
|
||||
msgid "Off"
|
||||
@@ -1342,7 +1337,7 @@ msgstr ""
|
||||
msgid "On GitHub Discussions"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39
|
||||
msgid "Opacity"
|
||||
msgstr ""
|
||||
|
||||
@@ -1375,11 +1370,11 @@ msgstr ""
|
||||
msgid "Orange"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-electron/src/shells/macDefault.ts:25
|
||||
#: tabby-local/src/shells/macDefault.ts:25
|
||||
msgid "OS default"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-electron/src/shells/winDefault.ts:43
|
||||
#: tabby-local/src/shells/winDefault.ts:43
|
||||
msgid "OS default ({name})"
|
||||
msgstr ""
|
||||
|
||||
@@ -1419,18 +1414,14 @@ msgstr ""
|
||||
msgid "Overwrite the local config and start syncing?"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182
|
||||
msgid "Pane resize step"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:179
|
||||
msgid "Panes"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-core/src/theme.ts:35
|
||||
msgid "Paper (legacy)"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38
|
||||
msgid "Parity"
|
||||
msgstr ""
|
||||
@@ -1449,7 +1440,7 @@ msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:483
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:479
|
||||
#: tabby-terminal/src/tabContextMenu.ts:35
|
||||
msgid "Paste"
|
||||
msgstr ""
|
||||
@@ -1462,7 +1453,7 @@ msgstr ""
|
||||
msgid "Paste if no selection, else copy"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:490
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:486
|
||||
msgid "Paste multiple lines?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1491,7 +1482,7 @@ msgstr ""
|
||||
msgid "Port"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-serial/src/components/serialTab.component.ts:70
|
||||
#: tabby-serial/src/components/serialTab.component.ts:71
|
||||
msgid "Port opened"
|
||||
msgstr ""
|
||||
|
||||
@@ -1500,7 +1491,7 @@ msgstr ""
|
||||
msgid "Ports"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-serial/src/components/serialTab.component.ts:85
|
||||
#: tabby-serial/src/components/serialTab.component.ts:86
|
||||
#: tabby-ssh/src/components/sshTab.component.ts:172
|
||||
#: tabby-telnet/src/components/telnetTab.component.ts:53
|
||||
msgid "Press any key to reconnect"
|
||||
@@ -1510,7 +1501,7 @@ msgstr ""
|
||||
msgid "Press the key now"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14
|
||||
msgid "Prevents accidental closing"
|
||||
msgstr ""
|
||||
|
||||
@@ -1536,7 +1527,7 @@ msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2
|
||||
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4
|
||||
#: tabby-electron/src/services/dockMenu.service.ts:40
|
||||
#: tabby-local/src/services/dockMenu.service.ts:40
|
||||
msgid "Profiles"
|
||||
msgstr ""
|
||||
|
||||
@@ -1561,7 +1552,7 @@ msgstr ""
|
||||
msgid "Puts all of Tabby's configuration into the vault"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-core/src/index.ts:213
|
||||
#: tabby-core/src/index.ts:211
|
||||
#: tabby-core/src/services/profiles.service.ts:177
|
||||
msgid "Quick connect"
|
||||
msgstr ""
|
||||
@@ -1581,7 +1572,7 @@ msgstr ""
|
||||
|
||||
#: tabby-core/src/services/profiles.service.ts:120
|
||||
#: tabby-core/src/services/profiles.service.ts:134
|
||||
#: tabby-electron/src/services/dockMenu.service.ts:28
|
||||
#: tabby-local/src/services/dockMenu.service.ts:28
|
||||
msgid "Recent"
|
||||
msgstr ""
|
||||
|
||||
@@ -1668,7 +1659,7 @@ msgstr ""
|
||||
msgid "Restart tab"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:134
|
||||
msgid "Restart the app to apply changes"
|
||||
msgstr ""
|
||||
|
||||
@@ -1680,8 +1671,8 @@ msgstr ""
|
||||
msgid "Reuse session for multiple tabs"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:129
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:71
|
||||
#: tabby-core/src/tabContextMenu.ts:78
|
||||
msgid "Right"
|
||||
msgstr ""
|
||||
@@ -1704,11 +1695,11 @@ msgstr ""
|
||||
msgid "Save a password in the keychain"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:123
|
||||
msgid "Save and apply"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/tabContextMenu.ts:27
|
||||
#: tabby-local/src/tabContextMenu.ts:28
|
||||
msgid "Save as profile"
|
||||
msgstr ""
|
||||
|
||||
@@ -1716,7 +1707,7 @@ msgstr ""
|
||||
msgid "Save layout as profile"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/tabContextMenu.ts:48
|
||||
#: tabby-local/src/tabContextMenu.ts:49
|
||||
msgid "Saved"
|
||||
msgstr ""
|
||||
|
||||
@@ -1790,7 +1781,7 @@ msgstr ""
|
||||
msgid "Select file storage"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-core/src/index.ts:225
|
||||
#: tabby-core/src/index.ts:223
|
||||
msgid "Select profile"
|
||||
msgstr ""
|
||||
|
||||
@@ -1854,7 +1845,7 @@ msgstr ""
|
||||
msgid "Shell"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:555
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:551
|
||||
msgid "Shell does not support current path detection"
|
||||
msgstr ""
|
||||
|
||||
@@ -1878,11 +1869,11 @@ msgstr ""
|
||||
msgid "Show command selector"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:126
|
||||
msgid "Show config file"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:125
|
||||
msgid "Show defaults"
|
||||
msgstr ""
|
||||
|
||||
@@ -1894,7 +1885,7 @@ msgstr ""
|
||||
msgid "Show pane labels (for rearranging)"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:157
|
||||
msgid "Show profile icon on tab"
|
||||
msgstr ""
|
||||
|
||||
@@ -1914,7 +1905,7 @@ msgstr ""
|
||||
msgid "Show Serial connections"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145
|
||||
msgid "Show tabs in fullscreen mode"
|
||||
msgstr ""
|
||||
|
||||
@@ -1938,8 +1929,8 @@ msgstr ""
|
||||
msgid "Slow feed"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:79
|
||||
msgid "Snaps the window to a side of the screen"
|
||||
msgstr ""
|
||||
|
||||
@@ -1965,10 +1956,6 @@ msgstr ""
|
||||
msgid "Source code"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13
|
||||
msgid "Spaciness"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-core/src/tabContextMenu.ts:75
|
||||
msgid "Split"
|
||||
msgstr ""
|
||||
@@ -2011,7 +1998,7 @@ msgstr ""
|
||||
msgid "SSH password for {user}@{host}:{port}"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-core/src/theme.ts:9
|
||||
#: tabby-core/src/theme.ts:8
|
||||
msgid "Standard (legacy)"
|
||||
msgstr ""
|
||||
|
||||
@@ -2106,15 +2093,15 @@ msgstr ""
|
||||
msgid "Tabby news and updates on Twitter"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:116
|
||||
msgid "Tabs"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119
|
||||
msgid "Tabs location"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134
|
||||
msgid "Tabs width"
|
||||
msgstr ""
|
||||
|
||||
@@ -2122,7 +2109,7 @@ msgstr ""
|
||||
msgid "Telnet session"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:204
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:200
|
||||
#: tabby-terminal/src/settings.ts:43
|
||||
msgid "Terminal"
|
||||
msgstr ""
|
||||
@@ -2159,11 +2146,11 @@ msgstr ""
|
||||
msgid "These apply to all profiles of a given type"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52
|
||||
msgid "Thin"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:198
|
||||
msgid "Tick this if you're experiencing aliasing, ghosting or other visual issues"
|
||||
msgstr ""
|
||||
|
||||
@@ -2183,8 +2170,8 @@ msgstr ""
|
||||
msgid "Toggles the Tabby window visibility"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67
|
||||
msgid "Top"
|
||||
msgstr ""
|
||||
|
||||
@@ -2254,8 +2241,8 @@ msgstr ""
|
||||
msgid "Use ConPTY"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-electron/src/shells/linuxDefault.ts:31
|
||||
#: tabby-electron/src/shells/linuxDefault.ts:38
|
||||
#: tabby-local/src/shells/linuxDefault.ts:31
|
||||
#: tabby-local/src/shells/linuxDefault.ts:38
|
||||
msgid "User default"
|
||||
msgstr ""
|
||||
|
||||
@@ -2308,7 +2295,7 @@ msgstr ""
|
||||
msgid "Version: {version}"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21
|
||||
msgid "Vibrancy"
|
||||
msgstr ""
|
||||
|
||||
@@ -2348,28 +2335,24 @@ msgstr ""
|
||||
msgid "When WinSCP is detected, you can launch an SCP session from the context menu."
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46
|
||||
msgid "Whether a custom window or an OS native window should be used"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:141
|
||||
msgid "Will prevent the SSH greeting from showing up"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2
|
||||
#: tabby-settings/src/settings.ts:30
|
||||
msgid "Window"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105
|
||||
msgid "Window dimension along the edge"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98
|
||||
msgid "Window dimension away from the edge"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:45
|
||||
msgid "Window frame"
|
||||
msgstr ""
|
||||
|
||||
|
448
locale/bg-BG.po
448
locale/bg-BG.po
File diff suppressed because it is too large
Load Diff
448
locale/da-DK.po
448
locale/da-DK.po
File diff suppressed because it is too large
Load Diff
448
locale/de-DE.po
448
locale/de-DE.po
File diff suppressed because it is too large
Load Diff
444
locale/en-GB.po
444
locale/en-GB.po
File diff suppressed because it is too large
Load Diff
448
locale/es-ES.po
448
locale/es-ES.po
File diff suppressed because it is too large
Load Diff
472
locale/fr-FR.po
472
locale/fr-FR.po
File diff suppressed because it is too large
Load Diff
448
locale/hr-HR.po
448
locale/hr-HR.po
File diff suppressed because it is too large
Load Diff
448
locale/id-ID.po
448
locale/id-ID.po
File diff suppressed because it is too large
Load Diff
448
locale/it-IT.po
448
locale/it-IT.po
File diff suppressed because it is too large
Load Diff
482
locale/ja-JP.po
482
locale/ja-JP.po
File diff suppressed because it is too large
Load Diff
464
locale/ko-KR.po
464
locale/ko-KR.po
File diff suppressed because it is too large
Load Diff
448
locale/pl-PL.po
448
locale/pl-PL.po
File diff suppressed because it is too large
Load Diff
482
locale/pt-BR.po
482
locale/pt-BR.po
File diff suppressed because it is too large
Load Diff
448
locale/pt-PT.po
448
locale/pt-PT.po
File diff suppressed because it is too large
Load Diff
462
locale/ru-RU.po
462
locale/ru-RU.po
File diff suppressed because it is too large
Load Diff
448
locale/sv-SE.po
448
locale/sv-SE.po
File diff suppressed because it is too large
Load Diff
448
locale/uk-UA.po
448
locale/uk-UA.po
File diff suppressed because it is too large
Load Diff
452
locale/zh-CN.po
452
locale/zh-CN.po
File diff suppressed because it is too large
Load Diff
508
locale/zh-TW.po
508
locale/zh-TW.po
File diff suppressed because it is too large
Load Diff
54
package.json
54
package.json
@@ -1,22 +1,20 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"@angular/animations": "^15.2.6",
|
||||
"@angular/cdk": "^15.2.6",
|
||||
"@angular/common": "^15.2.6",
|
||||
"@angular/compiler": "^15.2.6",
|
||||
"@angular/compiler-cli": "^15.2.6",
|
||||
"@angular/core": "^15.2.6",
|
||||
"@angular/forms": "^15.2.6",
|
||||
"@angular/localize": "^15.2.9",
|
||||
"@angular/platform-browser": "^15.2.6",
|
||||
"@angular/platform-browser-dynamic": "^15.2.6",
|
||||
"@angular/animations": "^15.1.3",
|
||||
"@angular/cdk": "^15.1.3",
|
||||
"@angular/common": "^15.1.3",
|
||||
"@angular/compiler": "^15.1.3",
|
||||
"@angular/compiler-cli": "^15.1.3",
|
||||
"@angular/core": "^15.1.3",
|
||||
"@angular/forms": "^15.1.3",
|
||||
"@angular/platform-browser": "^15.1.3",
|
||||
"@angular/platform-browser-dynamic": "^15.1.3",
|
||||
"@biesbjerg/ngx-translate-extract-marker": "^1.0.0",
|
||||
"@electron/notarize": "^1.2.3",
|
||||
"@fortawesome/fontawesome-free": "^6.4.0",
|
||||
"@ng-bootstrap/ng-bootstrap": "^14.1.0",
|
||||
"@ngtools/webpack": "^15.2.5",
|
||||
"@fortawesome/fontawesome-free": "^6.2.0",
|
||||
"@ng-bootstrap/ng-bootstrap": "^14.0.1",
|
||||
"@ngtools/webpack": "^15.1.4",
|
||||
"@popperjs/core": "^2.11.6",
|
||||
"@sentry/cli": "^2.18.1",
|
||||
"@sentry/cli": "^1.74.3",
|
||||
"@sentry/electron": "^2.5.4",
|
||||
"@tabby-gang/to-string-loader": "^1.1.7-beta.2",
|
||||
"@types/deep-equal": "1.0.1",
|
||||
@@ -24,17 +22,17 @@
|
||||
"@types/electron-debug": "^2.1.0",
|
||||
"@types/fs-extra": "^9.0.13",
|
||||
"@types/js-yaml": "^4.0.5",
|
||||
"@types/node": "20.3.1",
|
||||
"@types/node": "16.0.1",
|
||||
"@types/webpack-env": "^1.18.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.45.0",
|
||||
"@typescript-eslint/parser": "^5.54.1",
|
||||
"@typescript-eslint/parser": "^5.45.0",
|
||||
"apply-loader": "2.0.0",
|
||||
"axios": "^1.4.0",
|
||||
"axios": "^0.27.2",
|
||||
"babel-loader": "^9.1.2",
|
||||
"browserify-sign": "^4.2.1",
|
||||
"clone-deep": "^4.0.1",
|
||||
"compare-versions": "^5",
|
||||
"core-js": "^3.31.0",
|
||||
"core-js": "^3.21.1",
|
||||
"core-js-pure": "^3.21.1",
|
||||
"cross-env": "7.0.3",
|
||||
"css-loader": "^6.7.3",
|
||||
@@ -43,10 +41,11 @@
|
||||
"electron-builder": "^24.0.0-alpha.1",
|
||||
"electron-download": "^4.1.1",
|
||||
"electron-installer-snap": "^5.1.0",
|
||||
"electron-notarize": "^1.2.2",
|
||||
"electron-rebuild": "^3.2.9",
|
||||
"eslint": "^8.38.0",
|
||||
"eslint": "^8.29.0",
|
||||
"eslint-import-resolver-typescript": "^3.5.2",
|
||||
"eslint-plugin-import": "^2.27.5",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"file-loader": "^6.2.0",
|
||||
"gettext-extractor": "^3.5.4",
|
||||
"graceful-fs": "^4.2.10",
|
||||
@@ -55,7 +54,7 @@
|
||||
"lru-cache": "^6.0.0",
|
||||
"macos-release": "^3.1.0",
|
||||
"ngx-toastr": "^16.0.2",
|
||||
"node-abi": "^3.45.0",
|
||||
"node-abi": "^3.33.0",
|
||||
"npmlog": "6.0.2",
|
||||
"npx": "^10.2.2",
|
||||
"patch-package": "^6.4.7",
|
||||
@@ -68,7 +67,7 @@
|
||||
"pug-static-loader": "2.0.0",
|
||||
"raw-loader": "4.0.2",
|
||||
"rxjs": "^7.5.7",
|
||||
"sass": "^1.63.4",
|
||||
"sass": "^1.58.0",
|
||||
"sass-loader": "^13.2.0",
|
||||
"shell-quote": "^1.7.4",
|
||||
"shelljs": "0.8.5",
|
||||
@@ -85,20 +84,19 @@
|
||||
"tslib": "^2.5.0",
|
||||
"typedoc": "^0.22.18",
|
||||
"typescript": "^4.9.5",
|
||||
"utils-decorators": "^2.0.6",
|
||||
"utils-decorators": "^1.10.4",
|
||||
"val-loader": "5.0.1",
|
||||
"webpack": "^5.86.0",
|
||||
"webpack": "^5.75.0",
|
||||
"webpack-bundle-analyzer": "^4.7.0",
|
||||
"webpack-cli": "^5.0.1",
|
||||
"yaml-loader": "0.8.0",
|
||||
"zone.js": "^0.13.0"
|
||||
"zone.js": "^0.11.5"
|
||||
},
|
||||
"resolutions": {
|
||||
"*/pug": "^3",
|
||||
"lzma-native": "^8.0.0",
|
||||
"*/node-abi": "^3.33.0",
|
||||
"**/graceful-fs": "^4.2.4",
|
||||
"nan": "2.17.0"
|
||||
"**/graceful-fs": "^4.2.4"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "npm run build:typings && node scripts/build-modules.mjs",
|
||||
|
@@ -25,8 +25,8 @@ export const builtinPlugins = [
|
||||
'tabby-ssh',
|
||||
'tabby-serial',
|
||||
'tabby-telnet',
|
||||
'tabby-local',
|
||||
'tabby-electron',
|
||||
'tabby-local',
|
||||
'tabby-plugin-manager',
|
||||
'tabby-linkifier',
|
||||
]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tabby-community-color-schemes",
|
||||
"version": "1.0.197-nightly.1",
|
||||
"version": "1.0.189-nightly.2",
|
||||
"description": "Community color schemes for Tabby",
|
||||
"keywords": [
|
||||
"tabby-builtin-plugin"
|
||||
@@ -17,7 +17,7 @@
|
||||
"author": "Eugene Pankov",
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"@angular/core": "^15",
|
||||
"@angular/core": "^9.1.9",
|
||||
"tabby-core": "*",
|
||||
"tabby-terminal": "*"
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tabby-core",
|
||||
"version": "1.0.197-nightly.1",
|
||||
"version": "1.0.189-nightly.0",
|
||||
"description": "Tabby core",
|
||||
"keywords": [
|
||||
"tabby-builtin-plugin"
|
||||
@@ -12,7 +12,6 @@
|
||||
"watch": "webpack --progress --color --watch"
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
"typings"
|
||||
],
|
||||
"author": "Eugene Pankov",
|
||||
@@ -26,16 +25,16 @@
|
||||
"messageformat": "^2.3.0",
|
||||
"mixpanel": "^0.17.0",
|
||||
"ngx-translate-messageformat-compiler": "^4.11.0",
|
||||
"readable-stream": "4.4.0",
|
||||
"readable-stream": "4.2.0",
|
||||
"uuid": "^9.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/animations": "^15",
|
||||
"@angular/common": "^15",
|
||||
"@angular/core": "^15",
|
||||
"@angular/forms": "^15",
|
||||
"@angular/platform-browser": "^15",
|
||||
"@angular/platform-browser-dynamic": "^15",
|
||||
"rxjs": "^7"
|
||||
"@angular/animations": "^9.1.9",
|
||||
"@angular/common": "^9.1.11",
|
||||
"@angular/core": "^9.1.9",
|
||||
"@angular/forms": "^9.1.11",
|
||||
"@angular/platform-browser": "^9.1.11",
|
||||
"@angular/platform-browser-dynamic": "^9.1.11",
|
||||
"rxjs": "^6.6.3"
|
||||
}
|
||||
}
|
||||
|
@@ -176,7 +176,6 @@ 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
|
||||
}
|
||||
|
||||
|
@@ -14,7 +14,6 @@ export interface Profile {
|
||||
icon?: string
|
||||
color?: string
|
||||
disableDynamicTitle: boolean
|
||||
behaviorOnSessionEnd: 'auto'|'keep'|'reconnect'|'close'
|
||||
|
||||
weight: number
|
||||
isBuiltin: boolean
|
||||
|
@@ -27,7 +27,7 @@ export class CoreCommandProvider extends CommandProvider {
|
||||
async provide (): Promise<Command[]> {
|
||||
return [
|
||||
{
|
||||
id: 'core:profile-selector',
|
||||
id: 'profile-selector',
|
||||
locations: [CommandLocation.LeftToolbar, CommandLocation.StartPage],
|
||||
label: this.translate.instant('Profiles & connections'),
|
||||
icon: this.hostApp.platform === Platform.Web
|
||||
@@ -35,8 +35,7 @@ export class CoreCommandProvider extends CommandProvider {
|
||||
: require('./icons/profiles.svg'),
|
||||
run: async () => this.activate(),
|
||||
},
|
||||
...this.profilesService.getRecentProfiles().map((profile, index) => ({
|
||||
id: `core:recent-profile-${index}`,
|
||||
...this.profilesService.getRecentProfiles().map(profile => ({
|
||||
label: profile.name,
|
||||
locations: [CommandLocation.StartPage],
|
||||
icon: require('./icons/history.svg'),
|
||||
|
@@ -37,12 +37,14 @@ title-bar(
|
||||
|
||||
.btn-group.background
|
||||
.d-flex(
|
||||
*ngFor='let button of leftToolbarButtons'
|
||||
*ngFor='let button of leftToolbarButtons',
|
||||
ngbDropdown
|
||||
)
|
||||
button.btn.btn-secondary.btn-tab-bar(
|
||||
[title]='button.label',
|
||||
(click)='button.run && button.run()',
|
||||
[fastHtmlBind]='button.icon'
|
||||
[fastHtmlBind]='button.icon',
|
||||
ngbDropdownToggle,
|
||||
)
|
||||
|
||||
.d-flex(
|
||||
@@ -51,7 +53,7 @@ title-bar(
|
||||
#activeTransfersDropdown='ngbDropdown'
|
||||
)
|
||||
button.btn.btn-secondary.btn-tab-bar(
|
||||
[hidden]='activeTransfers.length == 0',
|
||||
*ngIf='activeTransfers.length > 0',
|
||||
title='File transfers',
|
||||
ngbDropdownToggle
|
||||
) !{require('../icons/transfers.svg')}
|
||||
@@ -65,12 +67,14 @@ title-bar(
|
||||
|
||||
.btn-group.background
|
||||
.d-flex(
|
||||
*ngFor='let button of rightToolbarButtons'
|
||||
*ngFor='let button of rightToolbarButtons',
|
||||
ngbDropdown
|
||||
)
|
||||
button.btn.btn-secondary.btn-tab-bar(
|
||||
[title]='button.label',
|
||||
[title]='button.title',
|
||||
(click)='button.run && button.run()',
|
||||
[fastHtmlBind]='button.icon'
|
||||
[fastHtmlBind]='button.icon',
|
||||
ngbDropdownToggle,
|
||||
)
|
||||
|
||||
button.btn.btn-secondary.btn-tab-bar.btn-update(
|
||||
|
@@ -10,12 +10,11 @@
|
||||
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;
|
||||
@@ -47,19 +46,19 @@ $tab-border-radius: 4px;
|
||||
|
||||
.content.tabs-on-side > .tab-bar {
|
||||
height: 100%;
|
||||
width: var(--side-tab-width);
|
||||
width: $side-tab-width;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
flex-direction: column;
|
||||
background: rgba(0, 0, 0, 0.25);
|
||||
|
||||
.tabs {
|
||||
width: var(--side-tab-width);
|
||||
width: $side-tab-width;
|
||||
flex: none;
|
||||
flex-direction: column;
|
||||
|
||||
tab-header {
|
||||
flex: 0 0 var(--tabs-height);
|
||||
flex: 0 0 $tabs-height;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,22 +69,18 @@ $tab-border-radius: 4px;
|
||||
&>.inset {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
::ng-deep tab-header {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.tab-bar {
|
||||
flex: none;
|
||||
height: var(--tabs-height);
|
||||
height: $tabs-height;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
|
||||
.btn-tab-bar {
|
||||
line-height: calc(var(--tabs-height) + 2px);
|
||||
height: var(--tabs-height);
|
||||
line-height: $tabs-height + 2px;
|
||||
height: $tabs-height;
|
||||
cursor: pointer;
|
||||
|
||||
display: flex;
|
||||
@@ -118,20 +113,17 @@ $tab-border-radius: 4px;
|
||||
&>.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: calc(70px + 15px * var(--spaciness));
|
||||
height: var(--tabs-height);
|
||||
width: 85px;
|
||||
height: $tabs-height;
|
||||
flex: none;
|
||||
-webkit-app-region: drag;
|
||||
}
|
||||
@@ -178,12 +170,18 @@ hotkey-hint {
|
||||
|
||||
::ng-deep .btn-tab-bar svg,
|
||||
::ng-deep .btn-tab-bar + .dropdown-menu svg {
|
||||
width: calc(22px * var(--spaciness));
|
||||
height: calc(16px * var(--spaciness));
|
||||
width: 22px;
|
||||
height: 16px;
|
||||
fill: white;
|
||||
fill-opacity: 0.75;
|
||||
}
|
||||
|
||||
.icon-wrapper {
|
||||
display: flex;
|
||||
width: 16px;
|
||||
height: 17px;
|
||||
}
|
||||
|
||||
::ng-deep .btn-update svg {
|
||||
fill: cyan;
|
||||
}
|
||||
|
@@ -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,
|
||||
|
@@ -192,14 +192,6 @@ 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
|
||||
*/
|
||||
|
@@ -5,7 +5,7 @@ import { BaseComponent } from './base.component'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'profile-icon',
|
||||
templateUrl: './profileIcon.component.pug',
|
||||
templateUrl:'./profileIcon.component.pug',
|
||||
styleUrls: ['./profileIcon.component.scss'],
|
||||
})
|
||||
export class ProfileIconComponent extends BaseComponent {
|
||||
|
@@ -3,7 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
|
||||
|
||||
/** @hidden */
|
||||
@Component({
|
||||
templateUrl: './promptModal.component.pug',
|
||||
templateUrl:'./promptModal.component.pug',
|
||||
})
|
||||
export class PromptModalComponent {
|
||||
@Input() value: string
|
||||
|
@@ -5,7 +5,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'rename-tab-modal',
|
||||
templateUrl: './renameTabModal.component.pug',
|
||||
templateUrl:'./renameTabModal.component.pug',
|
||||
})
|
||||
export class RenameTabModalComponent {
|
||||
@Input() value: string
|
||||
|
@@ -3,7 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
|
||||
|
||||
/** @hidden */
|
||||
@Component({
|
||||
templateUrl: './safeModeModal.component.pug',
|
||||
templateUrl:'./safeModeModal.component.pug',
|
||||
})
|
||||
export class SafeModeModalComponent {
|
||||
@Input() error: Error
|
||||
|
@@ -26,9 +26,9 @@
|
||||
*ngIf='option.description !== getOptionText(option)'
|
||||
) {{option.description}}
|
||||
.ms-auto
|
||||
.no-wrap.badge.text-bg-secondary.ms-2(*ngIf='selectedIndex == i && canEditSelected()')
|
||||
span BACKSPACE
|
||||
.no-wrap.badge.text-bg-secondary.text-muted.ms-2(*ngIf='selectedIndex == i && canEditSelected()')
|
||||
span Backspace
|
||||
i.fas.fa-pencil.ms-1
|
||||
.no-wrap.badge.text-bg-secondary.ms-2(*ngIf='selectedIndex == i')
|
||||
span ENTER
|
||||
.no-wrap.badge.text-bg-secondary.text-muted.ms-2(*ngIf='selectedIndex == i')
|
||||
span Enter
|
||||
i.fas.fa-arrow-right.ms-1
|
||||
|
@@ -7,7 +7,7 @@ import { SelectorOption } from '../api/selector'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'selector-modal',
|
||||
templateUrl: './selectorModal.component.pug',
|
||||
templateUrl:'./selectorModal.component.pug',
|
||||
styleUrls: ['./selectorModal.component.scss'],
|
||||
})
|
||||
export class SelectorModalComponent<T> {
|
||||
|
@@ -24,7 +24,3 @@
|
||||
border-radius: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
::ng-deep .no-animations split-tab > .child {
|
||||
transition: none;
|
||||
}
|
||||
|
@@ -458,18 +458,12 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
|
||||
tab.destroy()
|
||||
}
|
||||
|
||||
let allTabs: BaseTabComponent[] = []
|
||||
if (thing instanceof BaseTabComponent) {
|
||||
allTabs = [thing]
|
||||
} else if (thing instanceof SplitContainer) {
|
||||
allTabs = thing.getAllTabs()
|
||||
}
|
||||
for (const tab of allTabs) {
|
||||
if (tab.parent instanceof SplitTabComponent) {
|
||||
tab.parent.removeTab(tab)
|
||||
if (thing.parent instanceof SplitTabComponent) {
|
||||
thing.parent.removeTab(thing)
|
||||
}
|
||||
tab.removeFromContainer()
|
||||
tab.parent = this
|
||||
thing.removeFromContainer()
|
||||
thing.parent = this
|
||||
}
|
||||
|
||||
let target = relative ? this.getParentOf(relative) : null
|
||||
@@ -787,7 +781,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
|
||||
}
|
||||
|
||||
get icon (): string|null {
|
||||
return this.getFocusedTab()?.icon ?? this.getAllTabs()[0]?.icon ?? null
|
||||
return this.getFocusedTab()?.icon ?? null
|
||||
}
|
||||
|
||||
set icon (icon: string|null) {
|
||||
@@ -797,7 +791,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
|
||||
}
|
||||
|
||||
get color (): string|null {
|
||||
return this.getFocusedTab()?.color ?? this.getAllTabs()[0]?.color ?? null
|
||||
return this.getFocusedTab()?.color ?? null
|
||||
}
|
||||
|
||||
set color (color: string|null) {
|
||||
|
@@ -1,5 +1,4 @@
|
||||
|
||||
.mt-auto.mb-auto
|
||||
.mt-5
|
||||
.tabby-logo
|
||||
h1.tabby-title Tabby
|
||||
sup α
|
||||
|
@@ -7,7 +7,7 @@ import { Command, CommandLocation } from '../api/commands'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'start-page',
|
||||
templateUrl: './startPage.component.pug',
|
||||
templateUrl:'./startPage.component.pug',
|
||||
styleUrls: ['./startPage.component.scss'],
|
||||
})
|
||||
export class StartPageComponent {
|
||||
|
@@ -1,7 +1,6 @@
|
||||
.colorbar([style.background-color]='tab.color', *ngIf='tab.color != null')
|
||||
.progressbar([style.width]='progress + "%"', *ngIf='progress != null')
|
||||
.activity-indicator(*ngIf='tab.activity$|async')
|
||||
.current-tab-indicator
|
||||
|
||||
.index(*ngIf='!config.store.terminal.hideTabIndex && hostApp.platform === Platform.macOS', cdkDragHandle) {{index + 1}}
|
||||
.index(*ngIf='!config.store.terminal.hideTabIndex && hostApp.platform !== Platform.macOS') {{index + 1}}
|
||||
|
@@ -35,7 +35,7 @@ $tabs-height: 38px;
|
||||
-webkit-app-region: no-drag;
|
||||
cursor: -webkit-grab;
|
||||
|
||||
width: calc(22px * var(--spaciness));
|
||||
width: 22px;
|
||||
border-radius: 10px;
|
||||
text-align: center;
|
||||
transition: 0.25s all;
|
||||
@@ -134,29 +134,15 @@ $tabs-height: 38px;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.activity-indicator, .current-tab-indicator {
|
||||
position: absolute;
|
||||
height: 2px;
|
||||
}
|
||||
|
||||
&.active .activity-indicator {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.activity-indicator {
|
||||
bottom: 4px;
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
&.active .current-tab-indicator {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.current-tab-indicator {
|
||||
display: none;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 4px;
|
||||
height: 2px;
|
||||
}
|
||||
}
|
||||
|
@@ -15,7 +15,7 @@ import { PlatformService } from '../api/platform'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'tab-header',
|
||||
templateUrl: './tabHeader.component.pug',
|
||||
templateUrl:'./tabHeader.component.pug',
|
||||
styleUrls: ['./tabHeader.component.scss'],
|
||||
})
|
||||
export class TabHeaderComponent extends BaseComponent {
|
||||
|
@@ -4,7 +4,7 @@ import { HostWindowService } from '../api'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'title-bar',
|
||||
templateUrl: './titleBar.component.pug',
|
||||
templateUrl:'./titleBar.component.pug',
|
||||
styleUrls: ['./titleBar.component.scss'],
|
||||
})
|
||||
export class TitleBarComponent {
|
||||
|
@@ -6,7 +6,12 @@
|
||||
.icon(*ngIf='!isDownload(transfer)') !{require('../icons/upload.svg')}
|
||||
.main
|
||||
label.no-wrap([title]='transfer.getName()') {{transfer.getName()}}
|
||||
ngb-progressbar([type]='transfer.isComplete() ? "success" : transfer.isCancelled() ? "danger" : "info"', [value]='getProgress(transfer)')
|
||||
.status(*ngIf='transfer.isComplete()')
|
||||
ngb-progressbar(type='success', [value]='100')
|
||||
.status(*ngIf='transfer.isCancelled()')
|
||||
ngb-progressbar(type='danger', [value]='100')
|
||||
.status(*ngIf='!transfer.isComplete() && !transfer.isCancelled()')
|
||||
ngb-progressbar(type='info', [value]='getProgress(transfer)')
|
||||
.metadata
|
||||
.size {{transfer.getSize()|filesize}}
|
||||
.speed(*ngIf='transfer.getSpeed()') {{transfer.getSpeed()|filesize}}/s
|
||||
|
@@ -5,7 +5,7 @@ import { FileDownload, FileTransfer, PlatformService } from '../api/platform'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'transfers-menu',
|
||||
templateUrl: './transfersMenu.component.pug',
|
||||
templateUrl:'./transfersMenu.component.pug',
|
||||
styleUrls: ['./transfersMenu.component.scss'],
|
||||
})
|
||||
export class TransfersMenuComponent {
|
||||
|
@@ -3,7 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
|
||||
|
||||
/** @hidden */
|
||||
@Component({
|
||||
templateUrl: './unlockVaultModal.component.pug',
|
||||
templateUrl:'./unlockVaultModal.component.pug',
|
||||
})
|
||||
export class UnlockVaultModalComponent {
|
||||
passphrase: string
|
||||
|
@@ -8,7 +8,7 @@ import { LocaleService } from '../services/locale.service'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'welcome-page',
|
||||
templateUrl: './welcomeTab.component.pug',
|
||||
templateUrl:'./welcomeTab.component.pug',
|
||||
styleUrls: ['./welcomeTab.component.scss'],
|
||||
})
|
||||
export class WelcomeTabComponent extends BaseTabComponent {
|
||||
|
@@ -1,18 +1,18 @@
|
||||
button.btn.btn-dark(
|
||||
button.btn.btn-secondary.btn-minimize(
|
||||
(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-dark((click)='hostWindow.toggleMaximize()', *ngIf='!hostWindow.isMaximized()')
|
||||
button.btn.btn-secondary.btn-maximize((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-dark((click)='hostWindow.toggleMaximize()', *ngIf='hostWindow.isMaximized()')
|
||||
button.btn.btn-secondary.btn-maximize((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-danger(
|
||||
button.btn.btn-secondary.btn-close(
|
||||
(click)='closeWindow()'
|
||||
)
|
||||
svg(version='1.1', width='10', height='10')
|
||||
|
@@ -6,7 +6,7 @@ import { AppService } from '../services/app.service'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'window-controls',
|
||||
templateUrl: './windowControls.component.pug',
|
||||
templateUrl:'./windowControls.component.pug',
|
||||
styleUrls: ['./windowControls.component.scss'],
|
||||
})
|
||||
export class WindowControlsComponent {
|
||||
|
@@ -22,8 +22,6 @@ hotkeys:
|
||||
- 'Ctrl-Shift'
|
||||
duplicate-tab: []
|
||||
restart-tab: []
|
||||
reconnect-tab: []
|
||||
disconnect-tab: []
|
||||
explode-tab:
|
||||
- 'Ctrl-Shift-.'
|
||||
combine-tabs:
|
||||
|
@@ -39,8 +39,6 @@ hotkeys:
|
||||
tab-10: []
|
||||
duplicate-tab: []
|
||||
restart-tab: []
|
||||
reconnect-tab: []
|
||||
disconnect-tab: []
|
||||
explode-tab:
|
||||
- '⌘-Shift-.'
|
||||
combine-tabs:
|
||||
|
@@ -23,8 +23,6 @@ hotkeys:
|
||||
- 'Ctrl-Shift'
|
||||
duplicate-tab: []
|
||||
restart-tab: []
|
||||
reconnect-tab: []
|
||||
disconnect-tab: []
|
||||
explode-tab:
|
||||
- 'Ctrl-Shift-.'
|
||||
combine-tabs:
|
||||
|
@@ -18,7 +18,6 @@ appearance:
|
||||
vibrancy: false
|
||||
vibrancyType: 'blur'
|
||||
lastTabClosesWindow: false
|
||||
spaciness: 1
|
||||
terminal:
|
||||
showBuiltinProfiles: true
|
||||
showRecentProfiles: 3
|
||||
@@ -46,9 +45,6 @@ vault: null
|
||||
encrypted: false
|
||||
enableExperimentalFeatures: false
|
||||
pluginBlacklist: []
|
||||
commandBlacklist: []
|
||||
providerBlacklist: []
|
||||
profileBlacklist: []
|
||||
hacks:
|
||||
disableGPU: false
|
||||
disableVibrancyWhileDragging: false
|
||||
|
@@ -19,7 +19,6 @@ export class CdkAutoDropGroup implements OnInit {
|
||||
) { }
|
||||
|
||||
ngOnInit (): void {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
||||
CdkAutoDropGroup.groups[this.groupName] ??= new FakeDropGroup()
|
||||
CdkAutoDropGroup.groups[this.groupName]._items.add(this.cdkDropList)
|
||||
this.cdkDropList['_group'] = CdkAutoDropGroup.groups[this.groupName]
|
||||
|
@@ -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()
|
||||
|
@@ -5,11 +5,9 @@ import { FormsModule } from '@angular/forms'
|
||||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
|
||||
import { NgxFilesizeModule } from 'ngx-filesize'
|
||||
import { DragDropModule } from '@angular/cdk/drag-drop'
|
||||
import { TranslateModule, TranslateCompiler, TranslateService, MissingTranslationHandler } from '@ngx-translate/core'
|
||||
import { TranslateModule, TranslateCompiler, TranslateService } from '@ngx-translate/core'
|
||||
import { TranslateMessageFormatCompiler, MESSAGE_FORMAT_CONFIG } from 'ngx-translate-messageformat-compiler'
|
||||
|
||||
import '@angular/localize/init'
|
||||
|
||||
import { AppRootComponent } from './components/appRoot.component'
|
||||
import { CheckboxComponent } from './components/checkbox.component'
|
||||
import { TabBodyComponent } from './components/tabBody.component'
|
||||
@@ -43,7 +41,7 @@ import { AppService } from './services/app.service'
|
||||
import { ConfigService } from './services/config.service'
|
||||
import { VaultFileProvider } from './services/vault.service'
|
||||
import { HotkeysService } from './services/hotkeys.service'
|
||||
import { CustomMissingTranslationHandler, LocaleService } from './services/locale.service'
|
||||
import { LocaleService } from './services/locale.service'
|
||||
import { CommandService } from './services/commands.service'
|
||||
|
||||
import { StandardTheme, StandardCompactTheme, PaperTheme, NewTheme } from './theme'
|
||||
@@ -101,10 +99,6 @@ const PROVIDERS = [
|
||||
provide: TranslateCompiler,
|
||||
useFactory: TranslateMessageFormatCompilerFactory,
|
||||
},
|
||||
missingTranslationHandler: {
|
||||
provide: MissingTranslationHandler,
|
||||
useClass: CustomMissingTranslationHandler,
|
||||
},
|
||||
}),
|
||||
],
|
||||
declarations: [
|
||||
@@ -195,7 +189,7 @@ export default class AppModule { // eslint-disable-line @typescript-eslint/no-ex
|
||||
}
|
||||
|
||||
if (hotkey === 'profile-selector') {
|
||||
commands.run('core:profile-selector', {})
|
||||
commands.run('profile-selector', {})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@@ -71,7 +71,6 @@ export class CommandService {
|
||||
}
|
||||
|
||||
return commands
|
||||
.filter(c => !this.config.store.commandBlacklist.includes(c.id))
|
||||
.sort((a, b) => (a.weight ?? 0) - (b.weight ?? 0))
|
||||
.map(command => {
|
||||
const run = command.run
|
||||
|
@@ -254,9 +254,7 @@ export class ConfigService {
|
||||
return services.filter(service => {
|
||||
for (const pluginName in this.servicesCache) {
|
||||
if (this.servicesCache[pluginName].includes(service.constructor)) {
|
||||
const id = `${pluginName}:${service.constructor.name}`
|
||||
return !this.store?.pluginBlacklist?.includes(pluginName)
|
||||
&& !this.store?.providerBlacklist?.includes(id)
|
||||
}
|
||||
}
|
||||
return true
|
||||
|
@@ -178,7 +178,7 @@ export class HotkeysService {
|
||||
this._key.next(getKeyName(eventData))
|
||||
})
|
||||
|
||||
if (process.platform === 'darwin' && eventData.metaKey && eventName === 'keydown' && !['Ctrl', 'Shift', altKeyName, metaKeyName, 'Enter'].includes(keyName)) {
|
||||
if (process.platform === 'darwin' && eventData.metaKey && eventName === 'keydown' && !['Ctrl', 'Shift', altKeyName, metaKeyName].includes(keyName)) {
|
||||
// macOS will swallow non-modified keyups if Cmd is held down
|
||||
this.pushKeyEvent('keyup', nativeEvent)
|
||||
}
|
||||
|
@@ -1,7 +1,6 @@
|
||||
import { Injectable } from '@angular/core'
|
||||
import { registerLocaleData } from '@angular/common'
|
||||
import { TranslateService, MissingTranslationHandler } from '@ngx-translate/core'
|
||||
import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler'
|
||||
import { TranslateService } from '@ngx-translate/core'
|
||||
|
||||
import localeENUS from '@angular/common/locales/en'
|
||||
import localeENGB from '@angular/common/locales/en-GB'
|
||||
@@ -56,19 +55,6 @@ function flattenMessageFormatTranslation (po: any) {
|
||||
return translation
|
||||
}
|
||||
|
||||
export class CustomMissingTranslationHandler extends MissingTranslationHandler {
|
||||
compiler = new TranslateMessageFormatCompiler()
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/ban-types
|
||||
handle (params: { key: string, translateService: TranslateService, interpolateParams?: Object }): any {
|
||||
const v = this.compiler.compile(params.key, params.translateService.currentLang)
|
||||
if (typeof v === 'string') {
|
||||
return v
|
||||
}
|
||||
return v(params.interpolateParams)
|
||||
}
|
||||
}
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class LocaleService {
|
||||
private logger: Logger
|
||||
|
@@ -24,7 +24,6 @@ export class ProfilesService {
|
||||
isBuiltin: false,
|
||||
isTemplate: false,
|
||||
terminalColorScheme: null,
|
||||
behaviorOnSessionEnd: 'auto',
|
||||
}
|
||||
|
||||
constructor (
|
||||
@@ -96,8 +95,6 @@ export class ProfilesService {
|
||||
const freeInputEquivalent = provider?.intoQuickConnectString(fullProfile) ?? undefined
|
||||
return {
|
||||
...profile,
|
||||
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
||||
group: profile.group || '',
|
||||
freeInputEquivalent,
|
||||
description: provider?.getDescription(fullProfile),
|
||||
}
|
||||
@@ -153,8 +150,6 @@ export class ProfilesService {
|
||||
|
||||
profiles = profiles.filter(x => !x.isTemplate)
|
||||
|
||||
profiles = profiles.filter(x => x.id && !this.config.store.profileBlacklist.includes(x.id))
|
||||
|
||||
options = [...options, ...profiles.map((p): SelectorOption<void> => ({
|
||||
...this.selectorOptionForProfile(p),
|
||||
weight: p.isBuiltin ? 2 : 1,
|
||||
|
@@ -26,14 +26,15 @@ export class ThemesService {
|
||||
this.applyThemeVariables()
|
||||
config.changed$.subscribe(() => {
|
||||
this.applyCurrentTheme()
|
||||
this.applyThemeVariables()
|
||||
})
|
||||
})
|
||||
config.changed$.subscribe(() => this.applyThemeVariables())
|
||||
}
|
||||
|
||||
private applyThemeVariables () {
|
||||
if (!this.findCurrentTheme().followsColorScheme) {
|
||||
document.documentElement.style.cssText = this.rootElementStyleBackup
|
||||
return
|
||||
}
|
||||
|
||||
const theme = this.config.store.terminal.colorScheme
|
||||
@@ -62,118 +63,68 @@ export class ThemesService {
|
||||
// const backgroundMore =more(theme.background, 0.25).string()
|
||||
const accentIndex = 4
|
||||
const vars: Record<string, string> = {}
|
||||
const contrastPairs: string[][] = []
|
||||
|
||||
vars['--body-bg'] = background.string()
|
||||
if (this.findCurrentTheme().followsColorScheme) {
|
||||
vars['--bs-body-bg'] = theme.background
|
||||
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['--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]
|
||||
|
||||
contrastPairs.push(['--bs-body-bg', '--bs-body-color'])
|
||||
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()
|
||||
|
||||
contrastPairs.push(['--theme-bg', '--theme-fg'])
|
||||
contrastPairs.push(['--theme-bg-less', '--theme-fg-less'])
|
||||
contrastPairs.push(['--theme-bg-less-2', '--theme-fg-less-2'])
|
||||
contrastPairs.push(['--theme-bg-more', '--theme-fg-more'])
|
||||
contrastPairs.push(['--theme-bg-more-2', '--theme-fg-more-2'])
|
||||
|
||||
const themeColors = {
|
||||
primary: theme.colors[accentIndex],
|
||||
secondary: less(theme.background, 0.5).string(),
|
||||
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.75).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()
|
||||
vars[`--theme-${key}-fg`] = more(color, 3).string()
|
||||
|
||||
vars[`--theme-${key}-active-bg`] = less(color, 1).string()
|
||||
vars[`--theme-${key}-active-fg`] = more(color, 1).string()
|
||||
|
||||
contrastPairs.push([`--theme-${key}`, `--theme-${key}-fg`])
|
||||
contrastPairs.push([`--theme-${key}-active-bg`, `--theme-${key}-active-fg`])
|
||||
}
|
||||
|
||||
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")`
|
||||
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
|
||||
}
|
||||
|
||||
vars['--spaciness'] = this.config.store.appearance.spaciness
|
||||
|
||||
for (const [bg, fg] of contrastPairs) {
|
||||
const colorBg = Color(vars[bg]).hsl()
|
||||
const colorFg = Color(vars[fg]).hsl()
|
||||
const bgContrast = colorBg.contrast(colorFg)
|
||||
if (bgContrast < this.config.store.terminal.minimumContrastRatio) {
|
||||
vars[fg] = this.ensureContrast(colorFg, colorBg).string()
|
||||
}
|
||||
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, value] of Object.entries(vars)) {
|
||||
document.documentElement.style.setProperty(key, value)
|
||||
}
|
||||
|
||||
document.body.classList.toggle('no-animations', !this.config.store.accessibility.animations)
|
||||
}
|
||||
|
||||
private ensureContrast (color: Color, against: Color): Color {
|
||||
const a = this.increaseContrast(color, against, 1.1)
|
||||
const b = this.increaseContrast(color, against, 0.9)
|
||||
return a.contrast(against) > b.contrast(against) ? a : b
|
||||
}
|
||||
|
||||
private increaseContrast (color: Color, against: Color, step=1.1): Color {
|
||||
color = color.hsl()
|
||||
color.color[2] = Math.max(color.color[2], 0.01)
|
||||
while (
|
||||
(step < 1 && color.color[2] > 1 ||
|
||||
step > 1 && color.color[2] < 99) &&
|
||||
color.contrast(against) < this.config.store.terminal.minimumContrastRatio) {
|
||||
color.color[2] *= step
|
||||
}
|
||||
return color
|
||||
}
|
||||
|
||||
findTheme (name: string): Theme|null {
|
||||
|
@@ -10,7 +10,7 @@ app-root {
|
||||
|
||||
&> .content {
|
||||
.tab-bar {
|
||||
background: var(--theme-bg-more-2);
|
||||
background: var(--theme-bg-more);
|
||||
|
||||
.btn-tab-bar {
|
||||
background: transparent;
|
||||
@@ -30,7 +30,6 @@ app-root {
|
||||
border-left: 1px solid transparent;
|
||||
border-right: 1px solid transparent;
|
||||
transition: 0.125s ease-out width;
|
||||
color: var(--theme-fg-more-2);
|
||||
|
||||
.index {
|
||||
color: var(--bs-body-color);
|
||||
@@ -55,41 +54,131 @@ app-root {
|
||||
opacity: .2;
|
||||
}
|
||||
|
||||
.current-tab-indicator {
|
||||
background:var(--bs-light);
|
||||
}
|
||||
|
||||
&.active {
|
||||
color: var(--theme-fg);
|
||||
background: var(--body-bg);
|
||||
// color: $black;
|
||||
background: var(--bs-body-bg);
|
||||
// border-left: 1px solid $border-color;
|
||||
// border-right: 1px solid $border-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// &.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(--body-bg);
|
||||
background: var(--bs-body-bg);
|
||||
}
|
||||
|
||||
$tab-border-radius: 5px;
|
||||
// $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;
|
||||
|
||||
$input-placeholder-color: var(--theme-fg-more-2);
|
||||
|
||||
@import '~bootstrap/scss/bootstrap.scss';
|
||||
@import "./theme.vendor.scss";
|
||||
|
||||
body {
|
||||
background: var(--body-bg);
|
||||
--bs-border-color: var(--theme-bg-more-2);
|
||||
--bs-form-control-bg: var(--theme-bg-more-2);
|
||||
--bs-form-control-bg: var(--theme-bg-more);
|
||||
--bs-emphasis-color: var(--theme-fg-less-2);
|
||||
}
|
||||
|
||||
@@ -97,6 +186,8 @@ 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);
|
||||
@@ -107,15 +198,23 @@ 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 {
|
||||
--bs-nav-link-color: var(--theme-fg);
|
||||
--bs-nav-link-hover-color: var(--theme-fg-less);
|
||||
// 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);
|
||||
@@ -124,12 +223,15 @@ 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-primary-fg);
|
||||
--bs-nav-pills-link-active-bg: var(--theme-primary);
|
||||
--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 {
|
||||
@@ -173,13 +275,6 @@ body {
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
--bs-dropdown-bg: var(--theme-bg-more);
|
||||
}
|
||||
|
||||
.progress {
|
||||
--bs-progress-height: 3px;
|
||||
}
|
||||
|
||||
tab-body {
|
||||
terminal-toolbar {
|
||||
@@ -202,20 +297,20 @@ tab-body {
|
||||
--bs-btn-hover-border-color: var(--theme-#{$color}-less);
|
||||
--bs-btn-hover-bg: var(--theme-#{$color}-less);
|
||||
|
||||
--bs-btn-active-border-color: var(--theme-#{$color});
|
||||
--bs-btn-active-bg: var(--theme-#{$color}-active-bg);
|
||||
--bs-btn-active-border-color: var(--theme-#{$color}-less-2);
|
||||
--bs-btn-active-bg: var(--theme-#{$color}-less-2);
|
||||
|
||||
--bs-btn-focus-shadow-rgb: 130, 138, 145;
|
||||
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
||||
|
||||
--bs-btn-color: var(--theme-#{$color}-fg);
|
||||
--bs-btn-hover-color: var(--theme-#{$color}-fg);
|
||||
--bs-btn-active-color: var(--theme-#{$color}-active-fg);
|
||||
--bs-btn-disabled-color: var(--theme-#{$color}-fg);
|
||||
--bs-btn-color: var(--theme-#{$color}-more-2);
|
||||
--bs-btn-hover-color: var(--theme-#{$color}-more-2);
|
||||
--bs-btn-active-color: var(--theme-#{$color}-more-2);
|
||||
--bs-btn-disabled-color: var(--theme-#{$color}-more-2);
|
||||
}
|
||||
|
||||
.alert-#{$color} {
|
||||
--bs-alert-bg: var(--theme-#{$color}-fg);
|
||||
--bs-alert-bg: var(--theme-#{$color}-more-2);
|
||||
--bs-alert-border-color: var(--theme-#{$color}-more);
|
||||
--bs-alert-color: var(--theme-#{$color});
|
||||
}
|
||||
@@ -343,6 +438,19 @@ 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;
|
||||
@@ -385,8 +493,30 @@ 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;
|
||||
|
||||
@@ -400,8 +530,8 @@ ngx-colors-panel .opened {
|
||||
}
|
||||
|
||||
.text-muted {
|
||||
// color: var(--bs-body-color) !important;
|
||||
opacity: .5;
|
||||
color: var(--theme-fg) !important;
|
||||
}
|
||||
|
||||
.form-switch .form-check-input {
|
||||
@@ -426,7 +556,7 @@ ngx-colors-panel .opened {
|
||||
}
|
||||
|
||||
start-page {
|
||||
background: var(--theme-bg-more-2);
|
||||
background: var(--theme-bg);
|
||||
}
|
||||
|
||||
split-tab-spanner {
|
||||
@@ -436,9 +566,3 @@ split-tab-spanner {
|
||||
background: rgba(var(--bs-dark-rgb), .2);
|
||||
}
|
||||
}
|
||||
|
||||
window-controls {
|
||||
button svg {
|
||||
fill: var(--theme-fg) !important;
|
||||
}
|
||||
}
|
||||
|
@@ -1,29 +1,37 @@
|
||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'
|
||||
import { Injectable } from '@angular/core'
|
||||
import { TranslateService } from '@ngx-translate/core'
|
||||
import { Theme } from './api'
|
||||
|
||||
/** @hidden */
|
||||
@Injectable()
|
||||
export class StandardTheme extends Theme {
|
||||
name = _('Standard (legacy)')
|
||||
name = this.translate.instant('Standard (legacy)')
|
||||
css = require('./theme.scss')
|
||||
terminalBackground = '#222a33'
|
||||
|
||||
constructor (private translate: TranslateService) {
|
||||
super()
|
||||
}
|
||||
}
|
||||
|
||||
/** @hidden */
|
||||
@Injectable()
|
||||
export class StandardCompactTheme extends Theme {
|
||||
name = _('Compact (legacy)')
|
||||
name = this.translate.instant('Compact (legacy)')
|
||||
css = require('./theme.compact.scss')
|
||||
terminalBackground = '#222a33'
|
||||
macOSWindowButtonsInsetX = 8
|
||||
macOSWindowButtonsInsetY = 6
|
||||
|
||||
constructor (private translate: TranslateService) {
|
||||
super()
|
||||
}
|
||||
}
|
||||
|
||||
/** @hidden */
|
||||
@Injectable()
|
||||
export class PaperTheme extends Theme {
|
||||
name = _('Paper (legacy)')
|
||||
name = 'Paper (legacy)'
|
||||
css = require('./theme.paper.scss')
|
||||
terminalBackground = '#f7f1e0'
|
||||
}
|
||||
@@ -31,8 +39,12 @@ export class PaperTheme extends Theme {
|
||||
/** @hidden */
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class NewTheme extends Theme {
|
||||
name = _('Follow the color scheme')
|
||||
name = this.translate.instant('Follow the color scheme')
|
||||
css = require('./theme.new.scss')
|
||||
terminalBackground = '#f7f1e0'
|
||||
followsColorScheme = true
|
||||
|
||||
constructor (private translate: TranslateService) {
|
||||
super()
|
||||
}
|
||||
}
|
||||
|
@@ -7,13 +7,8 @@ export const WIN_BUILD_CONPTY_STABLE = 18309
|
||||
export const WIN_BUILD_WSL_EXE_DISTRO_FLAG = 17763
|
||||
export const WIN_BUILD_FLUENT_BG_SUPPORTED = 17063
|
||||
|
||||
export function getWindows10Build (): number|undefined {
|
||||
return process.platform === 'win32' && parseFloat(os.release()) >= 10 ? parseInt(os.release().split('.')[2]) : undefined
|
||||
}
|
||||
|
||||
export function isWindowsBuild (build: number): boolean {
|
||||
const b = getWindows10Build()
|
||||
return b !== undefined && b >= build
|
||||
return process.platform === 'win32' && parseFloat(os.release()) >= 10 && parseInt(os.release().split('.')[2]) >= build
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
|
@@ -174,10 +174,10 @@ process@^0.11.10:
|
||||
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
||||
integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
|
||||
|
||||
readable-stream@4.4.0:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.0.tgz#55ce132d60a988c460d75c631e9ccf6a7229b468"
|
||||
integrity sha512-kDMOq0qLtxV9f/SQv522h8cxZBqNZXuXNyjyezmfAAuribMyVXziljpQ/uQhfE1XLg2/TLTW2DsnoE4VAi/krg==
|
||||
readable-stream@4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.2.0.tgz#a7ef523d3b39e4962b0db1a1af22777b10eeca46"
|
||||
integrity sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==
|
||||
dependencies:
|
||||
abort-controller "^3.0.0"
|
||||
buffer "^6.0.3"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tabby-electron",
|
||||
"version": "1.0.197-nightly.1",
|
||||
"version": "1.0.189-nightly.2",
|
||||
"description": "Electron-specific bindings",
|
||||
"keywords": [
|
||||
"tabby-builtin-plugin"
|
||||
@@ -12,20 +12,16 @@
|
||||
"watch": "webpack --progress --color --watch"
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
"typings"
|
||||
"dist"
|
||||
],
|
||||
"author": "Eugene Pankov",
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"@angular/core": "^15",
|
||||
"tabby-local": "*"
|
||||
"@angular/core": "^9.1.9"
|
||||
},
|
||||
"devDependencies": {
|
||||
"electron-promise-ipc": "^2.2.4",
|
||||
"ps-node": "^0.1.6",
|
||||
"tmp-promise": "^3.0.2",
|
||||
"which": "^3.0.0",
|
||||
"winston": "^3.3.3"
|
||||
}
|
||||
}
|
||||
|
@@ -2,7 +2,6 @@ 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'
|
||||
@@ -15,28 +14,10 @@ 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: [
|
||||
@@ -54,29 +35,6 @@ import { VSDevToolsProvider } from './shells/vs'
|
||||
{ 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 {
|
||||
@@ -89,7 +47,6 @@ export default class ElectronModule {
|
||||
docking: DockingService,
|
||||
themeService: ThemesService,
|
||||
app: AppService,
|
||||
dockMenu: DockMenuService,
|
||||
) {
|
||||
config.ready$.toPromise().then(() => {
|
||||
touchbar.update()
|
||||
@@ -130,10 +87,6 @@ export default class ElectronModule {
|
||||
})
|
||||
|
||||
config.changed$.subscribe(() => this.updateVibrancy())
|
||||
|
||||
config.ready$.toPromise().then(() => {
|
||||
dockMenu.update()
|
||||
})
|
||||
}
|
||||
|
||||
private registerGlobalHotkey () {
|
||||
|
@@ -1,140 +0,0 @@
|
||||
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())
|
||||
}
|
||||
|
||||
}
|
@@ -234,15 +234,6 @@ 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 {
|
||||
|
@@ -88,11 +88,6 @@ 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"
|
||||
@@ -284,11 +279,6 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
|
||||
dependencies:
|
||||
has-symbols "^1.0.2"
|
||||
|
||||
isexe@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
||||
|
||||
kuler@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3"
|
||||
@@ -366,13 +356,6 @@ 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"
|
||||
@@ -441,13 +424,6 @@ 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"
|
||||
@@ -508,13 +484,6 @@ which-boxed-primitive@^1.0.2:
|
||||
is-string "^1.0.5"
|
||||
is-symbol "^1.0.3"
|
||||
|
||||
which@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1"
|
||||
integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
winston-transport@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.5.0.tgz#6e7b0dd04d393171ed5e4e4905db265f7ab384fa"
|
||||
@@ -525,11 +494,10 @@ winston-transport@^4.5.0:
|
||||
triple-beam "^1.3.0"
|
||||
|
||||
winston@^3.3.3:
|
||||
version "3.9.0"
|
||||
resolved "https://registry.yarnpkg.com/winston/-/winston-3.9.0.tgz#2bbdeb8167a75fac6d9a0c6d002890cd908016c2"
|
||||
integrity sha512-jW51iW/X95BCW6MMtZWr2jKQBP4hV5bIDq9QrIjfDk6Q9QuxvTKEAlpUNAzP+HYHFFCeENhph16s0zEunu4uuQ==
|
||||
version "3.7.2"
|
||||
resolved "https://registry.yarnpkg.com/winston/-/winston-3.7.2.tgz#95b4eeddbec902b3db1424932ac634f887c400b1"
|
||||
integrity sha512-QziIqtojHBoyzUOdQvQiar1DH0Xp9nF1A1y7NVy2DGEsz82SBDtOalS0ulTRGVT14xPX3WRWkCsdcJKqNflKng==
|
||||
dependencies:
|
||||
"@colors/colors" "1.5.0"
|
||||
"@dabh/diagnostics" "^2.0.2"
|
||||
async "^3.2.3"
|
||||
is-stream "^2.0.0"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tabby-linkifier",
|
||||
"version": "1.0.197-nightly.1",
|
||||
"version": "1.0.189-nightly.2",
|
||||
"description": "Makes URLs, IPs and file paths clickable in Tabby",
|
||||
"keywords": [
|
||||
"tabby-builtin-plugin"
|
||||
@@ -12,7 +12,6 @@
|
||||
"watch": "webpack --progress --color --watch"
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
"typings"
|
||||
],
|
||||
"author": "Eugene Pankov",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tabby-local",
|
||||
"version": "1.0.197-nightly.1",
|
||||
"version": "1.0.189-nightly.2",
|
||||
"description": "Tabby's local shell plugin",
|
||||
"keywords": [
|
||||
"tabby-builtin-plugin"
|
||||
@@ -12,7 +12,6 @@
|
||||
"watch": "webpack --progress --color --watch"
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
"typings"
|
||||
],
|
||||
"author": "Eugene Pankov",
|
||||
@@ -20,16 +19,18 @@
|
||||
"devDependencies": {
|
||||
"ansi-colors": "^4.1.1",
|
||||
"dataurl": "0.1.0",
|
||||
"hasbin": "^1.2.3",
|
||||
"ps-node": "^0.1.6",
|
||||
"runes": "^0.4.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/animations": "^15",
|
||||
"@angular/common": "^15",
|
||||
"@angular/core": "^15",
|
||||
"@angular/forms": "^15",
|
||||
"@angular/platform-browser": "^15",
|
||||
"@ng-bootstrap/ng-bootstrap": "^14",
|
||||
"rxjs": "^7",
|
||||
"@angular/animations": "^9.1.9",
|
||||
"@angular/common": "^9.1.11",
|
||||
"@angular/core": "^9.1.9",
|
||||
"@angular/forms": "^9.1.11",
|
||||
"@angular/platform-browser": "^9.1.11",
|
||||
"@ng-bootstrap/ng-bootstrap": "^6.1.0",
|
||||
"rxjs": "^6.5.5",
|
||||
"tabby-core": "*",
|
||||
"tabby-settings": "*",
|
||||
"tabby-terminal": "*"
|
||||
|
@@ -53,28 +53,3 @@ 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>
|
||||
}
|
||||
|
@@ -130,7 +130,7 @@ export class AutoOpenTabCLIHandler extends CLIHandler {
|
||||
}
|
||||
|
||||
async handle (event: CLIEvent): Promise<boolean> {
|
||||
if (!event.secondInstance && this.config.store.terminal.autoOpen && !this.config.store.enableWelcomeTab) {
|
||||
if (!event.secondInstance && this.config.store.terminal.autoOpen) {
|
||||
this.app.ready$.subscribe(() => {
|
||||
this.terminal.openTab()
|
||||
})
|
||||
|
@@ -13,7 +13,7 @@ ng-container(*ngIf='!argvMode')
|
||||
(ngModelChange)='parseCommand()'
|
||||
)
|
||||
|
||||
ng-container(*ngIf='argvMode && _model')
|
||||
ng-container(*ngIf='argvMode')
|
||||
.mb-3
|
||||
label(translate) Program
|
||||
.input-group
|
||||
@@ -28,7 +28,7 @@ ng-container(*ngIf='argvMode && _model')
|
||||
[(ngModel)]='_model.command',
|
||||
)
|
||||
|
||||
.mb-3(*ngIf='_model.args')
|
||||
.mb-3
|
||||
label(translate) Arguments
|
||||
.input-group(
|
||||
*ngFor='let arg of _model.args; index as i; trackBy: trackByIndex',
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user