mirror of
https://github.com/Eugeny/tabby.git
synced 2025-07-22 03:18:01 +00:00
Compare commits
281 Commits
v1.0.191
...
dependabot
Author | SHA1 | Date | |
---|---|---|---|
![]() |
00d2c26bc9 | ||
![]() |
7572f3c26f | ||
![]() |
326d8b3fb1 | ||
![]() |
9b4f1a3a0d | ||
![]() |
0d275595cf | ||
![]() |
7860c73e49 | ||
![]() |
fa9dea0f64 | ||
![]() |
0101ffddb6 | ||
![]() |
726ad23a32 | ||
![]() |
4fe2a45664 | ||
![]() |
6f8d687529 | ||
![]() |
9d05fbeb90 | ||
![]() |
299be86498 | ||
![]() |
bd337a4197 | ||
![]() |
a1cb0ff223 | ||
![]() |
ae2f3f162e | ||
![]() |
91cb9e5c63 | ||
![]() |
e2cc9b98ee | ||
![]() |
b8f2204d4f | ||
![]() |
35bca545f8 | ||
![]() |
8b89db41d2 | ||
![]() |
d36b2b21c9 | ||
![]() |
2d8a0aff61 | ||
![]() |
db916c922a | ||
![]() |
dfc438258d | ||
![]() |
6a714a746f | ||
![]() |
54284741e0 | ||
![]() |
e4b545f231 | ||
![]() |
c27566a561 | ||
![]() |
43121c33f2 | ||
![]() |
4b34f76997 | ||
![]() |
24db1cb99a | ||
![]() |
147d22f386 | ||
![]() |
c04b93c56c | ||
![]() |
ddab79d3ac | ||
![]() |
c501f541c8 | ||
![]() |
8af3c95212 | ||
![]() |
2fa612fe2c | ||
![]() |
725bc225f1 | ||
![]() |
8451848ba6 | ||
![]() |
186a4afa1c | ||
![]() |
1d1b149ea8 | ||
![]() |
b217aaf03b | ||
![]() |
c7471f737f | ||
![]() |
124d600bfd | ||
![]() |
a3f2405092 | ||
![]() |
a92f8956d4 | ||
![]() |
22fb2dbda2 | ||
![]() |
303eab2f0e | ||
![]() |
8a12e7c6d1 | ||
![]() |
821dcbff69 | ||
![]() |
44d8c3f04b | ||
![]() |
af515e01cf | ||
![]() |
aba773b546 | ||
![]() |
9ac5286017 | ||
![]() |
555c7f7b20 | ||
![]() |
3857beb46b | ||
![]() |
fcac52a844 | ||
![]() |
4736b11c62 | ||
![]() |
a128a647d9 | ||
![]() |
9638be5349 | ||
![]() |
9c863762c3 | ||
![]() |
539c213ef6 | ||
![]() |
d2bdb55c6d | ||
![]() |
4edc0be280 | ||
![]() |
f10b8c0f35 | ||
![]() |
e38b826fd6 | ||
![]() |
2f1c388a8b | ||
![]() |
e7f7d9b024 | ||
![]() |
47a6e81998 | ||
![]() |
eea3ab9c74 | ||
![]() |
0313e872fd | ||
![]() |
84422d4453 | ||
![]() |
32696cc047 | ||
![]() |
78485617e9 | ||
![]() |
56f6b88ac2 | ||
![]() |
50fac29c5e | ||
![]() |
c13effeadc | ||
![]() |
f0f0bbedf9 | ||
![]() |
897d6167a9 | ||
![]() |
a63011ca15 | ||
![]() |
eae2095787 | ||
![]() |
3efe6ce4cd | ||
![]() |
4966397fca | ||
![]() |
57da067727 | ||
![]() |
fa50c7d9fa | ||
![]() |
9a82c4c5c0 | ||
![]() |
a4136bec6e | ||
![]() |
82a262026f | ||
![]() |
6709217a86 | ||
![]() |
4bbf86a7a7 | ||
![]() |
d98fbe8b44 | ||
![]() |
3d9b15a82d | ||
![]() |
77b74ad659 | ||
![]() |
8de26cfeb8 | ||
![]() |
87a893480c | ||
![]() |
d6d6ec39c8 | ||
![]() |
1579356d54 | ||
![]() |
60a63d9c65 | ||
![]() |
5e673106e9 | ||
![]() |
27c8b920ea | ||
![]() |
bc8ac12aef | ||
![]() |
7f2340e701 | ||
![]() |
b0350b6a35 | ||
![]() |
cea5cc73ff | ||
![]() |
ad764d2f50 | ||
![]() |
1c8054ccb1 | ||
![]() |
2de56e3c9b | ||
![]() |
b75174d248 | ||
![]() |
d200f1e3ef | ||
![]() |
5c2ea50e8e | ||
![]() |
b3b1e02cfc | ||
![]() |
c77c166b26 | ||
![]() |
deee2d3ad6 | ||
![]() |
bb579303dc | ||
![]() |
6cd9db2e2b | ||
![]() |
c0853b4f7c | ||
![]() |
15c66139f9 | ||
![]() |
aceb13598a | ||
![]() |
31359a1c1e | ||
![]() |
67a3871a38 | ||
![]() |
e40449b71e | ||
![]() |
275d140afb | ||
![]() |
69ca03cbe7 | ||
![]() |
39bbb1c853 | ||
![]() |
1e1e9af027 | ||
![]() |
1656e359ac | ||
![]() |
d66b286570 | ||
![]() |
c93431d8a6 | ||
![]() |
460cd4f606 | ||
![]() |
2c8e20b9bd | ||
![]() |
2ff1141fe9 | ||
![]() |
4d83848e8d | ||
![]() |
1e9f5ca1dc | ||
![]() |
4a92fbd088 | ||
![]() |
2c0e50771f | ||
![]() |
515565b618 | ||
![]() |
285dfa31d2 | ||
![]() |
5777cf81dd | ||
![]() |
30078a78ce | ||
![]() |
534401f0e2 | ||
![]() |
2533415f25 | ||
![]() |
acc00c7eda | ||
![]() |
3146668351 | ||
![]() |
6820ffedf9 | ||
![]() |
4c55e075bd | ||
![]() |
ac596e323b | ||
![]() |
c983743b57 | ||
![]() |
e813133f12 | ||
![]() |
86cff8d98a | ||
![]() |
0c73ce847b | ||
![]() |
d45b98445f | ||
![]() |
7cc7048b40 | ||
![]() |
a64e9646e2 | ||
![]() |
c0352bceac | ||
![]() |
1fe961e1f1 | ||
![]() |
41bd8a6012 | ||
![]() |
5bfa72573b | ||
![]() |
facd52ff4e | ||
![]() |
8826127913 | ||
![]() |
fe58e4705c | ||
![]() |
dcba109e07 | ||
![]() |
a7e6fa7b1d | ||
![]() |
8e29b4ac97 | ||
![]() |
9379f91895 | ||
![]() |
d2a54d0d96 | ||
![]() |
1d2c7ab905 | ||
![]() |
6eef2c97ee | ||
![]() |
fac6ec572f | ||
![]() |
539ad0bddc | ||
![]() |
9e4cb15c84 | ||
![]() |
ad889de139 | ||
![]() |
a494d9c800 | ||
![]() |
5075c836f9 | ||
![]() |
1112766ac0 | ||
![]() |
b97c334660 | ||
![]() |
46a1dd39f0 | ||
![]() |
9c68274d46 | ||
![]() |
fcada433c9 | ||
![]() |
4d3b2d73ad | ||
![]() |
89b3f3892e | ||
![]() |
37226f66e3 | ||
![]() |
38b8702373 | ||
![]() |
bd4b11813c | ||
![]() |
38302622b8 | ||
![]() |
312b365851 | ||
![]() |
2b5976f202 | ||
![]() |
1e6f6af5ed | ||
![]() |
901181f681 | ||
![]() |
fd9505c18f | ||
![]() |
fed3c78e79 | ||
![]() |
98965585cc | ||
![]() |
3552333aed | ||
![]() |
d6d273b2fb | ||
![]() |
d98ab296c7 | ||
![]() |
fe6836d996 | ||
![]() |
d3adbd03d4 | ||
![]() |
30b51e45bc | ||
![]() |
bb6ed52291 | ||
![]() |
93be096a9d | ||
![]() |
9978e0b86f | ||
![]() |
632c248984 | ||
![]() |
769070a630 | ||
![]() |
ee4c2718b5 | ||
![]() |
3794d41a45 | ||
![]() |
89fff28b11 | ||
![]() |
f0dadd639e | ||
![]() |
0e27af1203 | ||
![]() |
311f59f59b | ||
![]() |
ffa23bc2c9 | ||
![]() |
9409c6ffa4 | ||
![]() |
6f63db799e | ||
![]() |
aca7312141 | ||
![]() |
d81d942d7f | ||
![]() |
da0a4569de | ||
![]() |
30a916de6d | ||
![]() |
b9b98bd949 | ||
![]() |
ff66f050e0 | ||
![]() |
20479e9f27 | ||
![]() |
e48b2032ad | ||
![]() |
dc8ddfcd15 | ||
![]() |
b1acfe2519 | ||
![]() |
19d59a4cfb | ||
![]() |
f2a62413da | ||
![]() |
6498c4f923 | ||
![]() |
f423be1510 | ||
![]() |
8cb75e14a2 | ||
![]() |
6997c24dfa | ||
![]() |
94c5133104 | ||
![]() |
98f20cfb5d | ||
![]() |
1450e0436f | ||
![]() |
65756a62bc | ||
![]() |
84b0e13dc8 | ||
![]() |
b144331396 | ||
![]() |
b0973791a8 | ||
![]() |
268af8806c | ||
![]() |
c5d79135ab | ||
![]() |
f54908d603 | ||
![]() |
1fee5fbc58 | ||
![]() |
ada47d0cfa | ||
![]() |
bbca7a6a84 | ||
![]() |
d1b45812d5 | ||
![]() |
6a0c5f1e1f | ||
![]() |
3b8ca0d592 | ||
![]() |
73fae43027 | ||
![]() |
34188debd4 | ||
![]() |
9f050d8e0d | ||
![]() |
178e4a6527 | ||
![]() |
c0837febfe | ||
![]() |
dfc7a2cb94 | ||
![]() |
7da2a15bf7 | ||
![]() |
8bcb7d443a | ||
![]() |
ab593ac1f3 | ||
![]() |
9835466e68 | ||
![]() |
3e559832ec | ||
![]() |
01953ff064 | ||
![]() |
a22f9a8b43 | ||
![]() |
b710c1711f | ||
![]() |
4e6b1d2ed2 | ||
![]() |
2a8b7c3e79 | ||
![]() |
9a6e684f9e | ||
![]() |
1ebf29a977 | ||
![]() |
0cd856b51f | ||
![]() |
307b4ea266 | ||
![]() |
8116ab733f | ||
![]() |
92513814e4 | ||
![]() |
0f71618cb8 | ||
![]() |
8cba805522 | ||
![]() |
35ca7015c8 | ||
![]() |
2e72774548 | ||
![]() |
beb7c614bc | ||
![]() |
ef3c9e3be0 | ||
![]() |
1f2fa5cce7 | ||
![]() |
344fd5d05a | ||
![]() |
6225bceab4 | ||
![]() |
f252316c29 | ||
![]() |
a0fd091383 | ||
![]() |
21316a9655 | ||
![]() |
ca960e0849 | ||
![]() |
757995d593 | ||
![]() |
751eb18fd2 |
@@ -1130,6 +1130,96 @@
|
||||
"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"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "qyecst",
|
||||
"name": "qyecst",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/13901864?v=4",
|
||||
"profile": "https://github.com/qyecst",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "DehanLUO",
|
||||
"name": "Han",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/53093688?v=4",
|
||||
"profile": "https://github.com/DehanLUO",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "wljince007",
|
||||
"name": "wljince007",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/88243938?v=4",
|
||||
"profile": "https://github.com/wljince007",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
},
|
||||
{
|
||||
"login": "FeroTheFox",
|
||||
"name": "fero",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/52982404?v=4",
|
||||
"profile": "https://github.com/FeroTheFox",
|
||||
"contributions": [
|
||||
"code"
|
||||
]
|
||||
}
|
||||
],
|
||||
"contributorsPerLine": 7,
|
||||
@@ -1138,5 +1228,6 @@
|
||||
"repoType": "github",
|
||||
"repoHost": "https://github.com",
|
||||
"commitConvention": "none",
|
||||
"skipCi": true
|
||||
"skipCi": true,
|
||||
"commitType": "docs"
|
||||
}
|
||||
|
204
.github/workflows/build.yml
vendored
204
.github/workflows/build.yml
vendored
@@ -11,7 +11,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Installing Node
|
||||
uses: actions/setup-node@v3.5.1
|
||||
uses: actions/setup-node@v3.7.0
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
@@ -47,7 +47,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Installing Node
|
||||
uses: actions/setup-node@v3.5.1
|
||||
uses: actions/setup-node@v3.7.0
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
@@ -86,6 +86,7 @@ jobs:
|
||||
KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
||||
CSC_LINK: ${{ secrets.CSC_LINK }}
|
||||
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
APPSTORE_USERNAME: ${{ secrets.APPSTORE_USERNAME }}
|
||||
APPSTORE_PASSWORD: ${{ secrets.APPSTORE_PASSWORD }}
|
||||
USE_HARD_LINKS: false
|
||||
@@ -127,11 +128,25 @@ jobs:
|
||||
path: artifact-zip
|
||||
|
||||
Linux-Build:
|
||||
runs-on: ubuntu-18.04 # build against an older glibc for compatibility
|
||||
runs-on: ubuntu-20.04
|
||||
needs: Lint
|
||||
strategy:
|
||||
matrix:
|
||||
build-arch: [ x64, arm64, armv7l ]
|
||||
include:
|
||||
- build-arch: x64
|
||||
arch: amd64
|
||||
- build-arch: arm64
|
||||
arch: arm64
|
||||
triplet: aarch64-linux-gnu-
|
||||
- build-arch: arm
|
||||
arch: armhf
|
||||
triplet: arm-linux-gnueabihf-
|
||||
env:
|
||||
CC: ${{matrix.triplet}}gcc
|
||||
CXX: ${{matrix.triplet}}g++
|
||||
ARCH: ${{matrix.build-arch}}
|
||||
npm_config_arch: ${{matrix.build-arch}}
|
||||
npm_config_target_arch: ${{matrix.build-arch}}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
@@ -139,35 +154,66 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up multiarch/qemu-user-static
|
||||
run: docker run --rm --privileged multiarch/qemu-user-static:register --reset
|
||||
if: matrix.build-arch != 'x64'
|
||||
|
||||
- name: Install Node (x64)
|
||||
uses: actions/setup-node@v3.5.1
|
||||
- name: Install Node
|
||||
uses: actions/setup-node@v3.7.0
|
||||
with:
|
||||
node-version: 16
|
||||
if: matrix.build-arch == 'x64'
|
||||
node-version: 18
|
||||
|
||||
- name: Install deps (x64)
|
||||
- name: Install deps (amd64)
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install libarchive-tools zsh
|
||||
|
||||
- name: Install npm_modules (amd64)
|
||||
run: |
|
||||
npm i -g yarn
|
||||
yarn --network-timeout 1000000
|
||||
if: matrix.build-arch == 'x64'
|
||||
|
||||
- name: Webpack (x64)
|
||||
run: yarn run build
|
||||
if: matrix.build-arch == 'x64'
|
||||
- name: Setup Crossbuild (${{matrix.arch}})
|
||||
run: |
|
||||
sudo apt-get update -y && sudo apt-get install schroot sbuild debootstrap -y
|
||||
sudo debootstrap --include=git,curl,gnupg,ca-certificates,crossbuild-essential-${{matrix.arch}},python-dev,python3-dev,libarchive-tools,cmake --variant=buildd --exclude=snapd --components=main,restricted,universe,multiverse --extractor=dpkg-deb bionic /build-chroot/
|
||||
echo 'deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu bionic main restricted universe multiverse' | sudo tee /build-chroot/etc/apt/sources.list >/dev/null
|
||||
echo 'deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports bionic main restricted universe multiverse' | sudo tee -a /build-chroot/etc/apt/sources.list >/dev/null
|
||||
curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor | sudo tee /build-chroot/etc/apt/trusted.gpg.d/nodesource.gpg >/dev/null
|
||||
echo 'deb http://deb.nodesource.com/node_16.x bionic main' | sudo tee /build-chroot/etc/apt/sources.list.d/nodesource.list >/dev/null
|
||||
echo "[build-chroot]
|
||||
description=Ubuntu 18.04 Build chroot
|
||||
type=directory
|
||||
directory=/build-chroot
|
||||
root-groups=root,sudo
|
||||
profile=buildd
|
||||
personality=linux
|
||||
union-type=overlay" | sudo tee /etc/schroot/chroot.d/build-chroot.pref >/dev/null
|
||||
echo "/home /home none rw,bind 0 0" | sudo tee -a /etc/schroot/buildd/fstab >/dev/null
|
||||
|
||||
- name: Prepackage plugins (x64)
|
||||
if: matrix.build-arch != 'x64'
|
||||
|
||||
- name: Install node_modules & CrossBuild native modules for ${{matrix.arch}}
|
||||
run: |
|
||||
sudo schroot -c build-chroot -u root -- bash -c "apt-get update -y
|
||||
dpkg --add-architecture ${{matrix.arch}}
|
||||
apt-get install -y nodejs libfontconfig-dev:${{matrix.arch}} libsecret-1-dev:${{matrix.arch}} libnss3:${{matrix.arch}} libatk1.0-0:${{matrix.arch}} libatk-bridge2.0-0:${{matrix.arch}} libgdk-pixbuf2.0-0:${{matrix.arch}} libgtk-3-0:${{matrix.arch}} libgbm1:${{matrix.arch}}
|
||||
export CC=${{matrix.triplet}}gcc CXX=${{matrix.triplet}}g++ LD=${{matrix.triplet}}ld
|
||||
if [[ ${{matrix.arch}} == 'arm64' ]]; then
|
||||
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/aarch64-linux-gnu/pkgconfig/
|
||||
elif [[ ${{matrix.arch}} == 'armhf' ]]; then
|
||||
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/arm-linux-gnueabihf/pkgconfig/
|
||||
fi
|
||||
export ARCH=${{matrix.build-arch}} npm_config_arch=${{matrix.build-arch}} npm_config_target_arch=${{matrix.build-arch}}
|
||||
npm i -g yarn
|
||||
yarn --network-timeout 1000000 --arch=${{matrix.build-arch}} --target_arch=${{matrix.build-arch}}"
|
||||
if: matrix.build-arch != 'x64'
|
||||
|
||||
- name: Webpack (${{matrix.arch}})
|
||||
run: yarn run build --arch=${{matrix.build-arch}} --target_arch=${{matrix.build-arch}}
|
||||
|
||||
- name: Prepackage plugins (${{matrix.arch}})
|
||||
run: scripts/prepackage-plugins.mjs
|
||||
if: ${{matrix.build-arch == 'x64'}}
|
||||
|
||||
- name: Build packages (x64)
|
||||
- name: Build packages (${{matrix.arch}})
|
||||
run: scripts/build-linux.mjs
|
||||
if: ${{matrix.build-arch == 'x64'}}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
||||
@@ -178,54 +224,54 @@ jobs:
|
||||
run: zsh -c 'tar czf tabby-web.tar.gz (tabby-*|web)/dist'
|
||||
if: matrix.build-arch == 'x64'
|
||||
|
||||
- name: Install deps and Build (arm64)
|
||||
uses: docker://multiarch/ubuntu-core:arm64-bionic
|
||||
with:
|
||||
args: >
|
||||
bash -c
|
||||
"apt update && apt install curl lsb-release gnupg -y &&
|
||||
curl -fsSL https://deb.nodesource.com/setup_16.x | bash - &&
|
||||
apt install make build-essential git ruby libarchive-tools nodejs rpm libsecret-1-dev libfontconfig1-dev -y &&
|
||||
git config --global --add safe.directory /github/workspace &&
|
||||
gem install public_suffix -v 4.0.7 &&
|
||||
gem install fpm --no-document &&
|
||||
npm i -g yarn &&
|
||||
cd /github/workspace &&
|
||||
yarn --network-timeout 1000000 &&
|
||||
yarn run build &&
|
||||
scripts/prepackage-plugins.mjs &&
|
||||
USE_SYSTEM_FPM=true scripts/build-linux.mjs"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
||||
USE_HARD_LINKS: false
|
||||
if: matrix.build-arch == 'arm64' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags')
|
||||
# - name: Install deps and Build (arm64)
|
||||
# uses: docker://multiarch/ubuntu-core:arm64-bionic
|
||||
# with:
|
||||
# args: >
|
||||
# bash -c
|
||||
# "apt update && apt install curl lsb-release gnupg -y &&
|
||||
# curl -fsSL https://deb.nodesource.com/setup_16.x | bash - &&
|
||||
# apt install make build-essential git ruby libarchive-tools nodejs rpm libsecret-1-dev libfontconfig1-dev -y &&
|
||||
# git config --global --add safe.directory /github/workspace &&
|
||||
# gem install public_suffix -v 4.0.7 &&
|
||||
# gem install fpm --no-document &&
|
||||
# npm i -g yarn &&
|
||||
# cd /github/workspace &&
|
||||
# yarn --network-timeout 1000000 &&
|
||||
# yarn run build &&
|
||||
# scripts/prepackage-plugins.mjs &&
|
||||
# USE_SYSTEM_FPM=true scripts/build-linux.mjs"
|
||||
# env:
|
||||
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
||||
# USE_HARD_LINKS: false
|
||||
# if: matrix.build-arch == 'arm64' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags')
|
||||
|
||||
- name: Install deps and Build (armv7l)
|
||||
uses: docker://multiarch/ubuntu-core:armhf-bionic
|
||||
with:
|
||||
args: >
|
||||
bash -c
|
||||
"apt update && apt install curl lsb-release gnupg -y &&
|
||||
curl -fsSL https://deb.nodesource.com/setup_16.x | bash - &&
|
||||
apt install make build-essential git ruby libarchive-tools nodejs rpm libsecret-1-dev libfontconfig1-dev -y &&
|
||||
git config --global --add safe.directory /github/workspace &&
|
||||
gem install public_suffix -v 4.0.7 &&
|
||||
gem install fpm --no-document &&
|
||||
npm i -g yarn &&
|
||||
cd /github/workspace &&
|
||||
sed -i '/ \"electron\":/c\ \"electron\": \"17.0.0\",' package.json &&
|
||||
yarn --network-timeout 1000000 &&
|
||||
yarn run build &&
|
||||
scripts/prepackage-plugins.mjs &&
|
||||
USE_SYSTEM_FPM=true scripts/build-linux.mjs"
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
||||
USE_HARD_LINKS: false
|
||||
if: matrix.build-arch == 'armv7l' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags')
|
||||
# - name: Install deps and Build (armv7l)
|
||||
# uses: docker://multiarch/ubuntu-core:armhf-bionic
|
||||
# with:
|
||||
# args: >
|
||||
# bash -c
|
||||
# "apt update && apt install curl lsb-release gnupg -y &&
|
||||
# curl -fsSL https://deb.nodesource.com/setup_16.x | bash - &&
|
||||
# apt install make build-essential git ruby libarchive-tools nodejs rpm libsecret-1-dev libfontconfig1-dev -y &&
|
||||
# git config --global --add safe.directory /github/workspace &&
|
||||
# gem install public_suffix -v 4.0.7 &&
|
||||
# gem install fpm --no-document &&
|
||||
# npm i -g yarn &&
|
||||
# cd /github/workspace &&
|
||||
# sed -i '/ \"electron\":/c\ \"electron\": \"17.0.0\",' package.json &&
|
||||
# yarn --network-timeout 1000000 &&
|
||||
# yarn run build &&
|
||||
# scripts/prepackage-plugins.mjs &&
|
||||
# USE_SYSTEM_FPM=true scripts/build-linux.mjs"
|
||||
# env:
|
||||
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
||||
# USE_HARD_LINKS: false
|
||||
# if: matrix.build-arch == 'arm' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags')
|
||||
|
||||
- name: Upload symbols
|
||||
- name: Upload symbols (amd64 only)
|
||||
run: |
|
||||
sudo npm install -g @sentry/cli --unsafe-perm
|
||||
./scripts/sentry-upload.mjs
|
||||
@@ -245,31 +291,37 @@ jobs:
|
||||
dir: 'dist'
|
||||
|
||||
- uses: actions/upload-artifact@master
|
||||
name: Upload DEB
|
||||
name: Upload AppImage (${{matrix.arch}})
|
||||
with:
|
||||
name: Linux DEB (${{matrix.build-arch}})
|
||||
name: Linux AppImage (${{matrix.arch}})
|
||||
path: dist/*.AppImage
|
||||
|
||||
- uses: actions/upload-artifact@master
|
||||
name: Upload DEB (${{matrix.arch}})
|
||||
with:
|
||||
name: Linux DEB (${{matrix.arch}})
|
||||
path: dist/*.deb
|
||||
|
||||
- uses: actions/upload-artifact@master
|
||||
name: Upload RPM
|
||||
name: Upload RPM (${{matrix.arch}})
|
||||
with:
|
||||
name: Linux RPM (${{matrix.build-arch}})
|
||||
name: Linux RPM (${{matrix.arch}})
|
||||
path: dist/*.rpm
|
||||
|
||||
- uses: actions/upload-artifact@master
|
||||
name: Upload Pacman Package
|
||||
name: Upload Pacman Package (${{matrix.arch}})
|
||||
with:
|
||||
name: Linux Pacman (${{matrix.build-arch}})
|
||||
name: Linux Pacman (${{matrix.arch}})
|
||||
path: dist/*.pacman
|
||||
|
||||
- uses: actions/upload-artifact@master
|
||||
name: Upload Linux tarball
|
||||
name: Upload Linux tarball (${{matrix.arch}})
|
||||
with:
|
||||
name: Linux tarball (${{matrix.build-arch}})
|
||||
name: Linux tarball (${{matrix.arch}})
|
||||
path: dist/*.tar.gz
|
||||
|
||||
- uses: actions/upload-artifact@master
|
||||
name: Upload web tarball
|
||||
name: Upload web tarball (amd64 only)
|
||||
with:
|
||||
name: Web tarball
|
||||
path: tabby-web.tar.gz
|
||||
@@ -293,7 +345,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Installing Node
|
||||
uses: actions/setup-node@v3.5.1
|
||||
uses: actions/setup-node@v3.7.0
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
|
2
.github/workflows/docs.yml
vendored
2
.github/workflows/docs.yml
vendored
@@ -12,7 +12,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Installing Node
|
||||
uses: actions/setup-node@v3.5.1
|
||||
uses: actions/setup-node@v3.7.0
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
|
10
HACKING.md
10
HACKING.md
@@ -17,8 +17,6 @@ First, from within the `tabby` directory install the dependencies via yarn:
|
||||
yarn
|
||||
```
|
||||
|
||||
**Note: For compiling for Linux armv7l, you need to downgrade electron to 17.0.0 in package.json present in root directory of tabby source**
|
||||
|
||||
```
|
||||
# Linux (Debian/Ubuntu here as an example)
|
||||
sudo apt install libfontconfig-dev libsecret-1-dev libarchive-tools libnss3 libatk1.0-0 libatk-bridge2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm1 cmake
|
||||
@@ -42,13 +40,13 @@ yarn start
|
||||
To build an installer, first complete a "normal" build as described above and then run:
|
||||
|
||||
```
|
||||
node scripts/prepackage-plugins.js
|
||||
node scripts/prepackage-plugins.mjs
|
||||
|
||||
node scripts/build-windows.js
|
||||
node scripts/build-windows.mjs
|
||||
# or
|
||||
node scripts/build-linux.js
|
||||
node scripts/build-linux.mjs
|
||||
# or
|
||||
node scripts/build-macos.js
|
||||
node scripts/build-macos.mjs
|
||||
```
|
||||
|
||||
The artifacts will be produced in the `dist` folder.
|
||||
|
@@ -313,6 +313,18 @@ 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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -315,6 +315,18 @@ 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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -312,6 +312,18 @@ 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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -308,6 +308,18 @@ 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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -11,17 +11,24 @@
|
||||
</a>
|
||||
</p>
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
> 👋 リモート環境の管理に困ってませんか? [WarpgateというSSH/HTTP/MySQL向けの便利な踏み台サーバー](https://github.com/warp-tech/warpgate)も作ってます。Tabbyとも相性ばっちりなので良かったらお試しください。
|
||||
|
||||
|
||||
----
|
||||
|
||||
### ダウンロード:
|
||||
|
||||
* [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)
|
||||
* [最新のリリース](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)
|
||||
|
||||
<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>
|
||||
|
||||
----
|
||||
@@ -40,7 +47,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 -->
|
||||
|
||||
@@ -87,7 +94,7 @@
|
||||
* SSH2クライアントと接続マネージャー
|
||||
* X11とポートフォワーディング
|
||||
* 自動ジャンプサーバー管理
|
||||
* エージェント転送(PageantとWindows標準OpenSSHエージェントを含む)
|
||||
* エージェント転送(PageantとWindows標準OpenSSHエージェントを含む)
|
||||
* ログインスクリプト
|
||||
|
||||
<a name="serial"></a>
|
||||
@@ -104,7 +111,7 @@
|
||||
|
||||
# ポータブル機能
|
||||
|
||||
Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォルダを作成すれば、ポータブルアプリケーションとして実行することができます。
|
||||
Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォルダを作成すれば、ポータブルアプリとして実行することができます。
|
||||
|
||||
<a name="plugins"></a>
|
||||
|
||||
@@ -116,10 +123,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>
|
||||
|
||||
@@ -137,17 +144,21 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
|
||||
|
||||
[**packagecloud**](https://packagecloud.io)は、Debian/RPMリポジトリのホスティングを無償で提供しています
|
||||
|
||||
[](https://keygen.sh/?via=eugene)
|
||||
|
||||
[**keygen**](https://keygen.sh/?via=eugene)は、自動リリース機能および自動更新機能のホスティングを無償で提供しています
|
||||
|
||||
<a name="contributing"></a>
|
||||
# コントリビュート
|
||||
|
||||
プルリクエストやプラグインは大歓迎です!
|
||||
|
||||
プロジェクトの構成や、ごく簡単なプラグイン開発のチュートリアルについては、[HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md)及び、[API docs](https://docs.tabby.sh/)を参照してください。
|
||||
プロジェクトの構成や、非常に簡単なプラグイン開発のチュートリアルについては、[HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md)および、[API docs](https://docs.tabby.sh/)を参照してください。
|
||||
|
||||
---
|
||||
<a name="contributors"></a>
|
||||
|
||||
この素晴らしい人たち([emoji key](https://allcontributors.org/docs/en/emoji-key))に感謝します:
|
||||
以下の素晴らしい方々([emoji key](https://allcontributors.org/docs/en/emoji-key))に感謝いたします:
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||
<!-- prettier-ignore-start -->
|
||||
@@ -312,6 +323,18 @@ 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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -321,4 +344,4 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
|
||||
|
||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||
|
||||
このプロジェクトは[all-contributors](https://github.com/all-contributors/all-contributors)の仕様に準拠しています。どのような形の貢献でも歓迎します!
|
||||
このプロジェクトは[all-contributors](https://github.com/all-contributors/all-contributors)の仕様に準拠しています。どのような形の貢献でも歓迎いたします!
|
||||
|
@@ -302,6 +302,18 @@ 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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
16
README.md
16
README.md
@@ -16,6 +16,8 @@
|
||||
|
||||
> 👋 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)!
|
||||
|
||||
|
||||
----
|
||||
|
||||
@@ -32,7 +34,7 @@ This README is also available in: <a href="./README.es-ES.md">:es: Spanish</a>
|
||||
|
||||
----
|
||||
|
||||
[**Tabby**](https://tabby.sh) (formerly **Terminus**) is a highly configurable terminal emulator, SSH and serial client for Windows, macOS and Linux
|
||||
[**Tabby**](https://tabby.sh) (formerly **Terminus**) is a highly configurable terminal emulator, SSH and serial client for Windows 10, macOS and Linux
|
||||
|
||||
* Integrated SSH and Telnet client and connection manager
|
||||
* Integrated serial terminal
|
||||
@@ -322,6 +324,18 @@ 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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -316,6 +316,18 @@ 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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -308,6 +308,18 @@ 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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -307,6 +307,18 @@
|
||||
<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>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import * as nodePTY from '@tabby-gang/node-pty'
|
||||
import * as nodePTY from 'node-pty'
|
||||
import { v4 as uuidv4 } from 'uuid'
|
||||
import { ipcMain } from 'electron'
|
||||
import { Application } from './app'
|
||||
|
@@ -92,8 +92,11 @@ export class Window {
|
||||
if (this.configStore.appearance?.frame === 'native') {
|
||||
bwOptions.frame = true
|
||||
} else {
|
||||
if (process.platform === 'darwin') {
|
||||
bwOptions.titleBarStyle = 'hidden'
|
||||
bwOptions.titleBarStyle = 'hidden'
|
||||
if (process.platform === 'win32') {
|
||||
bwOptions.titleBarOverlay = {
|
||||
color: '#00000000',
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,7 +128,11 @@ export class Window {
|
||||
})
|
||||
|
||||
this.window.on('blur', () => {
|
||||
if ((this.configStore.appearance?.dock ?? 'off') !== 'off' && this.configStore.appearance?.dockHideOnBlur) {
|
||||
if (
|
||||
(this.configStore.appearance?.dock ?? 'off') !== 'off' &&
|
||||
this.configStore.appearance?.dockHideOnBlur &&
|
||||
!BrowserWindow.getFocusedWindow()
|
||||
) {
|
||||
this.hide()
|
||||
}
|
||||
})
|
||||
@@ -380,6 +387,21 @@ export class Window {
|
||||
this.setVibrancy(enabled, type)
|
||||
})
|
||||
|
||||
ipcMain.on('window-set-window-controls-color', (event, theme) => {
|
||||
if (!this.window || event.sender !== this.window.webContents) {
|
||||
return
|
||||
}
|
||||
|
||||
const symbolColor: string = theme.foreground
|
||||
|
||||
this.window.setTitleBarOverlay(
|
||||
{
|
||||
symbolColor: symbolColor,
|
||||
height: 32,
|
||||
},
|
||||
)
|
||||
})
|
||||
|
||||
ipcMain.on('window-set-title', (event, title) => {
|
||||
if (!this.window || event.sender !== this.window.webContents) {
|
||||
return
|
||||
@@ -438,7 +460,7 @@ export class Window {
|
||||
this.window.on('resize', onBoundsChange)
|
||||
|
||||
ipcMain.on('window-set-traffic-light-position', (_event, x, y) => {
|
||||
this.window.setTrafficLightPosition({ x, y })
|
||||
this.window.setWindowButtonPosition({ x, y })
|
||||
})
|
||||
|
||||
ipcMain.on('window-set-opacity', (_event, opacity) => {
|
||||
|
@@ -15,8 +15,8 @@
|
||||
"watch": "webpack --progress --color --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@electron/remote": "2.0.8",
|
||||
"@tabby-gang/node-pty": "^0.11.0-beta.203",
|
||||
"@electron/remote": "2.0.10",
|
||||
"node-pty": "^1.0",
|
||||
"any-promise": "^1.3.0",
|
||||
"electron-config": "2.0.0",
|
||||
"electron-debug": "^3.2.0",
|
||||
@@ -32,24 +32,24 @@
|
||||
"rxjs": "^7.5.7",
|
||||
"source-map-support": "^0.5.20",
|
||||
"v8-compile-cache": "^2.3.0",
|
||||
"yargs": "^17.3.1"
|
||||
"yargs": "^17.7.2"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@tabby-gang/windows-blurbehind": "^3.0.0",
|
||||
"macos-native-processlist": "^2.1.0",
|
||||
"patch-package": "^6.5.0",
|
||||
"serialport": "10.5.0",
|
||||
"serialport": "11.0.1",
|
||||
"serialport-binding-webserialapi": "^1.0.3",
|
||||
"windows-native-registry": "^3.2.1",
|
||||
"windows-process-tree": "^0.3.4"
|
||||
"windows-process-tree": "^0.4.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@ngx-translate/core": "^14.0.0",
|
||||
"@types/mz": "2.7.4",
|
||||
"@types/node": "18.11.19",
|
||||
"atomically": "^1.7.0",
|
||||
"@types/node": "20.3.1",
|
||||
"atomically": "^2.0.2",
|
||||
"filesize": "^9",
|
||||
"ngx-filesize": "^3.0.1"
|
||||
"ngx-filesize": "^3.0.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"tabby-community-color-schemes": "*",
|
||||
|
@@ -4,4 +4,6 @@ export const PLUGIN_BLACKLIST = [
|
||||
'terminus-clickable-links', // now bundled with Tabby
|
||||
'tabby-clickable-links', // now bundled with Tabby
|
||||
'terminus-clickable-ips', // broken, functionality now bundled with Tabby
|
||||
'terminus-elastic-quick-commands', // broken and abandoned, fork of quick-commands
|
||||
'terminus-elastic-quick-cmds', // broken and abandoned, fork of quick-commands
|
||||
]
|
||||
|
@@ -27,6 +27,8 @@ 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'),
|
||||
@@ -90,12 +92,43 @@ export function initModuleLookup (userPluginsPath: string): void {
|
||||
})
|
||||
}
|
||||
|
||||
export async function findPlugins (): Promise<PluginInfo[]> {
|
||||
const paths = nodeModule.globalPaths
|
||||
let foundPlugins: PluginInfo[] = []
|
||||
const PLUGIN_PREFIX = 'tabby-'
|
||||
const LEGACY_PLUGIN_PREFIX = 'terminus-'
|
||||
|
||||
async function getCandidateLocationsInPluginDir (pluginDir: any): Promise<{ pluginDir: string, packageName: string }[]> {
|
||||
const candidateLocations: { pluginDir: string, packageName: string }[] = []
|
||||
const PREFIX = 'tabby-'
|
||||
const LEGACY_PREFIX = 'terminus-'
|
||||
|
||||
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 processedPaths = []
|
||||
|
||||
@@ -106,69 +139,84 @@ export async function findPlugins (): Promise<PluginInfo[]> {
|
||||
processedPaths.push(pluginDir)
|
||||
|
||||
pluginDir = normalizePath(pluginDir)
|
||||
if (!await fs.exists(pluginDir)) {
|
||||
continue
|
||||
}
|
||||
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 })
|
||||
}
|
||||
}
|
||||
|
||||
candidateLocationsPromises.push(getCandidateLocationsInPluginDir(pluginDir))
|
||||
|
||||
}
|
||||
|
||||
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 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
|
||||
}
|
||||
|
||||
const name = packageName.startsWith(PREFIX) ? packageName.substring(PREFIX.length) : packageName.substring(LEGACY_PREFIX.length)
|
||||
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,
|
||||
}
|
||||
} 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) {
|
||||
|
||||
if (builtinModules.includes(packageName) && pluginDir !== builtinPluginsPath) {
|
||||
continue
|
||||
}
|
||||
|
||||
console.log(`Found ${name} in ${pluginDir}`)
|
||||
foundPluginsPromises.push(parsePluginInfo(pluginDir, packageName))
|
||||
}
|
||||
|
||||
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
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
foundPlugins.push(pluginInfo)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,26 +227,36 @@ export async function findPlugins (): Promise<PluginInfo[]> {
|
||||
|
||||
export async function loadPlugins (foundPlugins: PluginInfo[], progress: ProgressCallback): Promise<any[]> {
|
||||
const plugins: any[] = []
|
||||
progress(0, 1)
|
||||
const pluginsPromises: Promise<any>[] = []
|
||||
|
||||
let index = 0
|
||||
for (const foundPlugin of foundPlugins) {
|
||||
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
|
||||
}
|
||||
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)
|
||||
}
|
||||
const setProgress = function () {
|
||||
index++
|
||||
progress(index, foundPlugins.length)
|
||||
}
|
||||
|
||||
progress(0, 1)
|
||||
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)
|
||||
}
|
||||
setProgress()
|
||||
setTimeout(x, 50)
|
||||
}))
|
||||
}
|
||||
await Promise.all(pluginsPromises)
|
||||
|
||||
progress(1, 1)
|
||||
return plugins
|
||||
}
|
||||
|
@@ -47,7 +47,7 @@ const config = {
|
||||
mz: 'commonjs mz',
|
||||
npm: 'commonjs npm',
|
||||
'node:os': 'commonjs os',
|
||||
'@tabby-gang/node-pty': 'commonjs @tabby-gang/node-pty',
|
||||
'node-pty': 'commonjs node-pty',
|
||||
path: 'commonjs path',
|
||||
util: 'commonjs util',
|
||||
'source-map-support': 'commonjs source-map-support',
|
||||
|
311
app/yarn.lock
311
app/yarn.lock
@@ -2,10 +2,10 @@
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@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==
|
||||
"@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==
|
||||
|
||||
"@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@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==
|
||||
"@serialport/bindings-cpp@11.0.3":
|
||||
version "11.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/bindings-cpp/-/bindings-cpp-11.0.3.tgz#ab4d4826ef657e326b6c99d6b8a113d834378a93"
|
||||
integrity sha512-xgNDJ7pHHZCJMoDsEH+D8q5CV+V3RGN4/jLEG9SQ7q6kh+o03axV0l/upPHZ0HW4tTXpGgqPIGbXOTrD4RGQQA==
|
||||
dependencies:
|
||||
"@serialport/bindings-interface" "1.2.2"
|
||||
"@serialport/parser-readline" "^10.2.1"
|
||||
debug "^4.3.2"
|
||||
node-addon-api "^5.0.0"
|
||||
node-gyp-build "^4.3.0"
|
||||
"@serialport/parser-readline" "11.0.0"
|
||||
debug "4.3.4"
|
||||
node-addon-api "6.1.0"
|
||||
node-gyp-build "4.6.0"
|
||||
|
||||
"@serialport/bindings-interface@1.2.2":
|
||||
version "1.2.2"
|
||||
@@ -59,65 +59,77 @@
|
||||
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@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-byte-length@11.0.1":
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-byte-length/-/parser-byte-length-11.0.1.tgz#26e4f3b2d66aaac0859b18a57c648d0eec78392a"
|
||||
integrity sha512-UsffR5b3NHwhjJzsWv5fZMkoq3wGNyUcRTA9jlu02w+2kMlBRJPzlPVB5szVX0VWUEqkCg+3VaU2XWuYr+uAUA==
|
||||
|
||||
"@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-cctalk@11.0.1":
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-cctalk/-/parser-cctalk-11.0.1.tgz#70c5ccc8fc5ebbe5c317005791155d3b2812efa6"
|
||||
integrity sha512-klzVQfRcC1m0SVDV2Dy9hHfwweO2/mUMUyuXK04FRkKHy5/AdETmk9KTVVVVfpDCSysvHoyQPwiDFq8ddwX3cQ==
|
||||
|
||||
"@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-delimiter@11.0.1":
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-delimiter/-/parser-delimiter-11.0.1.tgz#c0bcc24d8060c6b352cbe6003ebe95671ad32221"
|
||||
integrity sha512-NAsYa3OFt2xEnj/+0BRkQP2qkRNbXBPEq6uFJEdNdzcTSF+BTRXkoIRrWBq3N6koovPqW6lnbxc/iJYe5AX/2Q==
|
||||
|
||||
"@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-inter-byte-timeout@11.0.1":
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-11.0.1.tgz#ed6d939eeb3bec94579fb3628dc6dcd0c9a3dd21"
|
||||
integrity sha512-PEFV9dSpW+ptH1rLhdB9KgE+rbJ/FvQiZz0mx+4jkv/Po4g3PNsEEMXfMW0aQVSFVsmitvmE0jHlhGjLv8GQEg==
|
||||
|
||||
"@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==
|
||||
"@serialport/parser-packet-length@11.0.1":
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-packet-length/-/parser-packet-length-11.0.1.tgz#9d7982a6eeaf9a5bdfe642ceb287f171ab2965b7"
|
||||
integrity sha512-KwPu8dsAI+eN4fnUS1vVmrOpUtBK4p9L9cHhwn5ZmfcvwvZMHp/J+IEu7xH0g5aM1/8QEoaql26BQP+sZ71NQQ==
|
||||
|
||||
"@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" "10.5.0"
|
||||
"@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-readline@11.0.1":
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-readline/-/parser-readline-11.0.1.tgz#e85805ae803c2dc507eefa390abec6a67ceef313"
|
||||
integrity sha512-wkJ3EI733+yhbi7eBWzs/qn8+cfIBcYQjfrILPNqslAy6VlgdKw+pHoblDFmg78GN0TqGUDSWlTJ65oLEPVp5Q==
|
||||
dependencies:
|
||||
"@serialport/parser-delimiter" "11.0.1"
|
||||
|
||||
"@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-ready@11.0.1":
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-ready/-/parser-ready-11.0.1.tgz#bba01283a121880641e43c27193e6708fef2907c"
|
||||
integrity sha512-v/bvlgKhrNt+SVLSqlfXCO1HEinfRRMGnzqbpdVCgu2SiWIEenCLjs51JisKVYQoQFcXdP/EHZnzm7NPXHDlAg==
|
||||
|
||||
"@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-regex@11.0.1":
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-regex/-/parser-regex-11.0.1.tgz#7833ca6029c8c58eb39dd6fe984756cf09d769b7"
|
||||
integrity sha512-Lf3k7qibYqZ0+/wX3UA8fRng3WtQ+UyLpjQhG1COs6OBSq5/I5tYXczfhlrbA0gHo1qzgzr2V2t7m6FoBSc81Q==
|
||||
|
||||
"@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-slip-encoder@11.0.1":
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-slip-encoder/-/parser-slip-encoder-11.0.1.tgz#4ba0c335627e3d1203279a5f8a4c1af0c829b7fe"
|
||||
integrity sha512-l4mXsAGzpmPO7+uqKJqtPDW643irfnGEWbiy34FoYvuOs8n0SmiMtgQZFAtvlTNQCRWE2tykF/WG6K/McJthDw==
|
||||
|
||||
"@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==
|
||||
"@serialport/parser-spacepacket@11.0.1":
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/parser-spacepacket/-/parser-spacepacket-11.0.1.tgz#9e1c372f45433afb9a5dbec7b5a298c710b0455b"
|
||||
integrity sha512-Lq7fXoOsLOMo4XEt9HB31zV5LhrteXlsOy2o6r39TfRwU6x8Nou9jQMA9vW0a6yPra5zwsHIaNrA6tDOGj2Ozg==
|
||||
|
||||
"@serialport/stream@11.0.1":
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@serialport/stream/-/stream-11.0.1.tgz#ed40c66d517cfebf7185cd9c37ba0a08e76f88b2"
|
||||
integrity sha512-6pjyKRg8MQuvhGfg36+PF7K5eGNQcEswCSiAg1UPilqqFS8X1QnaiSCn5UFp/hCN+pAtlFjkOi0ztvtmSI7n4g==
|
||||
dependencies:
|
||||
"@serialport/bindings-interface" "1.2.2"
|
||||
debug "^4.3.2"
|
||||
debug "4.3.4"
|
||||
|
||||
"@serialport/stream@^9.0.2":
|
||||
version "9.2.4"
|
||||
@@ -126,13 +138,6 @@
|
||||
dependencies:
|
||||
debug "^4.3.2"
|
||||
|
||||
"@tabby-gang/node-pty@^0.11.0-beta.203":
|
||||
version "0.11.0-beta.204"
|
||||
resolved "https://registry.yarnpkg.com/@tabby-gang/node-pty/-/node-pty-0.11.0-beta.204.tgz#80d4393c7a233d3298f47a4755467a246b0099f9"
|
||||
integrity sha512-sNT5Z2MEkEIhToAdVAdZ/lfeQ9UgFE3h2ENlOux+WHBrl1k0BiUEIOd/jh/K3mNAGEfcZ44gNQQ50g5KXTQEmA==
|
||||
dependencies:
|
||||
nan "^2.16.0"
|
||||
|
||||
"@tabby-gang/windows-blurbehind@^3.0.0":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@tabby-gang/windows-blurbehind/-/windows-blurbehind-3.0.0.tgz#48d409c2eb14a12c867b70de5ee4d6769ef45e8f"
|
||||
@@ -147,15 +152,10 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@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@*", "@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@^10.12.18":
|
||||
version "10.17.60"
|
||||
@@ -327,10 +327,13 @@ asynckit@^0.4.0:
|
||||
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz"
|
||||
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
|
||||
|
||||
atomically@^1.7.0:
|
||||
version "1.7.0"
|
||||
resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe"
|
||||
integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==
|
||||
atomically@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/atomically/-/atomically-2.0.2.tgz#e5a6e8021441405b7a1c36d4587e25f7a13545f2"
|
||||
integrity sha512-Xfmb4q5QV7uqTlVdMSTtO5eF4DCHfNOdaPyKlbFShkzeNP+3lj3yjjcbdjSmEY4+pDBKJ9g26aP+ImTe88UHoQ==
|
||||
dependencies:
|
||||
stubborn-fs "^1.2.5"
|
||||
when-exit "^2.0.0"
|
||||
|
||||
aws-sign2@~0.7.0:
|
||||
version "0.7.0"
|
||||
@@ -583,13 +586,13 @@ cliui@^5.0.0:
|
||||
strip-ansi "^5.2.0"
|
||||
wrap-ansi "^5.1.0"
|
||||
|
||||
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==
|
||||
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==
|
||||
dependencies:
|
||||
string-width "^4.2.0"
|
||||
strip-ansi "^6.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
wrap-ansi "^7.0.0"
|
||||
|
||||
clone@^1.0.2:
|
||||
@@ -773,6 +776,13 @@ 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"
|
||||
@@ -780,13 +790,6 @@ 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"
|
||||
@@ -798,9 +801,9 @@ decamelize@^1.1.1, decamelize@^1.2.0:
|
||||
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
|
||||
|
||||
decode-uri-component@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
|
||||
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
|
||||
integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
|
||||
|
||||
decompress-response@^6.0.0:
|
||||
version "6.0.0"
|
||||
@@ -2257,7 +2260,7 @@ mz@^2.7.0:
|
||||
object-assign "^4.0.1"
|
||||
thenify-all "^1.0.0"
|
||||
|
||||
nan@^2.13.2, nan@^2.16.0, "nan@github:jkleinsc/nan#remove_accessor_signature":
|
||||
nan@^2.17.0, "nan@github:jkleinsc/nan#remove_accessor_signature":
|
||||
version "2.16.0"
|
||||
resolved "https://codeload.github.com/jkleinsc/nan/tar.gz/6a2f95a6a2209d8aa7542fb18099fd808a802059"
|
||||
|
||||
@@ -2273,10 +2276,10 @@ native-process-working-directory@^1.0.2:
|
||||
dependencies:
|
||||
node-addon-api "^3.1.0"
|
||||
|
||||
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==
|
||||
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==
|
||||
dependencies:
|
||||
tslib "^2.3.0"
|
||||
|
||||
@@ -2304,16 +2307,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"
|
||||
@@ -2323,10 +2326,10 @@ node-fetch-npm@^2.0.2:
|
||||
json-parse-better-errors "^1.0.0"
|
||||
safe-buffer "^5.1.1"
|
||||
|
||||
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-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@^5.0.2, node-gyp@^5.1.0:
|
||||
version "5.1.1"
|
||||
@@ -2345,6 +2348,13 @@ node-gyp@^5.0.2, node-gyp@^5.1.0:
|
||||
tar "^4.4.12"
|
||||
which "^1.3.1"
|
||||
|
||||
node-pty@^1.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-1.0.0.tgz#7daafc0aca1c4ca3de15c61330373af4af5861fd"
|
||||
integrity sha512-wtBMWWS7dFZm/VgqElrTvtfMq4GzJ6+edFI0Y0zyzygUSZMgZdraDUMUhCIvkjhJjme15qWmbyJbtAx4ot4uZA==
|
||||
dependencies:
|
||||
nan "^2.17.0"
|
||||
|
||||
nopt@^4.0.1, nopt@^4.0.3:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
|
||||
@@ -3004,9 +3014,9 @@ qrcode-terminal@^0.12.0:
|
||||
integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==
|
||||
|
||||
qs@~6.5.2:
|
||||
version "6.5.2"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz"
|
||||
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
|
||||
version "6.5.3"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad"
|
||||
integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
|
||||
|
||||
query-string@^6.8.2:
|
||||
version "6.13.8"
|
||||
@@ -3292,25 +3302,25 @@ serialport-binding-webserialapi@^1.0.3:
|
||||
"@serialport/binding-abstract" "^9.0.2"
|
||||
"@serialport/stream" "^9.0.2"
|
||||
|
||||
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==
|
||||
serialport@11.0.1:
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/serialport/-/serialport-11.0.1.tgz#9c7aad877d38124a938a50f89eaef22c44825eae"
|
||||
integrity sha512-j/ntDuewAkqL6g5wKjwV2RTyLBL9cpob8aRd3yLAViYApTsJoYqRleyuzst0OboNTBjBsoxQ4YKYhuYHi1XViQ==
|
||||
dependencies:
|
||||
"@serialport/binding-mock" "10.2.2"
|
||||
"@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"
|
||||
"@serialport/bindings-cpp" "11.0.3"
|
||||
"@serialport/parser-byte-length" "11.0.1"
|
||||
"@serialport/parser-cctalk" "11.0.1"
|
||||
"@serialport/parser-delimiter" "11.0.1"
|
||||
"@serialport/parser-inter-byte-timeout" "11.0.1"
|
||||
"@serialport/parser-packet-length" "11.0.1"
|
||||
"@serialport/parser-readline" "11.0.1"
|
||||
"@serialport/parser-ready" "11.0.1"
|
||||
"@serialport/parser-regex" "11.0.1"
|
||||
"@serialport/parser-slip-encoder" "11.0.1"
|
||||
"@serialport/parser-spacepacket" "11.0.1"
|
||||
"@serialport/stream" "11.0.1"
|
||||
debug "4.3.4"
|
||||
|
||||
set-blocking@^2.0.0, set-blocking@~2.0.0:
|
||||
version "2.0.0"
|
||||
@@ -3609,6 +3619,11 @@ strip-json-comments@~2.0.1:
|
||||
resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz"
|
||||
integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
|
||||
|
||||
stubborn-fs@^1.2.5:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/stubborn-fs/-/stubborn-fs-1.2.5.tgz#e5e244223166921ddf66ed5e062b6b3bf285bfd2"
|
||||
integrity sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==
|
||||
|
||||
supports-color@^5.3.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||
@@ -3728,12 +3743,7 @@ tough-cookie@~2.5.0:
|
||||
psl "^1.1.28"
|
||||
punycode "^2.1.1"
|
||||
|
||||
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:
|
||||
tslib@^2.1.0, tslib@^2.3.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
|
||||
integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
|
||||
@@ -3906,6 +3916,11 @@ wcwidth@^1.0.0:
|
||||
dependencies:
|
||||
defaults "^1.0.3"
|
||||
|
||||
when-exit@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/when-exit/-/when-exit-2.1.0.tgz#0f7b5d7d5f00ea2c4b131b546c444cca2c4ffba7"
|
||||
integrity sha512-H85ulNwUBU1e6PGxkWUDgxnbohSXD++ah6Xw1VHAN7CtypcbZaC4aYjQ+C2PMVaDkURDuOinNAT+Lnz3utWXxQ==
|
||||
|
||||
which-module@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz"
|
||||
@@ -3939,12 +3954,12 @@ windows-native-registry@^3.2.1:
|
||||
dependencies:
|
||||
node-addon-api "^3.1.0"
|
||||
|
||||
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==
|
||||
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==
|
||||
dependencies:
|
||||
nan "^2.13.2"
|
||||
nan "^2.17.0"
|
||||
|
||||
worker-farm@^1.6.0, worker-farm@^1.7.0:
|
||||
version "1.7.0"
|
||||
@@ -4053,10 +4068,10 @@ yargs-parser@^15.0.1:
|
||||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
||||
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@^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@^7.0.0:
|
||||
version "7.0.0"
|
||||
@@ -4082,18 +4097,18 @@ yargs@^14.2.3:
|
||||
y18n "^4.0.0"
|
||||
yargs-parser "^15.0.1"
|
||||
|
||||
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==
|
||||
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==
|
||||
dependencies:
|
||||
cliui "^7.0.2"
|
||||
cliui "^8.0.1"
|
||||
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.0.0"
|
||||
yargs-parser "^21.1.1"
|
||||
|
||||
yargs@^8.0.2:
|
||||
version "8.0.2"
|
||||
|
@@ -1,16 +0,0 @@
|
||||
const fs = require('fs')
|
||||
const signHook = require('./afterSignHook.cjs')
|
||||
|
||||
module.exports = async function (params) {
|
||||
// notarize the app on Mac OS only.
|
||||
if (process.platform !== 'darwin' || !process.env.GITHUB_REF || !process.env.GITHUB_REF.startsWith('refs/tags/')) {
|
||||
return
|
||||
}
|
||||
console.log('afterBuild hook triggered')
|
||||
|
||||
let pkgName = fs.readdirSync('dist').find(x => x.endsWith('.pkg'))
|
||||
signHook({
|
||||
appOutDir: 'dist',
|
||||
_pathOverride: pkgName,
|
||||
})
|
||||
}
|
@@ -1,35 +0,0 @@
|
||||
// See: https://medium.com/@TwitterArchiveEraser/notarize-electron-apps-7a5f988406db
|
||||
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const notarizer = require('electron-notarize')
|
||||
|
||||
module.exports = async function (params) {
|
||||
// notarize the app on Mac OS only.
|
||||
if (process.platform !== 'darwin' || !process.env.GITHUB_REF || !process.env.GITHUB_REF.startsWith('refs/tags/')) {
|
||||
return
|
||||
}
|
||||
console.log('afterSign hook triggered', params)
|
||||
|
||||
let appId = 'org.tabby'
|
||||
|
||||
let appPath = path.join(params.appOutDir, params._pathOverride || `${params.packager.appInfo.productFilename}.app`)
|
||||
if (!fs.existsSync(appPath)) {
|
||||
throw new Error(`Cannot find application at: ${appPath}`)
|
||||
}
|
||||
|
||||
console.log(`Notarizing ${appId} found at ${appPath}`)
|
||||
|
||||
try {
|
||||
await notarizer.notarize({
|
||||
appBundleId: appId,
|
||||
appPath: appPath,
|
||||
appleId: process.env.APPSTORE_USERNAME,
|
||||
appleIdPassword: process.env.APPSTORE_PASSWORD,
|
||||
})
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
|
||||
console.log(`Done notarizing ${appId}`)
|
||||
}
|
@@ -3,8 +3,6 @@ appId: org.tabby
|
||||
productName: Tabby
|
||||
compression: normal
|
||||
npmRebuild: false
|
||||
afterSign: "./build/mac/afterSignHook.cjs"
|
||||
afterAllArtifactBuild: "./build/mac/afterBuildHook.cjs"
|
||||
files:
|
||||
- '**/*'
|
||||
- dist
|
||||
|
448
locale/af-ZA.po
448
locale/af-ZA.po
File diff suppressed because it is too large
Load Diff
223
locale/app.pot
223
locale/app.pot
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
||||
#: tabby-local/src/components/terminalTab.component.ts:112
|
||||
#: tabby-local/src/components/terminalTab.component.ts:111
|
||||
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:20
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27
|
||||
msgid "Acrylic background"
|
||||
msgstr ""
|
||||
|
||||
@@ -116,7 +116,7 @@ msgstr ""
|
||||
msgid "Ask a question"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20
|
||||
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:28
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35
|
||||
msgid "Background type"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14
|
||||
#: tabby-serial/src/components/serialTab.component.ts:112
|
||||
#: tabby-serial/src/components/serialTab.component.ts:111
|
||||
#: 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:32
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39
|
||||
msgid "Blur"
|
||||
msgstr ""
|
||||
|
||||
@@ -188,8 +188,8 @@ msgstr ""
|
||||
msgid "Bold font weight"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:125
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:73
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80
|
||||
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:117
|
||||
#: tabby-local/src/components/terminalTab.component.ts:116
|
||||
#: 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:480
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:484
|
||||
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:175
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182
|
||||
msgid "Close the window after closing the last tab"
|
||||
msgstr ""
|
||||
|
||||
@@ -327,7 +327,7 @@ msgstr ""
|
||||
msgid "Commands"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-core/src/theme.ts:20
|
||||
#: tabby-core/src/theme.ts:21
|
||||
msgid "Compact (legacy)"
|
||||
msgstr ""
|
||||
|
||||
@@ -339,8 +339,8 @@ msgstr ""
|
||||
msgid "Config downloaded"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:109
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:114
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120
|
||||
msgid "Config file"
|
||||
msgstr ""
|
||||
|
||||
@@ -361,7 +361,7 @@ msgstr ""
|
||||
msgid "Connect through a proxy server"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-core/src/index.ts:212
|
||||
#: tabby-core/src/index.ts:214
|
||||
#: 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:66
|
||||
#: tabby-serial/src/components/serialTab.component.ts:65
|
||||
#: tabby-ssh/src/components/sshTab.component.ts:143
|
||||
#: tabby-telnet/src/components/telnetTab.component.ts:72
|
||||
msgid "Connecting"
|
||||
@@ -393,10 +393,14 @@ msgstr ""
|
||||
msgid "Context menu"
|
||||
msgstr ""
|
||||
|
||||
#: 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
|
||||
#: 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/tabContextMenu.ts:30
|
||||
msgid "Copied"
|
||||
msgstr ""
|
||||
@@ -439,7 +443,7 @@ msgstr ""
|
||||
msgid "Create directory"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:83
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90
|
||||
msgid "Current"
|
||||
msgstr ""
|
||||
|
||||
@@ -491,7 +495,7 @@ msgstr ""
|
||||
msgid "Default profile settings"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:118
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124
|
||||
msgid "Defaults"
|
||||
msgstr ""
|
||||
|
||||
@@ -572,11 +576,11 @@ msgstr ""
|
||||
msgid "Disable dynamic tab title"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218
|
||||
msgid "Disable fluent background while dragging"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204
|
||||
msgid "Disable GPU acceleration"
|
||||
msgstr ""
|
||||
|
||||
@@ -599,7 +603,7 @@ msgstr ""
|
||||
msgid "Display images via Sixel escape sequences"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85
|
||||
msgid "Display on"
|
||||
msgstr ""
|
||||
|
||||
@@ -617,23 +621,23 @@ msgstr ""
|
||||
msgid "Do not remember"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97
|
||||
msgid "Dock always on top"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:60
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67
|
||||
msgid "Dock the terminal"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104
|
||||
msgid "Docked terminal size"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111
|
||||
msgid "Docked terminal space"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64
|
||||
msgid "Docking"
|
||||
msgstr ""
|
||||
|
||||
@@ -657,7 +661,7 @@ msgstr ""
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/tabContextMenu.ts:123
|
||||
#: tabby-local/src/tabContextMenu.ts:122
|
||||
msgid "Duplicate as administrator"
|
||||
msgstr ""
|
||||
|
||||
@@ -691,7 +695,7 @@ msgstr ""
|
||||
msgid "Enable automatic installation of updates when they become available."
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211
|
||||
msgid "Enable fluent background option"
|
||||
msgstr ""
|
||||
|
||||
@@ -740,7 +744,7 @@ msgstr ""
|
||||
msgid "Example:"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212
|
||||
msgid "Experimental Windows 10 background style known to cause issues"
|
||||
msgstr ""
|
||||
|
||||
@@ -764,11 +768,11 @@ msgstr ""
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:140
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147
|
||||
msgid "Fixed"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219
|
||||
msgid "Fluent background sometimes causes drag lag"
|
||||
msgstr ""
|
||||
|
||||
@@ -788,7 +792,7 @@ msgstr ""
|
||||
msgid "Focus all tabs at once (broadcast)"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196
|
||||
msgid "Focus follows mouse"
|
||||
msgstr ""
|
||||
|
||||
@@ -828,7 +832,7 @@ msgstr ""
|
||||
msgid "Focus the pane on the right"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-core/src/theme.ts:42
|
||||
#: tabby-core/src/theme.ts:43
|
||||
msgid "Follow the color scheme"
|
||||
msgstr ""
|
||||
|
||||
@@ -836,7 +840,7 @@ msgstr ""
|
||||
msgid "Font"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:183
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190
|
||||
msgid "For keyboard shortcuts"
|
||||
msgstr ""
|
||||
|
||||
@@ -880,7 +884,7 @@ msgstr ""
|
||||
msgid "Frontend"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:54
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61
|
||||
msgid "Full"
|
||||
msgstr ""
|
||||
|
||||
@@ -902,7 +906,7 @@ msgstr ""
|
||||
msgid "Get it from the Tabby Web settings window"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:22
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29
|
||||
msgid "Gives the window a blurred transparent background"
|
||||
msgstr ""
|
||||
|
||||
@@ -918,7 +922,7 @@ msgstr ""
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:194
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201
|
||||
msgid "Hacks"
|
||||
msgstr ""
|
||||
|
||||
@@ -935,23 +939,23 @@ msgstr ""
|
||||
msgid "Hexadecimal"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:169
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176
|
||||
msgid "Hide tab close button"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:151
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158
|
||||
msgid "Hide tab index"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:163
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170
|
||||
msgid "Hide tab options button"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118
|
||||
msgid "Hide window on focus loss"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119
|
||||
msgid "Hides the docked terminal when you click away."
|
||||
msgstr ""
|
||||
|
||||
@@ -997,7 +1001,7 @@ msgstr ""
|
||||
msgid "Icon"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:138
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145
|
||||
msgid "id.tab-width.dynamic"
|
||||
msgstr ""
|
||||
|
||||
@@ -1045,7 +1049,7 @@ msgstr ""
|
||||
msgid "Interactive"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130
|
||||
msgid "Invalid syntax"
|
||||
msgstr ""
|
||||
|
||||
@@ -1075,7 +1079,7 @@ msgstr ""
|
||||
msgid "Keep Alive Interval (Milliseconds)"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:91
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98
|
||||
msgid "Keep docked terminal always on top"
|
||||
msgstr ""
|
||||
|
||||
@@ -1095,7 +1099,7 @@ msgstr ""
|
||||
msgid "Keyboard-interactive auth"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/components/terminalTab.component.ts:116
|
||||
#: tabby-local/src/components/terminalTab.component.ts:115
|
||||
msgid "Kill"
|
||||
msgstr ""
|
||||
|
||||
@@ -1121,8 +1125,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:127
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:69
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76
|
||||
#: tabby-core/src/tabContextMenu.ts:80
|
||||
msgid "Left"
|
||||
msgstr ""
|
||||
@@ -1186,6 +1190,7 @@ 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 ""
|
||||
@@ -1210,7 +1215,7 @@ msgstr ""
|
||||
msgid "Move to \"Ungrouped\""
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197
|
||||
msgid "Moving the mouse over an inactive pane will cause it to activate"
|
||||
msgstr ""
|
||||
|
||||
@@ -1227,11 +1232,11 @@ msgstr ""
|
||||
msgid "Name for the new directory"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:50
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57
|
||||
msgid "Native"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/tabContextMenu.ts:104
|
||||
#: tabby-local/src/tabContextMenu.ts:103
|
||||
msgid "New admin tab"
|
||||
msgstr ""
|
||||
|
||||
@@ -1252,7 +1257,7 @@ msgstr ""
|
||||
msgid "New profile"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/tabContextMenu.ts:31
|
||||
#: tabby-local/src/tabContextMenu.ts:30
|
||||
msgid "New profile name"
|
||||
msgstr ""
|
||||
|
||||
@@ -1265,7 +1270,7 @@ msgid "New tab: {profile}"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/buttonProvider.ts:20
|
||||
#: tabby-local/src/tabContextMenu.ts:78
|
||||
#: tabby-local/src/tabContextMenu.ts:77
|
||||
msgid "New terminal"
|
||||
msgstr ""
|
||||
|
||||
@@ -1273,11 +1278,11 @@ msgstr ""
|
||||
msgid "New window"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/services/dockMenu.service.ts:62
|
||||
#: tabby-electron/src/services/dockMenu.service.ts:62
|
||||
msgid "New Window"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/tabContextMenu.ts:88
|
||||
#: tabby-local/src/tabContextMenu.ts:87
|
||||
msgid "New with profile"
|
||||
msgstr ""
|
||||
|
||||
@@ -1323,7 +1328,7 @@ msgstr ""
|
||||
msgid "Number of lines kept in the buffer"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:65
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72
|
||||
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137
|
||||
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60
|
||||
msgid "Off"
|
||||
@@ -1337,7 +1342,7 @@ msgstr ""
|
||||
msgid "On GitHub Discussions"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46
|
||||
msgid "Opacity"
|
||||
msgstr ""
|
||||
|
||||
@@ -1370,11 +1375,11 @@ msgstr ""
|
||||
msgid "Orange"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/shells/macDefault.ts:25
|
||||
#: tabby-electron/src/shells/macDefault.ts:25
|
||||
msgid "OS default"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/shells/winDefault.ts:43
|
||||
#: tabby-electron/src/shells/winDefault.ts:43
|
||||
msgid "OS default ({name})"
|
||||
msgstr ""
|
||||
|
||||
@@ -1414,14 +1419,18 @@ msgstr ""
|
||||
msgid "Overwrite the local config and start syncing?"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189
|
||||
msgid "Pane resize step"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:179
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186
|
||||
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 ""
|
||||
@@ -1440,7 +1449,7 @@ msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:479
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:483
|
||||
#: tabby-terminal/src/tabContextMenu.ts:35
|
||||
msgid "Paste"
|
||||
msgstr ""
|
||||
@@ -1453,7 +1462,7 @@ msgstr ""
|
||||
msgid "Paste if no selection, else copy"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:486
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:490
|
||||
msgid "Paste multiple lines?"
|
||||
msgstr ""
|
||||
|
||||
@@ -1482,7 +1491,7 @@ msgstr ""
|
||||
msgid "Port"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-serial/src/components/serialTab.component.ts:71
|
||||
#: tabby-serial/src/components/serialTab.component.ts:70
|
||||
msgid "Port opened"
|
||||
msgstr ""
|
||||
|
||||
@@ -1491,7 +1500,7 @@ msgstr ""
|
||||
msgid "Ports"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-serial/src/components/serialTab.component.ts:86
|
||||
#: tabby-serial/src/components/serialTab.component.ts:85
|
||||
#: tabby-ssh/src/components/sshTab.component.ts:172
|
||||
#: tabby-telnet/src/components/telnetTab.component.ts:53
|
||||
msgid "Press any key to reconnect"
|
||||
@@ -1501,7 +1510,7 @@ msgstr ""
|
||||
msgid "Press the key now"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21
|
||||
msgid "Prevents accidental closing"
|
||||
msgstr ""
|
||||
|
||||
@@ -1527,7 +1536,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-local/src/services/dockMenu.service.ts:40
|
||||
#: tabby-electron/src/services/dockMenu.service.ts:40
|
||||
msgid "Profiles"
|
||||
msgstr ""
|
||||
|
||||
@@ -1552,7 +1561,7 @@ msgstr ""
|
||||
msgid "Puts all of Tabby's configuration into the vault"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-core/src/index.ts:211
|
||||
#: tabby-core/src/index.ts:213
|
||||
#: tabby-core/src/services/profiles.service.ts:177
|
||||
msgid "Quick connect"
|
||||
msgstr ""
|
||||
@@ -1572,7 +1581,7 @@ msgstr ""
|
||||
|
||||
#: tabby-core/src/services/profiles.service.ts:120
|
||||
#: tabby-core/src/services/profiles.service.ts:134
|
||||
#: tabby-local/src/services/dockMenu.service.ts:28
|
||||
#: tabby-electron/src/services/dockMenu.service.ts:28
|
||||
msgid "Recent"
|
||||
msgstr ""
|
||||
|
||||
@@ -1659,7 +1668,7 @@ msgstr ""
|
||||
msgid "Restart tab"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:134
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140
|
||||
msgid "Restart the app to apply changes"
|
||||
msgstr ""
|
||||
|
||||
@@ -1671,8 +1680,8 @@ msgstr ""
|
||||
msgid "Reuse session for multiple tabs"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:129
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:71
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78
|
||||
#: tabby-core/src/tabContextMenu.ts:78
|
||||
msgid "Right"
|
||||
msgstr ""
|
||||
@@ -1695,11 +1704,11 @@ msgstr ""
|
||||
msgid "Save a password in the keychain"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:123
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129
|
||||
msgid "Save and apply"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/tabContextMenu.ts:28
|
||||
#: tabby-local/src/tabContextMenu.ts:27
|
||||
msgid "Save as profile"
|
||||
msgstr ""
|
||||
|
||||
@@ -1707,7 +1716,7 @@ msgstr ""
|
||||
msgid "Save layout as profile"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/tabContextMenu.ts:49
|
||||
#: tabby-local/src/tabContextMenu.ts:48
|
||||
msgid "Saved"
|
||||
msgstr ""
|
||||
|
||||
@@ -1781,7 +1790,7 @@ msgstr ""
|
||||
msgid "Select file storage"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-core/src/index.ts:223
|
||||
#: tabby-core/src/index.ts:225
|
||||
msgid "Select profile"
|
||||
msgstr ""
|
||||
|
||||
@@ -1845,7 +1854,7 @@ msgstr ""
|
||||
msgid "Shell"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:551
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:555
|
||||
msgid "Shell does not support current path detection"
|
||||
msgstr ""
|
||||
|
||||
@@ -1869,11 +1878,11 @@ msgstr ""
|
||||
msgid "Show command selector"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:126
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132
|
||||
msgid "Show config file"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:125
|
||||
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131
|
||||
msgid "Show defaults"
|
||||
msgstr ""
|
||||
|
||||
@@ -1885,7 +1894,7 @@ msgstr ""
|
||||
msgid "Show pane labels (for rearranging)"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:157
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164
|
||||
msgid "Show profile icon on tab"
|
||||
msgstr ""
|
||||
|
||||
@@ -1905,7 +1914,7 @@ msgstr ""
|
||||
msgid "Show Serial connections"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152
|
||||
msgid "Show tabs in fullscreen mode"
|
||||
msgstr ""
|
||||
|
||||
@@ -1929,8 +1938,8 @@ msgstr ""
|
||||
msgid "Slow feed"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:79
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86
|
||||
msgid "Snaps the window to a side of the screen"
|
||||
msgstr ""
|
||||
|
||||
@@ -1956,6 +1965,10 @@ 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 ""
|
||||
@@ -1998,7 +2011,7 @@ msgstr ""
|
||||
msgid "SSH password for {user}@{host}:{port}"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-core/src/theme.ts:8
|
||||
#: tabby-core/src/theme.ts:9
|
||||
msgid "Standard (legacy)"
|
||||
msgstr ""
|
||||
|
||||
@@ -2093,15 +2106,15 @@ msgstr ""
|
||||
msgid "Tabby news and updates on Twitter"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:116
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123
|
||||
msgid "Tabs"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126
|
||||
msgid "Tabs location"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141
|
||||
msgid "Tabs width"
|
||||
msgstr ""
|
||||
|
||||
@@ -2109,7 +2122,7 @@ msgstr ""
|
||||
msgid "Telnet session"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:200
|
||||
#: tabby-terminal/src/api/baseTerminalTab.component.ts:204
|
||||
#: tabby-terminal/src/settings.ts:43
|
||||
msgid "Terminal"
|
||||
msgstr ""
|
||||
@@ -2146,11 +2159,11 @@ msgstr ""
|
||||
msgid "These apply to all profiles of a given type"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59
|
||||
msgid "Thin"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:198
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205
|
||||
msgid "Tick this if you're experiencing aliasing, ghosting or other visual issues"
|
||||
msgstr ""
|
||||
|
||||
@@ -2170,8 +2183,8 @@ msgstr ""
|
||||
msgid "Toggles the Tabby window visibility"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74
|
||||
msgid "Top"
|
||||
msgstr ""
|
||||
|
||||
@@ -2241,8 +2254,8 @@ msgstr ""
|
||||
msgid "Use ConPTY"
|
||||
msgstr ""
|
||||
|
||||
#: tabby-local/src/shells/linuxDefault.ts:31
|
||||
#: tabby-local/src/shells/linuxDefault.ts:38
|
||||
#: tabby-electron/src/shells/linuxDefault.ts:31
|
||||
#: tabby-electron/src/shells/linuxDefault.ts:38
|
||||
msgid "User default"
|
||||
msgstr ""
|
||||
|
||||
@@ -2295,7 +2308,7 @@ msgstr ""
|
||||
msgid "Version: {version}"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28
|
||||
msgid "Vibrancy"
|
||||
msgstr ""
|
||||
|
||||
@@ -2335,24 +2348,28 @@ 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:46
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53
|
||||
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:105
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112
|
||||
msgid "Window dimension along the edge"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105
|
||||
msgid "Window dimension away from the edge"
|
||||
msgstr ""
|
||||
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:45
|
||||
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52
|
||||
msgid "Window frame"
|
||||
msgstr ""
|
||||
|
||||
|
448
locale/bg-BG.po
448
locale/bg-BG.po
File diff suppressed because it is too large
Load Diff
2448
locale/cs-CZ.po
Normal file
2448
locale/cs-CZ.po
Normal file
File diff suppressed because it is too large
Load Diff
448
locale/da-DK.po
448
locale/da-DK.po
File diff suppressed because it is too large
Load Diff
450
locale/de-DE.po
450
locale/de-DE.po
File diff suppressed because it is too large
Load Diff
446
locale/en-GB.po
446
locale/en-GB.po
File diff suppressed because it is too large
Load Diff
458
locale/es-ES.po
458
locale/es-ES.po
File diff suppressed because it is too large
Load Diff
458
locale/fr-FR.po
458
locale/fr-FR.po
File diff suppressed because it is too large
Load Diff
462
locale/hr-HR.po
462
locale/hr-HR.po
File diff suppressed because it is too large
Load Diff
448
locale/id-ID.po
448
locale/id-ID.po
File diff suppressed because it is too large
Load Diff
450
locale/it-IT.po
450
locale/it-IT.po
File diff suppressed because it is too large
Load Diff
474
locale/ja-JP.po
474
locale/ja-JP.po
File diff suppressed because it is too large
Load Diff
488
locale/ko-KR.po
488
locale/ko-KR.po
File diff suppressed because it is too large
Load Diff
496
locale/pl-PL.po
496
locale/pl-PL.po
File diff suppressed because it is too large
Load Diff
474
locale/pt-BR.po
474
locale/pt-BR.po
File diff suppressed because it is too large
Load Diff
448
locale/pt-PT.po
448
locale/pt-PT.po
File diff suppressed because it is too large
Load Diff
468
locale/ru-RU.po
468
locale/ru-RU.po
File diff suppressed because it is too large
Load Diff
448
locale/sv-SE.po
448
locale/sv-SE.po
File diff suppressed because it is too large
Load Diff
454
locale/uk-UA.po
454
locale/uk-UA.po
File diff suppressed because it is too large
Load Diff
456
locale/zh-CN.po
456
locale/zh-CN.po
File diff suppressed because it is too large
Load Diff
450
locale/zh-TW.po
450
locale/zh-TW.po
File diff suppressed because it is too large
Load Diff
53
package.json
53
package.json
@@ -1,20 +1,22 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"@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",
|
||||
"@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",
|
||||
"@biesbjerg/ngx-translate-extract-marker": "^1.0.0",
|
||||
"@fortawesome/fontawesome-free": "^6.2.0",
|
||||
"@ng-bootstrap/ng-bootstrap": "^14.0.1",
|
||||
"@ngtools/webpack": "^15.1.4",
|
||||
"@electron/notarize": "^1.2.3",
|
||||
"@fortawesome/fontawesome-free": "^6.4.0",
|
||||
"@ng-bootstrap/ng-bootstrap": "^14.1.0",
|
||||
"@ngtools/webpack": "^15.2.5",
|
||||
"@popperjs/core": "^2.11.6",
|
||||
"@sentry/cli": "^1.74.3",
|
||||
"@sentry/cli": "^2.18.1",
|
||||
"@sentry/electron": "^2.5.4",
|
||||
"@tabby-gang/to-string-loader": "^1.1.7-beta.2",
|
||||
"@types/deep-equal": "1.0.1",
|
||||
@@ -22,30 +24,29 @@
|
||||
"@types/electron-debug": "^2.1.0",
|
||||
"@types/fs-extra": "^9.0.13",
|
||||
"@types/js-yaml": "^4.0.5",
|
||||
"@types/node": "16.0.1",
|
||||
"@types/node": "20.3.1",
|
||||
"@types/webpack-env": "^1.18.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.45.0",
|
||||
"@typescript-eslint/parser": "^5.45.0",
|
||||
"@typescript-eslint/parser": "^5.54.1",
|
||||
"apply-loader": "2.0.0",
|
||||
"axios": "^0.27.2",
|
||||
"axios": "^1.4.0",
|
||||
"babel-loader": "^9.1.2",
|
||||
"browserify-sign": "^4.2.1",
|
||||
"clone-deep": "^4.0.1",
|
||||
"compare-versions": "^5",
|
||||
"core-js": "^3.21.1",
|
||||
"core-js": "^3.31.0",
|
||||
"core-js-pure": "^3.21.1",
|
||||
"cross-env": "7.0.3",
|
||||
"css-loader": "^6.7.3",
|
||||
"deep-equal": "2.0.5",
|
||||
"electron": "22.3.1",
|
||||
"electron": "^25.3.0",
|
||||
"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.29.0",
|
||||
"eslint": "^8.38.0",
|
||||
"eslint-import-resolver-typescript": "^3.5.2",
|
||||
"eslint-plugin-import": "^2.26.0",
|
||||
"eslint-plugin-import": "^2.27.5",
|
||||
"file-loader": "^6.2.0",
|
||||
"gettext-extractor": "^3.5.4",
|
||||
"graceful-fs": "^4.2.10",
|
||||
@@ -54,7 +55,7 @@
|
||||
"lru-cache": "^6.0.0",
|
||||
"macos-release": "^3.1.0",
|
||||
"ngx-toastr": "^16.0.2",
|
||||
"node-abi": "^3.33.0",
|
||||
"node-abi": "^3.45.0",
|
||||
"npmlog": "6.0.2",
|
||||
"npx": "^10.2.2",
|
||||
"patch-package": "^6.4.7",
|
||||
@@ -67,7 +68,7 @@
|
||||
"pug-static-loader": "2.0.0",
|
||||
"raw-loader": "4.0.2",
|
||||
"rxjs": "^7.5.7",
|
||||
"sass": "^1.58.0",
|
||||
"sass": "^1.63.4",
|
||||
"sass-loader": "^13.2.0",
|
||||
"shell-quote": "^1.7.4",
|
||||
"shelljs": "0.8.5",
|
||||
@@ -84,13 +85,13 @@
|
||||
"tslib": "^2.5.0",
|
||||
"typedoc": "^0.22.18",
|
||||
"typescript": "^4.9.5",
|
||||
"utils-decorators": "^1.10.4",
|
||||
"utils-decorators": "^2.0.6",
|
||||
"val-loader": "5.0.1",
|
||||
"webpack": "^5.75.0",
|
||||
"webpack": "^5.86.0",
|
||||
"webpack-bundle-analyzer": "^4.7.0",
|
||||
"webpack-cli": "^5.0.1",
|
||||
"yaml-loader": "0.8.0",
|
||||
"zone.js": "^0.11.5"
|
||||
"zone.js": "^0.13.0"
|
||||
},
|
||||
"resolutions": {
|
||||
"*/pug": "^3",
|
||||
|
@@ -1,15 +1,15 @@
|
||||
diff --git a/node_modules/app-builder-lib/out/appInfo.js b/node_modules/app-builder-lib/out/appInfo.js
|
||||
index 363f32c..a0434a9 100644
|
||||
index 49f6dca..0ea11f2 100644
|
||||
--- a/node_modules/app-builder-lib/out/appInfo.js
|
||||
+++ b/node_modules/app-builder-lib/out/appInfo.js
|
||||
@@ -100,9 +100,7 @@ class AppInfo {
|
||||
@@ -112,9 +112,7 @@ class AppInfo {
|
||||
return this.info.metadata.name;
|
||||
}
|
||||
get linuxPackageName() {
|
||||
- const name = this.name;
|
||||
- // https://github.com/electron-userland/electron-builder/issues/2963
|
||||
- return name.startsWith("@") ? this.sanitizedProductName : name;
|
||||
+ return 'tabby-terminal'
|
||||
+ return 'tabby-terminal';
|
||||
}
|
||||
get sanitizedName() {
|
||||
return filename_1.sanitizeFileName(this.name);
|
||||
return (0, filename_1.sanitizeFileName)(this.name);
|
@@ -9,7 +9,7 @@ process.env.ARCH = (process.env.ARCH || process.arch) === 'arm' ? 'armv7l' : pro
|
||||
|
||||
builder({
|
||||
dir: true,
|
||||
linux: ['deb', 'tar.gz', 'rpm', 'pacman'],
|
||||
linux: ['deb', 'tar.gz', 'rpm', 'pacman', 'appimage'],
|
||||
armv7l: process.env.ARCH === 'armv7l',
|
||||
arm64: process.env.ARCH === 'arm64',
|
||||
config: {
|
||||
|
@@ -13,6 +13,9 @@ if (process.env.GITHUB_HEAD_REF) {
|
||||
process.env.CSC_IDENTITY_AUTO_DISCOVERY = 'false'
|
||||
}
|
||||
|
||||
process.env.APPLE_ID ??= process.env.APPSTORE_USERNAME
|
||||
process.env.APPLE_APP_SPECIFIC_PASSWORD ??= process.env.APPSTORE_PASSWORD
|
||||
|
||||
builder({
|
||||
dir: true,
|
||||
mac: ['pkg', 'zip'],
|
||||
@@ -24,6 +27,10 @@ builder({
|
||||
},
|
||||
mac: {
|
||||
identity: !process.env.CI || process.env.CSC_LINK ? undefined : null,
|
||||
notarize: process.env.APPLE_TEAM_ID ? {
|
||||
appBundleId: 'org.tabby',
|
||||
teamId: process.env.APPLE_TEAM_ID,
|
||||
} : false,
|
||||
},
|
||||
npmRebuild: process.env.ARCH !== 'arm64',
|
||||
publish: process.env.KEYGEN_TOKEN ? [
|
||||
|
@@ -9,7 +9,7 @@ sh.exec(`${sentryCli} releases new ${vars.version}`)
|
||||
if (process.platform === 'darwin') {
|
||||
for (const path of [
|
||||
'app/node_modules/@serialport/bindings/build/Release/bindings.node',
|
||||
'app/node_modules/@tabby-gang/node-pty/build/Release/pty.node',
|
||||
'app/node_modules/node-pty/build/Release/pty.node',
|
||||
'app/node_modules/fontmanager-redux/build/Release/fontmanager.node',
|
||||
'app/node_modules/macos-native-processlist/build/Release/native.node',
|
||||
]) {
|
||||
|
@@ -3,6 +3,8 @@ import * as fs from 'fs'
|
||||
import * as semver from 'semver'
|
||||
import * as childProcess from 'child_process'
|
||||
|
||||
process.env.ARCH = ((process.env.ARCH || process.arch) === 'arm') ? 'armv7l' : process.env.ARCH || process.arch
|
||||
|
||||
import * as url from 'url'
|
||||
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
|
||||
|
||||
@@ -25,8 +27,8 @@ export const builtinPlugins = [
|
||||
'tabby-ssh',
|
||||
'tabby-serial',
|
||||
'tabby-telnet',
|
||||
'tabby-electron',
|
||||
'tabby-local',
|
||||
'tabby-electron',
|
||||
'tabby-plugin-manager',
|
||||
'tabby-linkifier',
|
||||
]
|
||||
@@ -58,21 +60,21 @@ export const keygenConfig = {
|
||||
win32: {
|
||||
x64: 'f481b9d6-d5da-4970-b926-f515373e986f',
|
||||
arm64: '950999b9-371c-419b-b291-938c5e4d364c',
|
||||
}[process.env.ARCH ?? process.arch],
|
||||
}[process.env.ARCH],
|
||||
darwin: {
|
||||
arm64: '98fbadee-c707-4cd6-9d99-56683595a846',
|
||||
x86_64: 'f5a48841-d5b8-4b7b-aaa7-cf5bffd36461',
|
||||
x64: 'f5a48841-d5b8-4b7b-aaa7-cf5bffd36461',
|
||||
}[process.env.ARCH ?? process.arch],
|
||||
}[process.env.ARCH],
|
||||
linux: {
|
||||
x64: '7bf45071-3031-4a26-9f2e-72604308313e',
|
||||
arm64: '39e3c736-d4d4-4fbf-a201-324b7bab0d17',
|
||||
armv7l: '50ae0a82-7f47-4fa4-b0a8-b0d575ce9409',
|
||||
armhf: '7df5aa12-04ab-4075-a0fe-93b0bbea9643',
|
||||
}[process.env.ARCH ?? process.arch],
|
||||
}[process.env.ARCH],
|
||||
}[process.platform],
|
||||
}
|
||||
|
||||
if (!keygenConfig.product) {
|
||||
throw new Error(`Unrecognized platform ${process.platform}/${process.env.ARCH ?? process.arch}`)
|
||||
throw new Error(`Unrecognized platform ${process.platform}/${process.env.ARCH}`)
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tabby-community-color-schemes",
|
||||
"version": "1.0.189-nightly.2",
|
||||
"version": "1.0.197-nightly.1",
|
||||
"description": "Community color schemes for Tabby",
|
||||
"keywords": [
|
||||
"tabby-builtin-plugin"
|
||||
@@ -17,7 +17,7 @@
|
||||
"author": "Eugene Pankov",
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"@angular/core": "^9.1.9",
|
||||
"@angular/core": "^15",
|
||||
"tabby-core": "*",
|
||||
"tabby-terminal": "*"
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tabby-core",
|
||||
"version": "1.0.189-nightly.0",
|
||||
"version": "1.0.197-nightly.1",
|
||||
"description": "Tabby core",
|
||||
"keywords": [
|
||||
"tabby-builtin-plugin"
|
||||
@@ -12,6 +12,7 @@
|
||||
"watch": "webpack --progress --color --watch"
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
"typings"
|
||||
],
|
||||
"author": "Eugene Pankov",
|
||||
@@ -25,16 +26,16 @@
|
||||
"messageformat": "^2.3.0",
|
||||
"mixpanel": "^0.17.0",
|
||||
"ngx-translate-messageformat-compiler": "^4.11.0",
|
||||
"readable-stream": "4.2.0",
|
||||
"readable-stream": "4.4.0",
|
||||
"uuid": "^9.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@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"
|
||||
"@angular/animations": "^15",
|
||||
"@angular/common": "^15",
|
||||
"@angular/core": "^15",
|
||||
"@angular/forms": "^15",
|
||||
"@angular/platform-browser": "^15",
|
||||
"@angular/platform-browser-dynamic": "^15",
|
||||
"rxjs": "^7"
|
||||
}
|
||||
}
|
||||
|
@@ -86,14 +86,18 @@ export interface FileUploadOptions {
|
||||
multiple: boolean
|
||||
}
|
||||
|
||||
export type PlatformTheme = 'light'|'dark'
|
||||
|
||||
export abstract class PlatformService {
|
||||
supportsWindowControls = false
|
||||
|
||||
get fileTransferStarted$ (): Observable<FileTransfer> { return this.fileTransferStarted }
|
||||
get displayMetricsChanged$ (): Observable<void> { return this.displayMetricsChanged }
|
||||
get themeChanged$ (): Observable<PlatformTheme> { return this.themeChanged }
|
||||
|
||||
protected fileTransferStarted = new Subject<FileTransfer>()
|
||||
protected displayMetricsChanged = new Subject<void>()
|
||||
protected themeChanged = new Subject<PlatformTheme>()
|
||||
|
||||
abstract readClipboard (): string
|
||||
abstract setClipboard (content: ClipboardContent): void
|
||||
@@ -169,6 +173,10 @@ export abstract class PlatformService {
|
||||
throw new Error('Not implemented')
|
||||
}
|
||||
|
||||
getTheme (): PlatformTheme {
|
||||
return 'dark'
|
||||
}
|
||||
|
||||
abstract getOSRelease (): string
|
||||
abstract getAppVersion (): string
|
||||
abstract openExternal (url: string): void
|
||||
@@ -176,6 +184,7 @@ export abstract class PlatformService {
|
||||
abstract setErrorHandler (handler: (_: any) => void): void
|
||||
abstract popupContextMenu (menu: MenuItemOptions[], event?: MouseEvent): void
|
||||
abstract showMessageBox (options: MessageBoxOptions): Promise<MessageBoxResult>
|
||||
abstract pickDirectory (): Promise<string>
|
||||
abstract quit (): void
|
||||
}
|
||||
|
||||
|
@@ -14,6 +14,7 @@ export interface Profile {
|
||||
icon?: string
|
||||
color?: string
|
||||
disableDynamicTitle: boolean
|
||||
behaviorOnSessionEnd: 'auto'|'keep'|'reconnect'|'close'
|
||||
|
||||
weight: number
|
||||
isBuiltin: boolean
|
||||
|
@@ -27,7 +27,7 @@ export class CoreCommandProvider extends CommandProvider {
|
||||
async provide (): Promise<Command[]> {
|
||||
return [
|
||||
{
|
||||
id: 'profile-selector',
|
||||
id: 'core:profile-selector',
|
||||
locations: [CommandLocation.LeftToolbar, CommandLocation.StartPage],
|
||||
label: this.translate.instant('Profiles & connections'),
|
||||
icon: this.hostApp.platform === Platform.Web
|
||||
@@ -35,7 +35,8 @@ export class CoreCommandProvider extends CommandProvider {
|
||||
: require('./icons/profiles.svg'),
|
||||
run: async () => this.activate(),
|
||||
},
|
||||
...this.profilesService.getRecentProfiles().map(profile => ({
|
||||
...this.profilesService.getRecentProfiles().map((profile, index) => ({
|
||||
id: `core:recent-profile-${index}`,
|
||||
label: profile.name,
|
||||
locations: [CommandLocation.StartPage],
|
||||
icon: require('./icons/history.svg'),
|
||||
|
@@ -1,16 +1,20 @@
|
||||
title-bar(
|
||||
*ngIf='ready && !hostWindow.isFullscreen && config.store.appearance.frame == "full" && config.store.appearance.dock == "off"',
|
||||
(dblclick)='hostWindow.toggleMaximize()',
|
||||
[hideControls]='hostApp.platform !== Platform.Linux && !hostWindow.isFullscreen',
|
||||
[class.inset]='hostApp.platform == Platform.macOS && !hostWindow.isFullscreen'
|
||||
)
|
||||
|
||||
.content(
|
||||
*ngIf='ready',
|
||||
[class.tabs-on-top]='config.store.appearance.tabsLocation == "top" || config.store.appearance.tabsLocation == "left"',
|
||||
[class.tabs-on-side]='hasVerticalTabs()',
|
||||
[class.tabs-on-left]='hasVerticalTabs() && config.store.appearance.tabsLocation == "left"',
|
||||
[class.tabs-titlebar-enabled]='config.store.appearance.frame == "full"',
|
||||
[class.tabs-on-right]='hasVerticalTabs() && config.store.appearance.tabsLocation == "right"',
|
||||
)
|
||||
.tab-bar(
|
||||
*ngIf='!hostWindow.isFullscreen || config.store.appearance.tabsInFullscreen',
|
||||
[class.tab-bar-no-controls-overlay]='hostApp.platform == Platform.macOS',
|
||||
(dblclick)='hostWindow.toggleMaximize()'
|
||||
)
|
||||
.inset.background(*ngIf='hostApp.platform == Platform.macOS \
|
||||
@@ -37,14 +41,12 @@ title-bar(
|
||||
|
||||
.btn-group.background
|
||||
.d-flex(
|
||||
*ngFor='let button of leftToolbarButtons',
|
||||
ngbDropdown
|
||||
*ngFor='let button of leftToolbarButtons'
|
||||
)
|
||||
button.btn.btn-secondary.btn-tab-bar(
|
||||
[title]='button.label',
|
||||
(click)='button.run && button.run()',
|
||||
[fastHtmlBind]='button.icon',
|
||||
ngbDropdownToggle,
|
||||
[fastHtmlBind]='button.icon'
|
||||
)
|
||||
|
||||
.d-flex(
|
||||
@@ -53,7 +55,7 @@ title-bar(
|
||||
#activeTransfersDropdown='ngbDropdown'
|
||||
)
|
||||
button.btn.btn-secondary.btn-tab-bar(
|
||||
*ngIf='activeTransfers.length > 0',
|
||||
[hidden]='activeTransfers.length == 0',
|
||||
title='File transfers',
|
||||
ngbDropdownToggle
|
||||
) !{require('../icons/transfers.svg')}
|
||||
@@ -67,14 +69,12 @@ title-bar(
|
||||
|
||||
.btn-group.background
|
||||
.d-flex(
|
||||
*ngFor='let button of rightToolbarButtons',
|
||||
ngbDropdown
|
||||
*ngFor='let button of rightToolbarButtons'
|
||||
)
|
||||
button.btn.btn-secondary.btn-tab-bar(
|
||||
[title]='button.label',
|
||||
(click)='button.run && button.run()',
|
||||
[fastHtmlBind]='button.icon',
|
||||
ngbDropdownToggle,
|
||||
[fastHtmlBind]='button.icon'
|
||||
)
|
||||
|
||||
button.btn.btn-secondary.btn-tab-bar.btn-update(
|
||||
@@ -85,9 +85,12 @@ title-bar(
|
||||
|
||||
window-controls.background(
|
||||
*ngIf='config.store.appearance.frame == "thin" \
|
||||
&& (hostApp.platform == Platform.Windows || hostApp.platform == Platform.Linux)',
|
||||
&& (hostApp.platform == Platform.Linux)',
|
||||
)
|
||||
|
||||
div.window-controls-spacer(
|
||||
*ngIf='config.store.appearance.frame == "thin" && (hostApp.platform == Platform.Windows) && (config.store.appearance.tabsLocation == "top")',
|
||||
)
|
||||
.content
|
||||
start-page.content-tab.content-tab-active(*ngIf='ready && app.tabs.length == 0')
|
||||
|
||||
|
@@ -35,17 +35,16 @@ $tab-border-radius: 4px;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
&.tabs-on-side {
|
||||
&.tabs-on-right {
|
||||
flex-direction: row-reverse;
|
||||
|
||||
&.tabs-on-top {
|
||||
flex-direction: row;
|
||||
}
|
||||
}
|
||||
|
||||
&.tabs-on-left {
|
||||
flex-direction: row;
|
||||
}
|
||||
}
|
||||
|
||||
.content.tabs-on-side > .tab-bar {
|
||||
.content.tabs-on-left > .tab-bar, .content.tabs-on-right > .tab-bar {
|
||||
height: 100%;
|
||||
width: var(--side-tab-width);
|
||||
overflow-y: auto;
|
||||
@@ -76,6 +75,18 @@ $tab-border-radius: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.content.tabs-on-left > .tab-bar.tab-bar-no-controls-overlay, .content.tabs-titlebar-enabled {
|
||||
.tabs {
|
||||
padding-top: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.content.tabs-on-right > .tab-bar {
|
||||
.tabs {
|
||||
// Account for WCO on Windows.
|
||||
padding-top: 36px;
|
||||
}
|
||||
}
|
||||
|
||||
.tab-bar {
|
||||
flex: none;
|
||||
@@ -125,10 +136,17 @@ $tab-border-radius: 4px;
|
||||
}
|
||||
|
||||
&.persistent {
|
||||
min-width: 72px; // 2 x 36 px height, ie 2 squares
|
||||
// min-width: 72px; // 2 x 36 px height, ie 2 squares
|
||||
// Given WCO on Windows, the min-width of the window buttons is about 138px.
|
||||
min-width: 138px;
|
||||
}
|
||||
}
|
||||
|
||||
&>.window-controls-spacer {
|
||||
min-width: 138px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
& > .inset {
|
||||
width: calc(70px + 15px * var(--spaciness));
|
||||
height: var(--tabs-height);
|
||||
|
@@ -192,6 +192,14 @@ export abstract class BaseTabComponent extends BaseComponent {
|
||||
this.viewContainer = undefined
|
||||
}
|
||||
|
||||
get topmostParent (): BaseTabComponent|null {
|
||||
let parent = this.parent
|
||||
while (parent?.parent) {
|
||||
parent = parent.parent
|
||||
}
|
||||
return parent
|
||||
}
|
||||
|
||||
/**
|
||||
* Called before the tab is closed
|
||||
*/
|
||||
|
@@ -5,7 +5,7 @@ import { BaseComponent } from './base.component'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'profile-icon',
|
||||
templateUrl:'./profileIcon.component.pug',
|
||||
templateUrl: './profileIcon.component.pug',
|
||||
styleUrls: ['./profileIcon.component.scss'],
|
||||
})
|
||||
export class ProfileIconComponent extends BaseComponent {
|
||||
|
@@ -3,7 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
|
||||
|
||||
/** @hidden */
|
||||
@Component({
|
||||
templateUrl:'./promptModal.component.pug',
|
||||
templateUrl: './promptModal.component.pug',
|
||||
})
|
||||
export class PromptModalComponent {
|
||||
@Input() value: string
|
||||
|
@@ -5,7 +5,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'rename-tab-modal',
|
||||
templateUrl:'./renameTabModal.component.pug',
|
||||
templateUrl: './renameTabModal.component.pug',
|
||||
})
|
||||
export class RenameTabModalComponent {
|
||||
@Input() value: string
|
||||
|
@@ -3,7 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
|
||||
|
||||
/** @hidden */
|
||||
@Component({
|
||||
templateUrl:'./safeModeModal.component.pug',
|
||||
templateUrl: './safeModeModal.component.pug',
|
||||
})
|
||||
export class SafeModeModalComponent {
|
||||
@Input() error: Error
|
||||
|
@@ -26,9 +26,9 @@
|
||||
*ngIf='option.description !== getOptionText(option)'
|
||||
) {{option.description}}
|
||||
.ms-auto
|
||||
.no-wrap.badge.text-bg-secondary.text-muted.ms-2(*ngIf='selectedIndex == i && canEditSelected()')
|
||||
span Backspace
|
||||
.no-wrap.badge.text-bg-secondary.ms-2(*ngIf='selectedIndex == i && canEditSelected()')
|
||||
span BACKSPACE
|
||||
i.fas.fa-pencil.ms-1
|
||||
.no-wrap.badge.text-bg-secondary.text-muted.ms-2(*ngIf='selectedIndex == i')
|
||||
span Enter
|
||||
.no-wrap.badge.text-bg-secondary.ms-2(*ngIf='selectedIndex == i')
|
||||
span ENTER
|
||||
i.fas.fa-arrow-right.ms-1
|
||||
|
@@ -7,7 +7,7 @@ import { SelectorOption } from '../api/selector'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'selector-modal',
|
||||
templateUrl:'./selectorModal.component.pug',
|
||||
templateUrl: './selectorModal.component.pug',
|
||||
styleUrls: ['./selectorModal.component.scss'],
|
||||
})
|
||||
export class SelectorModalComponent<T> {
|
||||
@@ -76,10 +76,11 @@ export class SelectorModalComponent<T> {
|
||||
{ sort: true },
|
||||
).search(f)
|
||||
|
||||
const freeOption = this.options.find(x => x.freeInputPattern)
|
||||
if (freeOption && !this.filteredOptions.includes(freeOption)) {
|
||||
this.filteredOptions.push(freeOption)
|
||||
}
|
||||
this.options.filter(x => x.freeInputPattern).forEach(freeOption => {
|
||||
if (!this.filteredOptions.includes(freeOption)) {
|
||||
this.filteredOptions.push(freeOption)
|
||||
}
|
||||
})
|
||||
}
|
||||
this.selectedIndex = Math.max(0, this.selectedIndex)
|
||||
this.selectedIndex = Math.min(this.filteredOptions.length - 1, this.selectedIndex)
|
||||
|
@@ -24,3 +24,7 @@
|
||||
border-radius: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
::ng-deep .no-animations split-tab > .child {
|
||||
transition: none;
|
||||
}
|
||||
|
@@ -458,12 +458,18 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
|
||||
tab.destroy()
|
||||
}
|
||||
|
||||
let allTabs: BaseTabComponent[] = []
|
||||
if (thing instanceof BaseTabComponent) {
|
||||
if (thing.parent instanceof SplitTabComponent) {
|
||||
thing.parent.removeTab(thing)
|
||||
allTabs = [thing]
|
||||
} else if (thing instanceof SplitContainer) {
|
||||
allTabs = thing.getAllTabs()
|
||||
}
|
||||
for (const tab of allTabs) {
|
||||
if (tab.parent instanceof SplitTabComponent) {
|
||||
tab.parent.removeTab(tab)
|
||||
}
|
||||
thing.removeFromContainer()
|
||||
thing.parent = this
|
||||
tab.removeFromContainer()
|
||||
tab.parent = this
|
||||
}
|
||||
|
||||
let target = relative ? this.getParentOf(relative) : null
|
||||
@@ -781,7 +787,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
|
||||
}
|
||||
|
||||
get icon (): string|null {
|
||||
return this.getFocusedTab()?.icon ?? null
|
||||
return this.getFocusedTab()?.icon ?? this.getAllTabs()[0]?.icon ?? null
|
||||
}
|
||||
|
||||
set icon (icon: string|null) {
|
||||
@@ -791,7 +797,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
|
||||
}
|
||||
|
||||
get color (): string|null {
|
||||
return this.getFocusedTab()?.color ?? null
|
||||
return this.getFocusedTab()?.color ?? this.getAllTabs()[0]?.color ?? null
|
||||
}
|
||||
|
||||
set color (color: string|null) {
|
||||
|
@@ -7,7 +7,7 @@ import { Command, CommandLocation } from '../api/commands'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'start-page',
|
||||
templateUrl:'./startPage.component.pug',
|
||||
templateUrl: './startPage.component.pug',
|
||||
styleUrls: ['./startPage.component.scss'],
|
||||
})
|
||||
export class StartPageComponent {
|
||||
|
@@ -1,6 +1,7 @@
|
||||
.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}}
|
||||
|
@@ -134,15 +134,29 @@ $tabs-height: 38px;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.activity-indicator, .current-tab-indicator {
|
||||
position: absolute;
|
||||
height: 2px;
|
||||
}
|
||||
|
||||
&.active .activity-indicator {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.activity-indicator {
|
||||
position: absolute;
|
||||
bottom: 4px;
|
||||
left: 10px;
|
||||
right: 10px;
|
||||
bottom: 4px;
|
||||
height: 2px;
|
||||
}
|
||||
|
||||
&.active .current-tab-indicator {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.current-tab-indicator {
|
||||
display: none;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
|
@@ -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 {
|
||||
|
@@ -1,2 +1,2 @@
|
||||
.title((dblclick)='hostWindow.toggleMaximize()') Tabby
|
||||
window-controls
|
||||
window-controls(*ngIf="!hideControls")
|
||||
|
@@ -1,12 +1,14 @@
|
||||
import { Component } from '@angular/core'
|
||||
import { Component, Input } from '@angular/core'
|
||||
import { HostWindowService } from '../api'
|
||||
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'title-bar',
|
||||
templateUrl:'./titleBar.component.pug',
|
||||
templateUrl: './titleBar.component.pug',
|
||||
styleUrls: ['./titleBar.component.scss'],
|
||||
})
|
||||
export class TitleBarComponent {
|
||||
@Input() hideControls: boolean
|
||||
|
||||
constructor (public hostWindow: HostWindowService) { }
|
||||
}
|
||||
|
@@ -6,12 +6,7 @@
|
||||
.icon(*ngIf='!isDownload(transfer)') !{require('../icons/upload.svg')}
|
||||
.main
|
||||
label.no-wrap([title]='transfer.getName()') {{transfer.getName()}}
|
||||
.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)')
|
||||
ngb-progressbar([type]='transfer.isComplete() ? "success" : transfer.isCancelled() ? "danger" : "info"', [value]='getProgress(transfer)')
|
||||
.metadata
|
||||
.size {{transfer.getSize()|filesize}}
|
||||
.speed(*ngIf='transfer.getSpeed()') {{transfer.getSpeed()|filesize}}/s
|
||||
|
@@ -5,7 +5,7 @@ import { FileDownload, FileTransfer, PlatformService } from '../api/platform'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'transfers-menu',
|
||||
templateUrl:'./transfersMenu.component.pug',
|
||||
templateUrl: './transfersMenu.component.pug',
|
||||
styleUrls: ['./transfersMenu.component.scss'],
|
||||
})
|
||||
export class TransfersMenuComponent {
|
||||
|
@@ -3,7 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
|
||||
|
||||
/** @hidden */
|
||||
@Component({
|
||||
templateUrl:'./unlockVaultModal.component.pug',
|
||||
templateUrl: './unlockVaultModal.component.pug',
|
||||
})
|
||||
export class UnlockVaultModalComponent {
|
||||
passphrase: string
|
||||
|
@@ -8,7 +8,7 @@ import { LocaleService } from '../services/locale.service'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'welcome-page',
|
||||
templateUrl:'./welcomeTab.component.pug',
|
||||
templateUrl: './welcomeTab.component.pug',
|
||||
styleUrls: ['./welcomeTab.component.scss'],
|
||||
})
|
||||
export class WelcomeTabComponent extends BaseTabComponent {
|
||||
|
@@ -6,7 +6,7 @@ import { AppService } from '../services/app.service'
|
||||
/** @hidden */
|
||||
@Component({
|
||||
selector: 'window-controls',
|
||||
templateUrl:'./windowControls.component.pug',
|
||||
templateUrl: './windowControls.component.pug',
|
||||
styleUrls: ['./windowControls.component.scss'],
|
||||
})
|
||||
export class WindowControlsComponent {
|
||||
|
@@ -22,6 +22,8 @@ hotkeys:
|
||||
- 'Ctrl-Shift'
|
||||
duplicate-tab: []
|
||||
restart-tab: []
|
||||
reconnect-tab: []
|
||||
disconnect-tab: []
|
||||
explode-tab:
|
||||
- 'Ctrl-Shift-.'
|
||||
combine-tabs:
|
||||
|
@@ -39,6 +39,8 @@ hotkeys:
|
||||
tab-10: []
|
||||
duplicate-tab: []
|
||||
restart-tab: []
|
||||
reconnect-tab: []
|
||||
disconnect-tab: []
|
||||
explode-tab:
|
||||
- '⌘-Shift-.'
|
||||
combine-tabs:
|
||||
|
@@ -23,6 +23,8 @@ hotkeys:
|
||||
- 'Ctrl-Shift'
|
||||
duplicate-tab: []
|
||||
restart-tab: []
|
||||
reconnect-tab: []
|
||||
disconnect-tab: []
|
||||
explode-tab:
|
||||
- 'Ctrl-Shift-.'
|
||||
combine-tabs:
|
||||
|
@@ -11,7 +11,7 @@ appearance:
|
||||
tabsLocation: top
|
||||
tabsInFullscreen: false
|
||||
cycleTabs: true
|
||||
theme: Standard
|
||||
theme: Follow the color scheme
|
||||
frame: thin
|
||||
css: '/* * { color: blue !important; } */'
|
||||
opacity: 1.0
|
||||
@@ -46,8 +46,12 @@ vault: null
|
||||
encrypted: false
|
||||
enableExperimentalFeatures: false
|
||||
pluginBlacklist: []
|
||||
commandBlacklist: []
|
||||
providerBlacklist: []
|
||||
profileBlacklist: []
|
||||
hacks:
|
||||
disableGPU: false
|
||||
disableVibrancyWhileDragging: false
|
||||
enableFluentBackground: false
|
||||
language: null
|
||||
defaultQuickConnectProvider: "ssh"
|
||||
|
@@ -19,6 +19,7 @@ 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]
|
||||
|
@@ -5,9 +5,11 @@ 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 } from '@ngx-translate/core'
|
||||
import { TranslateModule, TranslateCompiler, TranslateService, MissingTranslationHandler } 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'
|
||||
@@ -41,7 +43,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 { LocaleService } from './services/locale.service'
|
||||
import { CustomMissingTranslationHandler, LocaleService } from './services/locale.service'
|
||||
import { CommandService } from './services/commands.service'
|
||||
|
||||
import { StandardTheme, StandardCompactTheme, PaperTheme, NewTheme } from './theme'
|
||||
@@ -99,6 +101,10 @@ const PROVIDERS = [
|
||||
provide: TranslateCompiler,
|
||||
useFactory: TranslateMessageFormatCompilerFactory,
|
||||
},
|
||||
missingTranslationHandler: {
|
||||
provide: MissingTranslationHandler,
|
||||
useClass: CustomMissingTranslationHandler,
|
||||
},
|
||||
}),
|
||||
],
|
||||
declarations: [
|
||||
@@ -189,7 +195,7 @@ export default class AppModule { // eslint-disable-line @typescript-eslint/no-ex
|
||||
}
|
||||
|
||||
if (hotkey === 'profile-selector') {
|
||||
commands.run('profile-selector', {})
|
||||
commands.run('core:profile-selector', {})
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -213,6 +219,7 @@ export default class AppModule { // eslint-disable-line @typescript-eslint/no-ex
|
||||
name: this.translate.instant('Quick connect'),
|
||||
freeInputPattern: this.translate.instant('Connect to "%s"...'),
|
||||
icon: 'fas fa-arrow-right',
|
||||
description: `(${provider.name.toUpperCase()})`,
|
||||
callback: query => {
|
||||
const p = provider.quickConnect(query)
|
||||
if (p) {
|
||||
|
@@ -71,6 +71,7 @@ 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
|
||||
|
@@ -15,6 +15,9 @@ const deepmerge = require('deepmerge')
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
export const configMerge = (a, b) => deepmerge(a, b, { arrayMerge: (_d, s) => s }) // eslint-disable-line @typescript-eslint/no-var-requires
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
export const configMergeByDefault = (a, b) => deepmerge(a, b) // eslint-disable-line @typescript-eslint/no-var-requires
|
||||
|
||||
const LATEST_VERSION = 1
|
||||
|
||||
function isStructuralMember (v) {
|
||||
@@ -162,7 +165,7 @@ export class ConfigService {
|
||||
defaults = configMerge(provider.defaults, defaults)
|
||||
}
|
||||
return defaults
|
||||
}).reduce(configMerge)
|
||||
}).reduce(configMergeByDefault)
|
||||
}
|
||||
|
||||
getDefaults (): Record<string, any> {
|
||||
@@ -213,7 +216,9 @@ export class ConfigService {
|
||||
* Reads config YAML as string
|
||||
*/
|
||||
readRaw (): string {
|
||||
return yaml.dump(this._store)
|
||||
// Scrub undefined values
|
||||
const cleanStore = JSON.parse(JSON.stringify(this._store))
|
||||
return yaml.dump(cleanStore)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -254,7 +259,9 @@ 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
|
||||
@@ -349,6 +356,14 @@ export class ConfigService {
|
||||
delete window.localStorage.lastSerialConnection
|
||||
config.version = 3
|
||||
}
|
||||
if (config.version < 4) {
|
||||
for (const p of config.profiles ?? []) {
|
||||
if (!p.id) {
|
||||
p.id = `${p.type}:custom:${uuidv4()}`
|
||||
}
|
||||
}
|
||||
config.version = 4
|
||||
}
|
||||
}
|
||||
|
||||
private async maybeDecryptConfig (store) {
|
||||
|
@@ -178,7 +178,7 @@ export class HotkeysService {
|
||||
this._key.next(getKeyName(eventData))
|
||||
})
|
||||
|
||||
if (process.platform === 'darwin' && eventData.metaKey && eventName === 'keydown' && !['Ctrl', 'Shift', altKeyName, metaKeyName].includes(keyName)) {
|
||||
if (process.platform === 'darwin' && eventData.metaKey && eventName === 'keydown' && !['Ctrl', 'Shift', altKeyName, metaKeyName, 'Enter'].includes(keyName)) {
|
||||
// macOS will swallow non-modified keyups if Cmd is held down
|
||||
this.pushKeyEvent('keyup', nativeEvent)
|
||||
}
|
||||
|
@@ -1,11 +1,13 @@
|
||||
import { Injectable } from '@angular/core'
|
||||
import { registerLocaleData } from '@angular/common'
|
||||
import { TranslateService } from '@ngx-translate/core'
|
||||
import { TranslateService, MissingTranslationHandler } from '@ngx-translate/core'
|
||||
import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler'
|
||||
|
||||
import localeENUS from '@angular/common/locales/en'
|
||||
import localeENGB from '@angular/common/locales/en-GB'
|
||||
import localeAF from '@angular/common/locales/af'
|
||||
import localeBG from '@angular/common/locales/bg'
|
||||
import localeCS from '@angular/common/locales/cs'
|
||||
import localeDA from '@angular/common/locales/da'
|
||||
import localeDE from '@angular/common/locales/de'
|
||||
import localeES from '@angular/common/locales/es'
|
||||
@@ -30,6 +32,7 @@ registerLocaleData(localeENUS)
|
||||
registerLocaleData(localeENGB)
|
||||
registerLocaleData(localeAF)
|
||||
registerLocaleData(localeBG)
|
||||
registerLocaleData(localeCS)
|
||||
registerLocaleData(localeDA)
|
||||
registerLocaleData(localeDE)
|
||||
registerLocaleData(localeES)
|
||||
@@ -55,6 +58,19 @@ 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
|
||||
@@ -68,6 +84,10 @@ export class LocaleService {
|
||||
code: 'id-ID',
|
||||
name: 'Bahasa Indonesia',
|
||||
},
|
||||
{
|
||||
code: 'cs-CZ',
|
||||
name: 'Čeština',
|
||||
},
|
||||
{
|
||||
code: 'da-DK',
|
||||
name: 'Dansk',
|
||||
|
@@ -24,6 +24,7 @@ export class ProfilesService {
|
||||
isBuiltin: false,
|
||||
isTemplate: false,
|
||||
terminalColorScheme: null,
|
||||
behaviorOnSessionEnd: 'auto',
|
||||
}
|
||||
|
||||
constructor (
|
||||
@@ -95,6 +96,8 @@ 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),
|
||||
}
|
||||
@@ -150,6 +153,8 @@ 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,
|
||||
@@ -172,17 +177,20 @@ export class ProfilesService {
|
||||
})
|
||||
} catch { }
|
||||
|
||||
if (this.getProviders().some(x => x.supportsQuickConnect)) {
|
||||
this.getProviders().filter(x => x.supportsQuickConnect).forEach(provider => {
|
||||
options.push({
|
||||
name: this.translate.instant('Quick connect'),
|
||||
freeInputPattern: this.translate.instant('Connect to "%s"...'),
|
||||
description: `(${provider.name.toUpperCase()})`,
|
||||
icon: 'fas fa-arrow-right',
|
||||
weight: provider.id !== this.config.store.defaultQuickConnectProvider ? 1 : 0,
|
||||
callback: query => {
|
||||
const profile = this.quickConnect(query)
|
||||
const profile = provider.quickConnect(query)
|
||||
resolve(profile)
|
||||
},
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
await this.selector.show(this.translate.instant('Select profile or enter an address'), options)
|
||||
} catch (err) {
|
||||
reject(err)
|
||||
|
@@ -3,6 +3,7 @@ import { Subject, Observable } from 'rxjs'
|
||||
import * as Color from 'color'
|
||||
import { ConfigService } from '../services/config.service'
|
||||
import { Theme } from '../api/theme'
|
||||
import { PlatformService } from '../api/platform'
|
||||
import { NewTheme } from '../theme'
|
||||
|
||||
@Injectable({ providedIn: 'root' })
|
||||
@@ -17,6 +18,7 @@ export class ThemesService {
|
||||
private constructor (
|
||||
private config: ConfigService,
|
||||
private standardTheme: NewTheme,
|
||||
private platform: PlatformService,
|
||||
@Inject(Theme) private themes: Theme[],
|
||||
) {
|
||||
this.rootElementStyleBackup = document.documentElement.style.cssText
|
||||
@@ -24,11 +26,15 @@ export class ThemesService {
|
||||
config.ready$.toPromise().then(() => {
|
||||
this.applyCurrentTheme()
|
||||
this.applyThemeVariables()
|
||||
platform.themeChanged$.subscribe(() => {
|
||||
this.applyCurrentTheme()
|
||||
this.applyThemeVariables()
|
||||
})
|
||||
config.changed$.subscribe(() => {
|
||||
this.applyCurrentTheme()
|
||||
this.applyThemeVariables()
|
||||
})
|
||||
})
|
||||
config.changed$.subscribe(() => this.applyThemeVariables())
|
||||
}
|
||||
|
||||
private applyThemeVariables () {
|
||||
@@ -36,7 +42,7 @@ export class ThemesService {
|
||||
document.documentElement.style.cssText = this.rootElementStyleBackup
|
||||
}
|
||||
|
||||
const theme = this.config.store.terminal.colorScheme
|
||||
const theme = this._getActiveColorScheme()
|
||||
const isDark = Color(theme.background).luminosity() < Color(theme.foreground).luminosity()
|
||||
|
||||
function more (some, factor) {
|
||||
@@ -62,9 +68,11 @@ 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'] = background.string()
|
||||
vars['--bs-body-bg'] = theme.background
|
||||
vars['--bs-body-color'] = theme.foreground
|
||||
vars['--bs-black'] = theme.colors[0]
|
||||
vars['--bs-red'] = theme.colors[1]
|
||||
@@ -82,6 +90,8 @@ export class ThemesService {
|
||||
// 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
|
||||
@@ -94,15 +104,23 @@ export class ThemesService {
|
||||
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: theme.colors[8],
|
||||
tertiary: theme.colors[8],
|
||||
secondary: isDark
|
||||
? less(theme.background, 0.5).string()
|
||||
: less(theme.background, 0.125).string(),
|
||||
tertiary: more(theme.background, 0.75).string(),
|
||||
warning: theme.colors[3],
|
||||
danger: theme.colors[1],
|
||||
success: theme.colors[2],
|
||||
info: theme.colors[4],
|
||||
dark: more(theme.background, 0.5).string(),
|
||||
dark: more(theme.background, 0.75).string(),
|
||||
light: more(theme.foreground, 0.5).string(),
|
||||
link: theme.colors[8], // for .btn-link
|
||||
}
|
||||
@@ -117,6 +135,13 @@ export class ThemesService {
|
||||
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()
|
||||
@@ -125,9 +150,38 @@ export class ThemesService {
|
||||
|
||||
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, 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 {
|
||||
@@ -138,6 +192,15 @@ export class ThemesService {
|
||||
return this.findTheme(this.config.store.appearance.theme) ?? this.standardTheme
|
||||
}
|
||||
|
||||
/// @hidden
|
||||
_getActiveColorScheme (): any {
|
||||
if (this.platform.getTheme() === 'light') {
|
||||
return this.config.store.terminal.lightColorScheme
|
||||
} else {
|
||||
return this.config.store.terminal.colorScheme
|
||||
}
|
||||
}
|
||||
|
||||
applyTheme (theme: Theme): void {
|
||||
if (!this.styleElement) {
|
||||
this.styleElement = document.createElement('style')
|
||||
|
@@ -10,7 +10,7 @@ app-root {
|
||||
|
||||
&> .content {
|
||||
.tab-bar {
|
||||
background: var(--theme-bg-more);
|
||||
background: var(--theme-bg-more-2);
|
||||
|
||||
.btn-tab-bar {
|
||||
background: transparent;
|
||||
@@ -30,6 +30,7 @@ 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);
|
||||
@@ -54,11 +55,13 @@ app-root {
|
||||
opacity: .2;
|
||||
}
|
||||
|
||||
.current-tab-indicator {
|
||||
background:var(--bs-light);
|
||||
}
|
||||
|
||||
&.active {
|
||||
// color: $black;
|
||||
background: var(--bs-body-bg);
|
||||
// border-left: 1px solid $border-color;
|
||||
// border-right: 1px solid $border-color;
|
||||
color: var(--theme-fg);
|
||||
background: var(--body-bg);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -67,7 +70,7 @@ app-root {
|
||||
}
|
||||
|
||||
tab-body {
|
||||
background: var(--bs-body-bg);
|
||||
background: var(--body-bg);
|
||||
}
|
||||
|
||||
$tab-border-radius: 5px;
|
||||
@@ -78,12 +81,15 @@ $modal-footer-border-color: transparent;
|
||||
$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);
|
||||
--bs-form-control-bg: var(--theme-bg-more-2);
|
||||
--bs-emphasis-color: var(--theme-fg-less-2);
|
||||
}
|
||||
|
||||
@@ -104,8 +110,8 @@ body {
|
||||
}
|
||||
|
||||
.nav {
|
||||
--bs-nav-link-color: var(--bs-body-color);
|
||||
--bs-nav-link-hover-color: var(--theme-fg-less-2);
|
||||
--bs-nav-link-color: var(--theme-fg-more);
|
||||
--bs-nav-link-hover-color: var(--theme-fg-less);
|
||||
--bs-nav-link-disabled-color: var(--bs-gray);
|
||||
}
|
||||
|
||||
@@ -113,8 +119,8 @@ body {
|
||||
--bs-nav-tabs-border-width: 2px;
|
||||
--bs-nav-tabs-border-radius: 0;
|
||||
--bs-nav-tabs-link-hover-border-color: var(--bs-body-bg);
|
||||
--bs-nav-tabs-border-color: var(--theme-fg-less-2);
|
||||
--bs-nav-tabs-link-active-color: var(--theme-fg-less-2);
|
||||
--bs-nav-tabs-border-color: var(--theme-fg);
|
||||
--bs-nav-tabs-link-active-color: var(--theme-fg);
|
||||
|
||||
--bs-nav-tabs-link-active-bg: transparent;
|
||||
--bs-nav-tabs-link-active-border-color: transparent;
|
||||
@@ -122,8 +128,8 @@ body {
|
||||
|
||||
.nav-pills {
|
||||
--bs-nav-pills-border-radius: #{$nav-pills-border-radius};
|
||||
--bs-nav-pills-link-active-color: var(--theme-bg-more);
|
||||
--bs-nav-pills-link-active-bg: var(--bs-primary);
|
||||
--bs-nav-pills-link-active-color: var(--theme-primary-fg);
|
||||
--bs-nav-pills-link-active-bg: var(--theme-primary);
|
||||
}
|
||||
|
||||
.nav-tabs {
|
||||
@@ -167,6 +173,13 @@ body {
|
||||
}
|
||||
}
|
||||
|
||||
.dropdown-menu {
|
||||
--bs-dropdown-bg: var(--theme-bg-more);
|
||||
}
|
||||
|
||||
.progress {
|
||||
--bs-progress-height: 3px;
|
||||
}
|
||||
|
||||
tab-body {
|
||||
terminal-toolbar {
|
||||
@@ -189,20 +202,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}-less-2);
|
||||
--bs-btn-active-bg: var(--theme-#{$color}-less-2);
|
||||
--bs-btn-active-border-color: var(--theme-#{$color});
|
||||
--bs-btn-active-bg: var(--theme-#{$color}-active-bg);
|
||||
|
||||
--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}-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);
|
||||
--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);
|
||||
}
|
||||
|
||||
.alert-#{$color} {
|
||||
--bs-alert-bg: var(--theme-#{$color}-more-2);
|
||||
--bs-alert-bg: var(--theme-#{$color}-fg);
|
||||
--bs-alert-border-color: var(--theme-#{$color}-more);
|
||||
--bs-alert-color: var(--theme-#{$color});
|
||||
}
|
||||
@@ -388,6 +401,7 @@ ngx-colors-panel .opened {
|
||||
|
||||
.text-muted {
|
||||
opacity: .5;
|
||||
color: var(--theme-fg) !important;
|
||||
}
|
||||
|
||||
.form-switch .form-check-input {
|
||||
|
@@ -1,37 +1,29 @@
|
||||
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 = this.translate.instant('Standard (legacy)')
|
||||
name = _('Standard (legacy)')
|
||||
css = require('./theme.scss')
|
||||
terminalBackground = '#222a33'
|
||||
|
||||
constructor (private translate: TranslateService) {
|
||||
super()
|
||||
}
|
||||
}
|
||||
|
||||
/** @hidden */
|
||||
@Injectable()
|
||||
export class StandardCompactTheme extends Theme {
|
||||
name = this.translate.instant('Compact (legacy)')
|
||||
name = _('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'
|
||||
}
|
||||
@@ -39,12 +31,8 @@ export class PaperTheme extends Theme {
|
||||
/** @hidden */
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class NewTheme extends Theme {
|
||||
name = this.translate.instant('Follow the color scheme')
|
||||
name = _('Follow the color scheme')
|
||||
css = require('./theme.new.scss')
|
||||
terminalBackground = '#f7f1e0'
|
||||
followsColorScheme = true
|
||||
|
||||
constructor (private translate: TranslateService) {
|
||||
super()
|
||||
}
|
||||
}
|
||||
|
@@ -7,8 +7,13 @@ 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 {
|
||||
return process.platform === 'win32' && parseFloat(os.release()) >= 10 && parseInt(os.release().split('.')[2]) >= build
|
||||
const b = getWindows10Build()
|
||||
return b !== undefined && b >= build
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
||||
|
@@ -174,10 +174,10 @@ process@^0.11.10:
|
||||
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
||||
integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
|
||||
|
||||
readable-stream@4.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==
|
||||
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==
|
||||
dependencies:
|
||||
abort-controller "^3.0.0"
|
||||
buffer "^6.0.3"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tabby-electron",
|
||||
"version": "1.0.189-nightly.2",
|
||||
"version": "1.0.197-nightly.1",
|
||||
"description": "Electron-specific bindings",
|
||||
"keywords": [
|
||||
"tabby-builtin-plugin"
|
||||
@@ -12,16 +12,20 @@
|
||||
"watch": "webpack --progress --color --watch"
|
||||
},
|
||||
"files": [
|
||||
"dist"
|
||||
"dist",
|
||||
"typings"
|
||||
],
|
||||
"author": "Eugene Pankov",
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"@angular/core": "^9.1.9"
|
||||
"@angular/core": "^15",
|
||||
"tabby-local": "*"
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 392 B After Width: | Height: | Size: 392 B |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user