Compare commits

..

11 Commits

Author SHA1 Message Date
allcontributors[bot]
a7ce222041 update README.ja-JP.md [skip ci] 2023-03-05 20:58:00 +00:00
allcontributors[bot]
4c31b50da5 update .all-contributorsrc [skip ci] 2023-03-05 20:57:17 +00:00
allcontributors[bot]
ce3dbbd2b4 update README.es-ES.md [skip ci] 2023-03-05 20:49:29 +00:00
allcontributors[bot]
afee91d04a update README.pt-BR.md [skip ci] 2023-03-05 20:49:23 +00:00
allcontributors[bot]
b976aef820 update README.id-ID.md [skip ci] 2023-03-05 20:48:14 +00:00
allcontributors[bot]
9259ec2825 update README.de-DE.md [skip ci] 2023-03-05 20:46:54 +00:00
allcontributors[bot]
6b2b0cc1f0 update README.it-IT.md [skip ci] 2023-03-05 20:46:53 +00:00
allcontributors[bot]
2ee37ece6e update README.ko-KR.md [skip ci] 2023-03-05 20:46:52 +00:00
allcontributors[bot]
29532884df update README.ru-RU.md [skip ci] 2023-03-05 20:46:51 +00:00
allcontributors[bot]
0afb4e1fe7 update README.zh-CN.md [skip ci] 2023-03-05 20:46:50 +00:00
allcontributors[bot]
de1c621969 update README.md [skip ci] 2023-03-05 20:46:49 +00:00
239 changed files with 6213 additions and 7211 deletions

View File

@@ -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,

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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://user-images.githubusercontent.com/161476/200423885-7aba2202-fea7-4409-95b9-3a062ce902c7.png)](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)の仕様に準拠しています。どのような形の貢献でも歓迎します!

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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()
}
})

View File

@@ -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": "*",

View File

@@ -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;
}
}
}

View File

@@ -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
]

View File

@@ -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
}

View File

@@ -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"

View File

@@ -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.

File diff suppressed because it is too large Load Diff

View File

@@ -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 ""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -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",

View File

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

View File

@@ -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": "*"
}

View File

@@ -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"
}
}

View File

@@ -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
}

View File

@@ -14,7 +14,6 @@ export interface Profile {
icon?: string
color?: string
disableDynamicTitle: boolean
behaviorOnSessionEnd: 'auto'|'keep'|'reconnect'|'close'
weight: number
isBuiltin: boolean

View File

@@ -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'),

View File

@@ -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(

View File

@@ -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;
}

View File

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

View File

@@ -192,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
*/

View File

@@ -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 {

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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> {

View File

@@ -24,7 +24,3 @@
border-radius: 10px;
}
}
::ng-deep .no-animations split-tab > .child {
transition: none;
}

View File

@@ -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) {

View File

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

View File

@@ -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 {

View File

@@ -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}}

View File

@@ -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;
}
}

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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

View File

@@ -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 {

View File

@@ -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

View File

@@ -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 {

View File

@@ -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')

View File

@@ -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 {

View File

@@ -22,8 +22,6 @@ hotkeys:
- 'Ctrl-Shift'
duplicate-tab: []
restart-tab: []
reconnect-tab: []
disconnect-tab: []
explode-tab:
- 'Ctrl-Shift-.'
combine-tabs:

View File

@@ -39,8 +39,6 @@ hotkeys:
tab-10: []
duplicate-tab: []
restart-tab: []
reconnect-tab: []
disconnect-tab: []
explode-tab:
- '⌘-Shift-.'
combine-tabs:

View File

@@ -23,8 +23,6 @@ hotkeys:
- 'Ctrl-Shift'
duplicate-tab: []
restart-tab: []
reconnect-tab: []
disconnect-tab: []
explode-tab:
- 'Ctrl-Shift-.'
combine-tabs:

View File

@@ -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

View File

@@ -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]

View File

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

View File

@@ -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', {})
}
})
}

View File

@@ -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

View File

@@ -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

View File

@@ -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)
}

View File

@@ -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

View File

@@ -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,

View File

@@ -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 {

View File

@@ -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;
}
}

View File

@@ -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()
}
}

View File

@@ -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

View File

@@ -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"

View File

@@ -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"
}
}

View File

@@ -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 () {

View File

@@ -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())
}
}

View File

@@ -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 {

View File

@@ -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"

View File

@@ -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",

View File

@@ -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": "*"

View File

@@ -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>
}

View File

@@ -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()
})

View File

@@ -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