Compare commits

..

11 Commits

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

View File

@@ -1130,96 +1130,6 @@
"contributions": [ "contributions": [
"code" "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, "contributorsPerLine": 7,
@@ -1228,6 +1138,5 @@
"repoType": "github", "repoType": "github",
"repoHost": "https://github.com", "repoHost": "https://github.com",
"commitConvention": "none", "commitConvention": "none",
"skipCi": true, "skipCi": true
"commitType": "docs"
} }

View File

@@ -11,7 +11,7 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- name: Installing Node - name: Installing Node
uses: actions/setup-node@v3.6.0 uses: actions/setup-node@v3.5.1
with: with:
node-version: 16 node-version: 16
@@ -47,7 +47,7 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- name: Installing Node - name: Installing Node
uses: actions/setup-node@v3.6.0 uses: actions/setup-node@v3.5.1
with: with:
node-version: 16 node-version: 16
@@ -127,25 +127,11 @@ jobs:
path: artifact-zip path: artifact-zip
Linux-Build: Linux-Build:
runs-on: ubuntu-20.04 runs-on: ubuntu-18.04 # build against an older glibc for compatibility
needs: Lint needs: Lint
strategy: strategy:
matrix: matrix:
include: build-arch: [ x64, arm64, armv7l ]
- 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: steps:
- name: Checkout - name: Checkout
@@ -153,66 +139,35 @@ jobs:
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Install Node - name: Set up multiarch/qemu-user-static
uses: actions/setup-node@v3.6.0 run: docker run --rm --privileged multiarch/qemu-user-static:register --reset
with: if: matrix.build-arch != 'x64'
node-version: 18
- name: Install deps (amd64) - name: Install Node (x64)
uses: actions/setup-node@v3.5.1
with:
node-version: 16
if: matrix.build-arch == 'x64'
- name: Install deps (x64)
run: | run: |
sudo apt-get update sudo apt-get update
sudo apt-get install libarchive-tools zsh sudo apt-get install libarchive-tools zsh
- name: Install npm_modules (amd64)
run: |
npm i -g yarn npm i -g yarn
yarn --network-timeout 1000000 yarn --network-timeout 1000000
if: matrix.build-arch == 'x64' if: matrix.build-arch == 'x64'
- name: Setup Crossbuild (${{matrix.arch}}) - name: Webpack (x64)
run: | run: yarn run build
sudo apt-get update -y && sudo apt-get install schroot sbuild debootstrap -y if: matrix.build-arch == 'x64'
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
if: matrix.build-arch != 'x64' - name: Prepackage plugins (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 run: scripts/prepackage-plugins.mjs
if: ${{matrix.build-arch == 'x64'}}
- name: Build packages (${{matrix.arch}}) - name: Build packages (x64)
run: scripts/build-linux.mjs run: scripts/build-linux.mjs
if: ${{matrix.build-arch == 'x64'}}
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }} KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
@@ -223,54 +178,54 @@ jobs:
run: zsh -c 'tar czf tabby-web.tar.gz (tabby-*|web)/dist' run: zsh -c 'tar czf tabby-web.tar.gz (tabby-*|web)/dist'
if: matrix.build-arch == 'x64' if: matrix.build-arch == 'x64'
# - name: Install deps and Build (arm64) - name: Install deps and Build (arm64)
# uses: docker://multiarch/ubuntu-core:arm64-bionic uses: docker://multiarch/ubuntu-core:arm64-bionic
# with: with:
# args: > args: >
# bash -c bash -c
# "apt update && apt install curl lsb-release gnupg -y && "apt update && apt install curl lsb-release gnupg -y &&
# curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && 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 && 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 && git config --global --add safe.directory /github/workspace &&
# gem install public_suffix -v 4.0.7 && gem install public_suffix -v 4.0.7 &&
# gem install fpm --no-document && gem install fpm --no-document &&
# npm i -g yarn && npm i -g yarn &&
# cd /github/workspace && cd /github/workspace &&
# yarn --network-timeout 1000000 && yarn --network-timeout 1000000 &&
# yarn run build && yarn run build &&
# scripts/prepackage-plugins.mjs && scripts/prepackage-plugins.mjs &&
# USE_SYSTEM_FPM=true scripts/build-linux.mjs" USE_SYSTEM_FPM=true scripts/build-linux.mjs"
# env: env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }} KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
# USE_HARD_LINKS: false USE_HARD_LINKS: false
# if: matrix.build-arch == 'arm64' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags') if: matrix.build-arch == 'arm64' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags')
# - name: Install deps and Build (armv7l) - name: Install deps and Build (armv7l)
# uses: docker://multiarch/ubuntu-core:armhf-bionic uses: docker://multiarch/ubuntu-core:armhf-bionic
# with: with:
# args: > args: >
# bash -c bash -c
# "apt update && apt install curl lsb-release gnupg -y && "apt update && apt install curl lsb-release gnupg -y &&
# curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && 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 && 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 && git config --global --add safe.directory /github/workspace &&
# gem install public_suffix -v 4.0.7 && gem install public_suffix -v 4.0.7 &&
# gem install fpm --no-document && gem install fpm --no-document &&
# npm i -g yarn && npm i -g yarn &&
# cd /github/workspace && cd /github/workspace &&
# sed -i '/ \"electron\":/c\ \"electron\": \"17.0.0\",' package.json && sed -i '/ \"electron\":/c\ \"electron\": \"17.0.0\",' package.json &&
# yarn --network-timeout 1000000 && yarn --network-timeout 1000000 &&
# yarn run build && yarn run build &&
# scripts/prepackage-plugins.mjs && scripts/prepackage-plugins.mjs &&
# USE_SYSTEM_FPM=true scripts/build-linux.mjs" USE_SYSTEM_FPM=true scripts/build-linux.mjs"
# env: env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }} KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
# USE_HARD_LINKS: false USE_HARD_LINKS: false
# if: matrix.build-arch == 'arm' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags') if: matrix.build-arch == 'armv7l' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags')
- name: Upload symbols (amd64 only) - name: Upload symbols
run: | run: |
sudo npm install -g @sentry/cli --unsafe-perm sudo npm install -g @sentry/cli --unsafe-perm
./scripts/sentry-upload.mjs ./scripts/sentry-upload.mjs
@@ -290,37 +245,31 @@ jobs:
dir: 'dist' dir: 'dist'
- uses: actions/upload-artifact@master - uses: actions/upload-artifact@master
name: Upload AppImage (${{matrix.arch}}) name: Upload DEB
with: with:
name: Linux AppImage (${{matrix.arch}}) name: Linux DEB (${{matrix.build-arch}})
path: dist/*.AppImage
- uses: actions/upload-artifact@master
name: Upload DEB (${{matrix.arch}})
with:
name: Linux DEB (${{matrix.arch}})
path: dist/*.deb path: dist/*.deb
- uses: actions/upload-artifact@master - uses: actions/upload-artifact@master
name: Upload RPM (${{matrix.arch}}) name: Upload RPM
with: with:
name: Linux RPM (${{matrix.arch}}) name: Linux RPM (${{matrix.build-arch}})
path: dist/*.rpm path: dist/*.rpm
- uses: actions/upload-artifact@master - uses: actions/upload-artifact@master
name: Upload Pacman Package (${{matrix.arch}}) name: Upload Pacman Package
with: with:
name: Linux Pacman (${{matrix.arch}}) name: Linux Pacman (${{matrix.build-arch}})
path: dist/*.pacman path: dist/*.pacman
- uses: actions/upload-artifact@master - uses: actions/upload-artifact@master
name: Upload Linux tarball (${{matrix.arch}}) name: Upload Linux tarball
with: with:
name: Linux tarball (${{matrix.arch}}) name: Linux tarball (${{matrix.build-arch}})
path: dist/*.tar.gz path: dist/*.tar.gz
- uses: actions/upload-artifact@master - uses: actions/upload-artifact@master
name: Upload web tarball (amd64 only) name: Upload web tarball
with: with:
name: Web tarball name: Web tarball
path: tabby-web.tar.gz path: tabby-web.tar.gz
@@ -344,7 +293,7 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- name: Installing Node - name: Installing Node
uses: actions/setup-node@v3.6.0 uses: actions/setup-node@v3.5.1
with: with:
node-version: 16 node-version: 16

View File

@@ -12,7 +12,7 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- name: Installing Node - name: Installing Node
uses: actions/setup-node@v3.6.0 uses: actions/setup-node@v3.5.1
with: with:
node-version: 16 node-version: 16

View File

@@ -17,6 +17,8 @@ First, from within the `tabby` directory install the dependencies via yarn:
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) # 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 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
@@ -40,13 +42,13 @@ yarn start
To build an installer, first complete a "normal" build as described above and then run: To build an installer, first complete a "normal" build as described above and then run:
``` ```
node scripts/prepackage-plugins.mjs node scripts/prepackage-plugins.js
node scripts/build-windows.mjs node scripts/build-windows.js
# or # or
node scripts/build-linux.mjs node scripts/build-linux.js
# or # or
node scripts/build-macos.mjs node scripts/build-macos.js
``` ```
The artifacts will be produced in the `dist` folder. The artifacts will be produced in the `dist` folder.

View File

@@ -313,18 +313,6 @@ Dank geht an diese wunderbaren Menschen ([emoji key](https://allcontributors.org
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/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/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://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> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -315,18 +315,6 @@ Gracias a estas maravillosas personas ([emoji key](https://allcontributors.org/d
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/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/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://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> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -312,18 +312,6 @@ Terima kasih kepada mereka yang telah membantu ([emoji key](https://allcontribut
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/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/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://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> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -308,18 +308,6 @@ Grazie a queste persone meravigliose ([emoji key](https://allcontributors.org/do
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/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/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://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> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -11,24 +11,17 @@
</a> </a>
</p> </p>
---
> 👋 リモート環境の管理に困ってませんか? [WarpgateというSSH/HTTP/MySQL向けの便利な踏み台サーバー](https://github.com/warp-tech/warpgate)も作ってます。Tabbyとも相性ばっちりなので良かったらお試しください。
---- ----
### ダウンロード: ### ダウンロード:
* [最新のリリース](https://github.com/Eugeny/tabby/releases/latest) * [Latest release](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) * [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)
* [最新の開発ビルド版](https://nightly.link/Eugeny/tabby/workflows/build/master) * [Latest nightly build](https://nightly.link/Eugeny/tabby/workflows/build/master)
<br/> <br/>
<p align="center"> <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> </p>
---- ----
@@ -47,7 +40,7 @@
* 大量の出力にも止まることはありません * 大量の出力にも止まることはありません
* タブキーによる補完機能にも対応したWindows上での快適なシェル (Clink使用) * タブキーによる補完機能にも対応したWindows上での快適なシェル (Clink使用)
* SSHの機密性の高い情報と設定を保存する暗号化コンテナの搭載 * 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 --> # コンテンツ <!-- omit in toc -->
@@ -94,7 +87,7 @@
* SSH2クライアントと接続マネージャー * SSH2クライアントと接続マネージャー
* X11とポートフォワーディング * X11とポートフォワーディング
* 自動ジャンプサーバー管理 * 自動ジャンプサーバー管理
* エージェント転送PageantとWindows標準OpenSSHエージェントを含む * エージェント転送(PageantとWindows標準OpenSSHエージェントを含む)
* ログインスクリプト * ログインスクリプト
<a name="serial"></a> <a name="serial"></a>
@@ -111,7 +104,7 @@
# ポータブル機能 # ポータブル機能
Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォルダを作成すれば、ポータブルアプリとして実行することができます。 Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォルダを作成すれば、ポータブルアプリケーションとして実行することができます。
<a name="plugins"></a> <a name="plugins"></a>
@@ -123,10 +116,10 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
* [title-control](https://github.com/kbjr/terminus-title-control) - タブ名の前後に文字を入れたり指定した文字の削除をすることができます * [title-control](https://github.com/kbjr/terminus-title-control) - タブ名の前後に文字を入れたり指定した文字の削除をすることができます
* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - 一つもしくは複数のタブに手軽にコマンド送信することができます * [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - 一つもしくは複数のタブに手軽にコマンド送信することができます
* [save-output](https://github.com/Eugeny/tabby-save-output) - ターミナルの出力をファイルに保存することができます * [save-output](https://github.com/Eugeny/tabby-save-output) - ターミナルの出力をファイルに保存することができます
* [sync-config](https://github.com/starxg/terminus-sync-config) - GistやGitee設定ファイルを同期することができます * [sync-config](https://github.com/starxg/terminus-sync-config) - GistやGitee設定ファイルを同期することができます
* [clippy](https://github.com/Eugeny/tabby-clippy) - プラグインの作例として、いつも厄介なあいつが出てくるプラグイン * [clippy](https://github.com/Eugeny/tabby-clippy) - いつもあなたを悩ますプラグインの作例
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - 指定された設定からカスタマイズされたワークスペースを作成することができます * [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> <a name="themes"></a>
@@ -144,21 +137,17 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
[**packagecloud**](https://packagecloud.io)は、Debian/RPMリポジトリのホスティングを無償で提供しています [**packagecloud**](https://packagecloud.io)は、Debian/RPMリポジトリのホスティングを無償で提供しています
[![](https://user-images.githubusercontent.com/161476/200423885-7aba2202-fea7-4409-95b9-3a062ce902c7.png)](https://keygen.sh/?via=eugene)
[**keygen**](https://keygen.sh/?via=eugene)は、自動リリース機能および自動更新機能のホスティングを無償で提供しています
<a name="contributing"></a> <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> <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 --> <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start --> <!-- prettier-ignore-start -->
@@ -323,18 +312,6 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/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/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://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> </tr>
</tbody> </tbody>
</table> </table>
@@ -344,4 +321,4 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
<!-- ALL-CONTRIBUTORS-LIST:END --> <!-- ALL-CONTRIBUTORS-LIST:END -->
このプロジェクトは[all-contributors](https://github.com/all-contributors/all-contributors)の仕様に準拠しています。どのような形の貢献でも歓迎いたします このプロジェクトは[all-contributors](https://github.com/all-contributors/all-contributors)の仕様に準拠しています。どのような形の貢献でも歓迎します!

View File

@@ -302,18 +302,6 @@ Pull requests and plugins are welcome!
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/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/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://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> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -16,8 +16,6 @@
> 👋 Managing remote environments? Check out [Warpgate, my smart SSH/HTTP/MySQL bastion server](https://github.com/warp-tech/warpgate), it works great with Tabby, you'll love it. > 👋 Managing remote environments? Check out [Warpgate, my smart SSH/HTTP/MySQL bastion server](https://github.com/warp-tech/warpgate), it works great with Tabby, you'll love it.
> 👋 [Tabby-web](https://github.com/Eugeny/tabby-web) is looking for sponsors. As I can't afford to host it myself any longer, I'm looking for a sponsor to cover the hosting costs. If you're interested, please [get in touch](https://twitter.com/eugeeeeny)!
---- ----
@@ -324,18 +322,6 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/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/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://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> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -316,18 +316,6 @@ Obrigado vai para essas pessoas maravilhosas ([emoji key](https://allcontributor
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/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/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://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> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -308,18 +308,6 @@ Pull-запросы и плагины приветствуются!
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/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/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://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> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -307,18 +307,6 @@
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/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/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://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> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -1,4 +1,4 @@
import * as nodePTY from 'node-pty' import * as nodePTY from '@tabby-gang/node-pty'
import { v4 as uuidv4 } from 'uuid' import { v4 as uuidv4 } from 'uuid'
import { ipcMain } from 'electron' import { ipcMain } from 'electron'
import { Application } from './app' import { Application } from './app'

View File

@@ -92,11 +92,8 @@ export class Window {
if (this.configStore.appearance?.frame === 'native') { if (this.configStore.appearance?.frame === 'native') {
bwOptions.frame = true bwOptions.frame = true
} else { } else {
if (process.platform === 'darwin') {
bwOptions.titleBarStyle = 'hidden' bwOptions.titleBarStyle = 'hidden'
if (process.platform === 'win32') {
bwOptions.titleBarOverlay = {
color: '#00000000',
}
} }
} }
@@ -128,11 +125,7 @@ export class Window {
}) })
this.window.on('blur', () => { this.window.on('blur', () => {
if ( if ((this.configStore.appearance?.dock ?? 'off') !== 'off' && this.configStore.appearance?.dockHideOnBlur) {
(this.configStore.appearance?.dock ?? 'off') !== 'off' &&
this.configStore.appearance?.dockHideOnBlur &&
!BrowserWindow.getFocusedWindow()
) {
this.hide() this.hide()
} }
}) })
@@ -387,21 +380,6 @@ export class Window {
this.setVibrancy(enabled, type) 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) => { ipcMain.on('window-set-title', (event, title) => {
if (!this.window || event.sender !== this.window.webContents) { if (!this.window || event.sender !== this.window.webContents) {
return return

View File

@@ -15,8 +15,8 @@
"watch": "webpack --progress --color --watch" "watch": "webpack --progress --color --watch"
}, },
"dependencies": { "dependencies": {
"@electron/remote": "2.0.10", "@electron/remote": "2.0.8",
"node-pty": "^1.0", "@tabby-gang/node-pty": "^0.11.0-beta.203",
"any-promise": "^1.3.0", "any-promise": "^1.3.0",
"electron-config": "2.0.0", "electron-config": "2.0.0",
"electron-debug": "^3.2.0", "electron-debug": "^3.2.0",
@@ -32,24 +32,24 @@
"rxjs": "^7.5.7", "rxjs": "^7.5.7",
"source-map-support": "^0.5.20", "source-map-support": "^0.5.20",
"v8-compile-cache": "^2.3.0", "v8-compile-cache": "^2.3.0",
"yargs": "^17.7.2" "yargs": "^17.3.1"
}, },
"optionalDependencies": { "optionalDependencies": {
"@tabby-gang/windows-blurbehind": "^3.0.0", "@tabby-gang/windows-blurbehind": "^3.0.0",
"macos-native-processlist": "^2.1.0", "macos-native-processlist": "^2.1.0",
"patch-package": "^6.5.0", "patch-package": "^6.5.0",
"serialport": "11.0.0", "serialport": "10.5.0",
"serialport-binding-webserialapi": "^1.0.3", "serialport-binding-webserialapi": "^1.0.3",
"windows-native-registry": "^3.2.1", "windows-native-registry": "^3.2.1",
"windows-process-tree": "^0.4.0" "windows-process-tree": "^0.3.4"
}, },
"devDependencies": { "devDependencies": {
"@ngx-translate/core": "^14.0.0", "@ngx-translate/core": "^14.0.0",
"@types/mz": "2.7.4", "@types/mz": "2.7.4",
"@types/node": "20.3.1", "@types/node": "18.11.19",
"atomically": "^1.7.0", "atomically": "^1.7.0",
"filesize": "^9", "filesize": "^9",
"ngx-filesize": "^3.0.2" "ngx-filesize": "^3.0.1"
}, },
"peerDependencies": { "peerDependencies": {
"tabby-community-color-schemes": "*", "tabby-community-color-schemes": "*",

View File

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

View File

@@ -4,6 +4,4 @@ export const PLUGIN_BLACKLIST = [
'terminus-clickable-links', // now bundled with Tabby 'terminus-clickable-links', // now bundled with Tabby
'tabby-clickable-links', // now bundled with Tabby 'tabby-clickable-links', // now bundled with Tabby
'terminus-clickable-ips', // broken, functionality now bundled with Tabby 'terminus-clickable-ips', // broken, functionality now bundled with Tabby
'terminus-elastic-quick-commands', // broken and abandoned, fork of quick-commands
'terminus-elastic-quick-cmds', // broken and abandoned, fork of quick-commands
] ]

View File

@@ -27,8 +27,6 @@ const cachedBuiltinModules = {
'@angular/compiler': require('@angular/compiler'), '@angular/compiler': require('@angular/compiler'),
'@angular/core': require('@angular/core'), '@angular/core': require('@angular/core'),
'@angular/forms': require('@angular/forms'), '@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': require('@angular/platform-browser'),
'@angular/platform-browser/animations': require('@angular/platform-browser/animations'), '@angular/platform-browser/animations': require('@angular/platform-browser/animations'),
'@angular/platform-browser-dynamic': require('@angular/platform-browser-dynamic'), '@angular/platform-browser-dynamic': require('@angular/platform-browser-dynamic'),
@@ -92,43 +90,12 @@ export function initModuleLookup (userPluginsPath: string): void {
}) })
} }
const PLUGIN_PREFIX = 'tabby-' export async function findPlugins (): Promise<PluginInfo[]> {
const LEGACY_PLUGIN_PREFIX = 'terminus-' const paths = nodeModule.globalPaths
let foundPlugins: PluginInfo[] = []
async function getCandidateLocationsInPluginDir (pluginDir: any): Promise<{ pluginDir: string, packageName: string }[]> {
const candidateLocations: { pluginDir: string, packageName: string }[] = [] const candidateLocations: { pluginDir: string, packageName: string }[] = []
const PREFIX = 'tabby-'
if (await fs.exists(pluginDir)) { const LEGACY_PREFIX = 'terminus-'
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 = [] const processedPaths = []
@@ -139,38 +106,57 @@ async function getPluginCandidateLocation (paths: any): Promise<{ pluginDir: str
processedPaths.push(pluginDir) processedPaths.push(pluginDir)
pluginDir = normalizePath(pluginDir) pluginDir = normalizePath(pluginDir)
if (!await fs.exists(pluginDir)) {
candidateLocationsPromises.push(getCandidateLocationsInPluginDir(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 })
}
}
} }
const candidateLocations: { pluginDir: string, packageName: string }[] = [] for (const { pluginDir, packageName } of candidateLocations) {
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 pluginPath = path.join(pluginDir, packageName)
const infoPath = path.join(pluginPath, 'package.json') const infoPath = path.join(pluginPath, 'package.json')
if (!await fs.exists(infoPath)) {
const name = packageName.startsWith(PLUGIN_PREFIX) ? packageName.substring(PLUGIN_PREFIX.length) : packageName.substring(LEGACY_PLUGIN_PREFIX.length) 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'))) {
return null
} }
let author = info.author const name = packageName.startsWith(PREFIX) ? packageName.substring(PREFIX.length) : packageName.substring(LEGACY_PREFIX.length)
author = author.name || author
if (builtinModules.includes(packageName) && pluginDir !== builtinPluginsPath) {
continue
}
console.log(`Found ${name} in ${pluginDir}`) console.log(`Found ${name} in ${pluginDir}`)
return { 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
}
}
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, name: name,
packageName: packageName, packageName: packageName,
isBuiltin: pluginDir === builtinPluginsPath, isBuiltin: pluginDir === builtinPluginsPath,
@@ -180,43 +166,9 @@ async function parsePluginInfo (pluginDir: string, packageName: string): Promise
author, author,
path: pluginPath, path: pluginPath,
info, info,
} })
} catch (error) { } catch (error) {
console.error('Cannot load package info for', packageName) 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
}
foundPluginsPromises.push(parsePluginInfo(pluginDir, packageName))
}
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
}
}
foundPlugins.push(pluginInfo)
} }
} }
@@ -227,18 +179,11 @@ export async function findPlugins (): Promise<PluginInfo[]> {
export async function loadPlugins (foundPlugins: PluginInfo[], progress: ProgressCallback): Promise<any[]> { export async function loadPlugins (foundPlugins: PluginInfo[], progress: ProgressCallback): Promise<any[]> {
const plugins: any[] = [] const plugins: any[] = []
const pluginsPromises: Promise<any>[] = []
let index = 0
const setProgress = function () {
index++
progress(index, foundPlugins.length)
}
progress(0, 1) progress(0, 1)
let index = 0
for (const foundPlugin of foundPlugins) { for (const foundPlugin of foundPlugins) {
pluginsPromises.push(new Promise(x => {
console.info(`Loading ${foundPlugin.name}: ${nodeRequire.resolve(foundPlugin.path)}`) console.info(`Loading ${foundPlugin.name}: ${nodeRequire.resolve(foundPlugin.path)}`)
progress(index, foundPlugins.length)
try { try {
const packageModule = nodeRequire(foundPlugin.path) const packageModule = nodeRequire(foundPlugin.path)
if (foundPlugin.packageName.startsWith('tabby-')) { if (foundPlugin.packageName.startsWith('tabby-')) {
@@ -248,15 +193,12 @@ export async function loadPlugins (foundPlugins: PluginInfo[], progress: Progres
pluginModule.pluginName = foundPlugin.name pluginModule.pluginName = foundPlugin.name
pluginModule.bootstrap = packageModule.bootstrap pluginModule.bootstrap = packageModule.bootstrap
plugins.push(pluginModule) plugins.push(pluginModule)
await new Promise(x => setTimeout(x, 50))
} catch (error) { } catch (error) {
console.error(`Could not load ${foundPlugin.name}:`, error) console.error(`Could not load ${foundPlugin.name}:`, error)
} }
setProgress() index++
setTimeout(x, 50)
}))
} }
await Promise.all(pluginsPromises)
progress(1, 1) progress(1, 1)
return plugins return plugins
} }

View File

@@ -47,7 +47,7 @@ const config = {
mz: 'commonjs mz', mz: 'commonjs mz',
npm: 'commonjs npm', npm: 'commonjs npm',
'node:os': 'commonjs os', 'node:os': 'commonjs os',
'node-pty': 'commonjs node-pty', '@tabby-gang/node-pty': 'commonjs @tabby-gang/node-pty',
path: 'commonjs path', path: 'commonjs path',
util: 'commonjs util', util: 'commonjs util',
'source-map-support': 'commonjs source-map-support', 'source-map-support': 'commonjs source-map-support',

View File

@@ -2,10 +2,10 @@
# yarn lockfile v1 # yarn lockfile v1
"@electron/remote@2.0.10": "@electron/remote@2.0.8":
version "2.0.10" version "2.0.8"
resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-2.0.10.tgz#133e2f607b1861ac249bd78b5abd1e961feed713" resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-2.0.8.tgz#85ff321f0490222993207106e2f720273bb1a5c3"
integrity sha512-3SFKKaQXcyWgwmibud+UqJl/XlHOgLcI3fwtB9pNelPSJAcTxocOJrF6FaxBIQaj1+R05Di6xuAswZpXAW7xhA== integrity sha512-P10v3+iFCIvEPeYzTWWGwwHmqWnjoh8RYnbtZAb3RlQefy4guagzIwcWtfftABIfm6JJTNQf4WPSKWZOpLmHXw==
"@iarna/cli@^1.2.0": "@iarna/cli@^1.2.0":
version "1.2.0" version "1.2.0"
@@ -38,16 +38,16 @@
"@serialport/bindings-interface" "^1.2.1" "@serialport/bindings-interface" "^1.2.1"
debug "^4.3.3" debug "^4.3.3"
"@serialport/bindings-cpp@11.0.1": "@serialport/bindings-cpp@10.8.0":
version "11.0.1" version "10.8.0"
resolved "https://registry.yarnpkg.com/@serialport/bindings-cpp/-/bindings-cpp-11.0.1.tgz#38afa6105ceb7888c6a2af2782822fca9130d65a" resolved "https://registry.yarnpkg.com/@serialport/bindings-cpp/-/bindings-cpp-10.8.0.tgz#79507b57022ac264e963e7fbf3647a3821569a20"
integrity sha512-3I1mniVg3osYuIUXxU0jB5AHPsxWmErmc3JC3WfUSlfXsjWMHkHfFzbW9Scuv/z/6DLCJIDyltabRa2FoW2qsQ== integrity sha512-OMQNJz5kJblbmZN5UgJXLwi2XNtVLxSKmq5VyWuXQVsUIJD4l9UGHnLPqM5LD9u3HPZgDI5w7iYN7gxkQNZJUw==
dependencies: dependencies:
"@serialport/bindings-interface" "1.2.2" "@serialport/bindings-interface" "1.2.2"
"@serialport/parser-readline" "10.5.0" "@serialport/parser-readline" "^10.2.1"
debug "4.3.4" debug "^4.3.2"
node-addon-api "6.1.0" node-addon-api "^5.0.0"
node-gyp-build "4.6.0" node-gyp-build "^4.3.0"
"@serialport/bindings-interface@1.2.2": "@serialport/bindings-interface@1.2.2":
version "1.2.2" version "1.2.2"
@@ -59,77 +59,65 @@
resolved "https://registry.yarnpkg.com/@serialport/bindings-interface/-/bindings-interface-1.2.1.tgz#1ee80b0951ef4e4fd8a5a186621feff046aa2faf" resolved "https://registry.yarnpkg.com/@serialport/bindings-interface/-/bindings-interface-1.2.1.tgz#1ee80b0951ef4e4fd8a5a186621feff046aa2faf"
integrity sha512-63Dyqz2gtryRDDckFusOYqLYhR3Hq/M4sEdbF9i/VsvDb6T+tNVgoAKUZ+FMrXXKnCSu+hYbk+MTc0XQANszxw== integrity sha512-63Dyqz2gtryRDDckFusOYqLYhR3Hq/M4sEdbF9i/VsvDb6T+tNVgoAKUZ+FMrXXKnCSu+hYbk+MTc0XQANszxw==
"@serialport/parser-byte-length@11.0.0": "@serialport/parser-byte-length@10.5.0":
version "11.0.0" version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-byte-length/-/parser-byte-length-11.0.0.tgz#074e6ed6b18d7a61edc75dba22d3115e8f37dd8c" resolved "https://registry.yarnpkg.com/@serialport/parser-byte-length/-/parser-byte-length-10.5.0.tgz#f3d4c1c7923222df2f3d3c7c8aaaa207fe373b49"
integrity sha512-rExsdFKdzOIHOBqTwzxUF1A9nrluVIZKZOtvMq5i0Hc3euooGdmkx0VXYNRlI2rd6kJLTL2P+uIR+ZtCTRyT+w== integrity sha512-eHhr4lHKboq1OagyaXAqkemQ1XyoqbLQC8XJbvccm95o476TmEdW5d7AElwZV28kWprPW68ZXdGF2VXCkJgS2w==
"@serialport/parser-cctalk@11.0.0": "@serialport/parser-cctalk@10.5.0":
version "11.0.0" version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-cctalk/-/parser-cctalk-11.0.0.tgz#6a5e2b299e8f1ef00308980e45ecdae23825181e" resolved "https://registry.yarnpkg.com/@serialport/parser-cctalk/-/parser-cctalk-10.5.0.tgz#0ee88db0768a361b7cfb9a394b74e480c38e1992"
integrity sha512-eN1MvEIFwI4GedWJhte6eWF+NZtrjchZbMf0CE6NV9TRzJI1KLnFf90ZOj/mhGuANojX4sqWfJKQXwN6E8VSHQ== integrity sha512-Iwsdr03xmCKAiibLSr7b3w6ZUTBNiS+PwbDQXdKU/clutXjuoex83XvsOtYVcNZmwJlVNhAUbkG+FJzWwIa4DA==
"@serialport/parser-delimiter@10.5.0": "@serialport/parser-delimiter@10.5.0":
version "10.5.0" version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-delimiter/-/parser-delimiter-10.5.0.tgz#b0d93100cdfd0619d020a427d652495073f3b828" 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== integrity sha512-/uR/yT3jmrcwnl2FJU/2ySvwgo5+XpksDUR4NF/nwTS5i3CcuKS+FKi/tLzy1k8F+rCx5JzpiK+koqPqOUWArA==
"@serialport/parser-delimiter@11.0.0": "@serialport/parser-inter-byte-timeout@10.5.0":
version "11.0.0" version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-delimiter/-/parser-delimiter-11.0.0.tgz#e830c6bb49723d4446131277dc3243b502d09388" resolved "https://registry.yarnpkg.com/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-10.5.0.tgz#8665ee5e6138f794ac055e83ef2d1c3653a577c0"
integrity sha512-aZLJhlRTjSmEwllLG7S4J8s8ctRAS0cbvCpO87smLvl3e4BgzbVgF6Z6zaJd3Aji2uSiYgfedCdNc4L6W+1E2g== integrity sha512-WPvVlSx98HmmUF9jjK6y9mMp3Wnv6JQA0cUxLeZBgS74TibOuYG3fuUxUWGJALgAXotOYMxfXSezJ/vSnQrkhQ==
"@serialport/parser-inter-byte-timeout@11.0.0": "@serialport/parser-packet-length@10.5.0":
version "11.0.0" version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-11.0.0.tgz#baf7223bf3d49d159c82386928c763bfecf8f70f" resolved "https://registry.yarnpkg.com/@serialport/parser-packet-length/-/parser-packet-length-10.5.0.tgz#4c4d733bdff8cc4749f2bd750e42e66f8f478def"
integrity sha512-RLgqZC50IET6FtEIt6Oi0vdRsesSBWLNwB7ldzR9OzyXKgK0XHRzqKqbB0u5Q+tC5OScdWeiQ2AO6jooKUZtsw== integrity sha512-jkpC/8w4/gUBRa2Teyn7URv1D7T//0lGj27/4u9AojpDVXsR6dtdcTG7b7dNirXDlOrSLvvN7aS5/GNaRlEByw==
"@serialport/parser-packet-length@11.0.0": "@serialport/parser-readline@10.5.0", "@serialport/parser-readline@^10.2.1":
version "11.0.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-packet-length/-/parser-packet-length-11.0.0.tgz#ec06934b40b45b8f5eb04ba5527e98a1062c2a20"
integrity sha512-6ZkOiaCooabpV/EM7ttSRbisbDWpGEf7Yxyr13t28LicYR43THRdjdMZcRnWxEM/jpwfskkLLXAR6wziVpKrlw==
"@serialport/parser-readline@10.5.0":
version "10.5.0" version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-readline/-/parser-readline-10.5.0.tgz#df23365ae7f45679b1735deae26f72ba42802862" resolved "https://registry.yarnpkg.com/@serialport/parser-readline/-/parser-readline-10.5.0.tgz#df23365ae7f45679b1735deae26f72ba42802862"
integrity sha512-0aXJknodcl94W9zSjvU+sLdXiyEG2rqjQmvBWZCr8wJZjWEtv3RgrnYiWq4i2OTOyC8C/oPK8ZjpBjQptRsoJQ== integrity sha512-0aXJknodcl94W9zSjvU+sLdXiyEG2rqjQmvBWZCr8wJZjWEtv3RgrnYiWq4i2OTOyC8C/oPK8ZjpBjQptRsoJQ==
dependencies: dependencies:
"@serialport/parser-delimiter" "10.5.0" "@serialport/parser-delimiter" "10.5.0"
"@serialport/parser-readline@11.0.0": "@serialport/parser-ready@10.5.0":
version "11.0.0" version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-readline/-/parser-readline-11.0.0.tgz#c2c8c88e163d2abf7c0ffddbc1845336444e3454" resolved "https://registry.yarnpkg.com/@serialport/parser-ready/-/parser-ready-10.5.0.tgz#1d9029f57b1abd664cb468e21bfccf7b44c6e8ea"
integrity sha512-rRAivhRkT3YO28WjmmG4FQX6L+KMb5/ikhyylRfzWPw0nSXy97+u07peS9CbHqaNvJkMhH1locp2H36aGMOEIA== integrity sha512-QIf65LTvUoxqWWHBpgYOL+soldLIIyD1bwuWelukem2yDZVWwEjR288cLQ558BgYxH4U+jLAQahhqoyN1I7BaA==
dependencies:
"@serialport/parser-delimiter" "11.0.0"
"@serialport/parser-ready@11.0.0": "@serialport/parser-regex@10.5.0":
version "11.0.0" version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-ready/-/parser-ready-11.0.0.tgz#802e7189d9e5d13df70d3aa1559403b72fcfa700" resolved "https://registry.yarnpkg.com/@serialport/parser-regex/-/parser-regex-10.5.0.tgz#f98eab6e3d9bc99086269e9acf39a82db36d245f"
integrity sha512-lSsCPIctoc5kADCKnZDYBz1j69TsFqtnaWUicBzUAIAoUXpYKeYld8YX5NrvjViuVfIJeiqLZeGjxOWe5fqQqQ== integrity sha512-9jnr9+PCxRoLjtGs7uxwsFqvho+rxuJlW6ZWSB7oqfzshEZWXtTJgJRgac/RuLft4hRlrmRz5XU40i3uoL4HKw==
"@serialport/parser-regex@11.0.0": "@serialport/parser-slip-encoder@10.5.0":
version "11.0.0" version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-regex/-/parser-regex-11.0.0.tgz#bb247297851b1a789f4dde1c4ad48c39d6db7ed6" resolved "https://registry.yarnpkg.com/@serialport/parser-slip-encoder/-/parser-slip-encoder-10.5.0.tgz#cb79ac0fda1fc87f049690ff7b498c787da67991"
integrity sha512-aKuc/+/KE9swahTbYpSuOsQa7LggPx7jhfobJLPVVbAic80OpfCIY+MKr6Ax4R6UtQwF90O5Yk6OEmbbvtEmiA== integrity sha512-wP8m+uXQdkWSa//3n+VvfjLthlabwd9NiG6kegf0fYweLWio8j4pJRL7t9eTh2Lbc7zdxuO0r8ducFzO0m8CQw==
"@serialport/parser-slip-encoder@11.0.0": "@serialport/parser-spacepacket@10.5.0":
version "11.0.0" version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-slip-encoder/-/parser-slip-encoder-11.0.0.tgz#f1c3f56e04c497ca89059c69ea79411b30e8da60" resolved "https://registry.yarnpkg.com/@serialport/parser-spacepacket/-/parser-spacepacket-10.5.0.tgz#2fc077c0ec16a9532c511ad5f2ab12d588796bc7"
integrity sha512-3ZI/swd2it20vmu2tzqDbkyE4dqy+kExEDY6T33YQ210HDKPVhqj7FAVGo5P++MZ3dup1of11t4P9UPBNkuJnQ== integrity sha512-BEZ/HAEMwOd8xfuJSeI/823IR/jtnThovh7ils90rXD4DPL1ZmrP4abAIEktwe42RobZjIPfA4PaVfyO0Fjfhg==
"@serialport/parser-spacepacket@11.0.0": "@serialport/stream@10.5.0":
version "11.0.0" version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-spacepacket/-/parser-spacepacket-11.0.0.tgz#7737aaa1397db4bf820160dd2f7dd0c9df5f74a0" resolved "https://registry.yarnpkg.com/@serialport/stream/-/stream-10.5.0.tgz#cda8fb3e8d03094b0962a3d14b73adfcd591be58"
integrity sha512-+hqRckrTEqz+/uAUZY0Tq6YIRyCl4oQOH1MeVzKiFiGNjZP7hDJCDoY7LTr9CeJhxvcT0ItTbtjGBqGumV8fxg== integrity sha512-gbcUdvq9Kyv2HsnywS7QjnEB28g+6OGB5Z8TLP7X+UPpoMIWoUsoQIq5Kt0ZTgMoWn3JGM2lqwTsSHF+1qhniA==
"@serialport/stream@11.0.0":
version "11.0.0"
resolved "https://registry.yarnpkg.com/@serialport/stream/-/stream-11.0.0.tgz#9887db096b51fabe1919a591b920b06f7580e8ee"
integrity sha512-Zty7B8C1H2XRnay2mVmW1ygEHXRHXQDcaC5wAVvOZMbQSc7ye03rMlPvviDS+pGxU2t2A2bMo34CUrRduSBong==
dependencies: dependencies:
"@serialport/bindings-interface" "1.2.2" "@serialport/bindings-interface" "1.2.2"
debug "4.3.4" debug "^4.3.2"
"@serialport/stream@^9.0.2": "@serialport/stream@^9.0.2":
version "9.2.4" version "9.2.4"
@@ -138,6 +126,13 @@
dependencies: dependencies:
debug "^4.3.2" 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": "@tabby-gang/windows-blurbehind@^3.0.0":
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/@tabby-gang/windows-blurbehind/-/windows-blurbehind-3.0.0.tgz#48d409c2eb14a12c867b70de5ee4d6769ef45e8f" resolved "https://registry.yarnpkg.com/@tabby-gang/windows-blurbehind/-/windows-blurbehind-3.0.0.tgz#48d409c2eb14a12c867b70de5ee4d6769ef45e8f"
@@ -152,10 +147,15 @@
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
"@types/node@*", "@types/node@20.3.1": "@types/node@*":
version "20.3.1" version "18.7.23"
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.23.tgz#75c580983846181ebe5f4abc40fe9dfb2d65665f"
integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg== integrity sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==
"@types/node@18.11.19":
version "18.11.19"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.19.tgz#35e26df9ec441ab99d73e99e9aca82935eea216d"
integrity sha512-YUgMWAQBWLObABqrvx8qKO1enAvBUdjZOAWQ5grBAkp5LQv45jBvYKZ3oFS9iKRCQyFjqw6iuEa1vmFqtxYLZw==
"@types/node@^10.12.18": "@types/node@^10.12.18":
version "10.17.60" version "10.17.60"
@@ -583,13 +583,13 @@ cliui@^5.0.0:
strip-ansi "^5.2.0" strip-ansi "^5.2.0"
wrap-ansi "^5.1.0" wrap-ansi "^5.1.0"
cliui@^8.0.1: cliui@^7.0.2:
version "8.0.1" version "7.0.4"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
dependencies: dependencies:
string-width "^4.2.0" string-width "^4.2.0"
strip-ansi "^6.0.1" strip-ansi "^6.0.0"
wrap-ansi "^7.0.0" wrap-ansi "^7.0.0"
clone@^1.0.2: clone@^1.0.2:
@@ -773,13 +773,6 @@ debug@3.1.0:
dependencies: dependencies:
ms "2.0.0" 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: debug@^3.1.0:
version "3.2.7" version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
@@ -787,6 +780,13 @@ debug@^3.1.0:
dependencies: dependencies:
ms "^2.1.1" 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: debuglog@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz"
@@ -798,9 +798,9 @@ decamelize@^1.1.1, decamelize@^1.2.0:
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
decode-uri-component@^0.2.0: decode-uri-component@^0.2.0:
version "0.2.2" version "0.2.0"
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
decompress-response@^6.0.0: decompress-response@^6.0.0:
version "6.0.0" version "6.0.0"
@@ -2257,7 +2257,7 @@ mz@^2.7.0:
object-assign "^4.0.1" object-assign "^4.0.1"
thenify-all "^1.0.0" thenify-all "^1.0.0"
nan@^2.17.0, "nan@github:jkleinsc/nan#remove_accessor_signature": nan@^2.13.2, nan@^2.16.0, "nan@github:jkleinsc/nan#remove_accessor_signature":
version "2.16.0" version "2.16.0"
resolved "https://codeload.github.com/jkleinsc/nan/tar.gz/6a2f95a6a2209d8aa7542fb18099fd808a802059" resolved "https://codeload.github.com/jkleinsc/nan/tar.gz/6a2f95a6a2209d8aa7542fb18099fd808a802059"
@@ -2273,10 +2273,10 @@ native-process-working-directory@^1.0.2:
dependencies: dependencies:
node-addon-api "^3.1.0" node-addon-api "^3.1.0"
ngx-filesize@^3.0.2: ngx-filesize@^3.0.1:
version "3.0.2" version "3.0.1"
resolved "https://registry.yarnpkg.com/ngx-filesize/-/ngx-filesize-3.0.2.tgz#aab5ce9ce6eaa421f0393447d9c01653f3839a2c" resolved "https://registry.yarnpkg.com/ngx-filesize/-/ngx-filesize-3.0.1.tgz#620933ae181a1128905404e43b26abb99accba90"
integrity sha512-0h1gzcQYeNcGzDVcQcdhKK8RCrXdIXn4foT/DcXRwoht0KL3FQemJFKZowZmXESL7cnLlETaeRSnsHuqfchoWg== integrity sha512-792I4fiG9EEPYjGib2+YTYAzfWIlccfy8uXNSXFFepuAntoS+eijLwnl0m7ajcQuNgbTtwEf9VmYIPN8mS3jqQ==
dependencies: dependencies:
tslib "^2.3.0" tslib "^2.3.0"
@@ -2304,16 +2304,16 @@ node-addon-api@3.1.0, node-addon-api@^3.0.2, node-addon-api@^3.1.0:
resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz" resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz"
integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw== 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: node-addon-api@^4.0.0, node-addon-api@^4.3.0:
version "4.3.0" version "4.3.0"
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== 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: node-fetch-npm@^2.0.2:
version "2.0.4" version "2.0.4"
resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4" resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4"
@@ -2323,10 +2323,10 @@ node-fetch-npm@^2.0.2:
json-parse-better-errors "^1.0.0" json-parse-better-errors "^1.0.0"
safe-buffer "^5.1.1" safe-buffer "^5.1.1"
node-gyp-build@4.6.0: node-gyp-build@^4.3.0:
version "4.6.0" version "4.3.0"
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3"
integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==
node-gyp@^5.0.2, node-gyp@^5.1.0: node-gyp@^5.0.2, node-gyp@^5.1.0:
version "5.1.1" version "5.1.1"
@@ -2345,13 +2345,6 @@ node-gyp@^5.0.2, node-gyp@^5.1.0:
tar "^4.4.12" tar "^4.4.12"
which "^1.3.1" 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: nopt@^4.0.1, nopt@^4.0.3:
version "4.0.3" version "4.0.3"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
@@ -3011,9 +3004,9 @@ qrcode-terminal@^0.12.0:
integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==
qs@~6.5.2: qs@~6.5.2:
version "6.5.3" version "6.5.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz"
integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
query-string@^6.8.2: query-string@^6.8.2:
version "6.13.8" version "6.13.8"
@@ -3299,25 +3292,25 @@ serialport-binding-webserialapi@^1.0.3:
"@serialport/binding-abstract" "^9.0.2" "@serialport/binding-abstract" "^9.0.2"
"@serialport/stream" "^9.0.2" "@serialport/stream" "^9.0.2"
serialport@11.0.0: serialport@10.5.0:
version "11.0.0" version "10.5.0"
resolved "https://registry.yarnpkg.com/serialport/-/serialport-11.0.0.tgz#a4114fc60e91b23f133ec459345b7be637b1e8ef" resolved "https://registry.yarnpkg.com/serialport/-/serialport-10.5.0.tgz#b85f614def6e8914e5865c798b0555330903a0f8"
integrity sha512-bxs3XejQcOHWpzPAaXMhxVRlbem6fjNUrux3ToqrGvFR6BcjOYhqE5CsHOuutv37kmhmnuHrn+/hN+1BpTmaFg== integrity sha512-7OYLDsu5i6bbv3lU81pGy076xe0JwpK6b49G6RjNvGibstUqQkI+I3/X491yBGtf4gaqUdOgoU1/5KZ/XxL4dw==
dependencies: dependencies:
"@serialport/binding-mock" "10.2.2" "@serialport/binding-mock" "10.2.2"
"@serialport/bindings-cpp" "11.0.1" "@serialport/bindings-cpp" "10.8.0"
"@serialport/parser-byte-length" "11.0.0" "@serialport/parser-byte-length" "10.5.0"
"@serialport/parser-cctalk" "11.0.0" "@serialport/parser-cctalk" "10.5.0"
"@serialport/parser-delimiter" "11.0.0" "@serialport/parser-delimiter" "10.5.0"
"@serialport/parser-inter-byte-timeout" "11.0.0" "@serialport/parser-inter-byte-timeout" "10.5.0"
"@serialport/parser-packet-length" "11.0.0" "@serialport/parser-packet-length" "10.5.0"
"@serialport/parser-readline" "11.0.0" "@serialport/parser-readline" "10.5.0"
"@serialport/parser-ready" "11.0.0" "@serialport/parser-ready" "10.5.0"
"@serialport/parser-regex" "11.0.0" "@serialport/parser-regex" "10.5.0"
"@serialport/parser-slip-encoder" "11.0.0" "@serialport/parser-slip-encoder" "10.5.0"
"@serialport/parser-spacepacket" "11.0.0" "@serialport/parser-spacepacket" "10.5.0"
"@serialport/stream" "11.0.0" "@serialport/stream" "10.5.0"
debug "4.3.4" debug "^4.3.3"
set-blocking@^2.0.0, set-blocking@~2.0.0: set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0" version "2.0.0"
@@ -3735,7 +3728,12 @@ tough-cookie@~2.5.0:
psl "^1.1.28" psl "^1.1.28"
punycode "^2.1.1" punycode "^2.1.1"
tslib@^2.1.0, tslib@^2.3.0: tslib@^2.1.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
tslib@^2.3.0:
version "2.5.0" version "2.5.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
@@ -3941,12 +3939,12 @@ windows-native-registry@^3.2.1:
dependencies: dependencies:
node-addon-api "^3.1.0" node-addon-api "^3.1.0"
windows-process-tree@^0.4.0: windows-process-tree@^0.3.4:
version "0.4.0" version "0.3.4"
resolved "https://registry.yarnpkg.com/windows-process-tree/-/windows-process-tree-0.4.0.tgz#31ac49c5da557e628ce7e37a5800972173d3349a" resolved "https://registry.yarnpkg.com/windows-process-tree/-/windows-process-tree-0.3.4.tgz#6bc4b8010129c30ff95bcd333b9f94744dd3c4fb"
integrity sha512-9LunDnc1WwuhyLeTAXMFX8wbActGJtDCBaiapQXFYk/nO4W4X9YxOKV5g/lQL3XX69QYxveDbjVVrdnTt1qqCQ== integrity sha512-rtSX73i9OnkDxSdBP9c1YBunEwheZdO/hjRwNk9uSoWqO92x0zDRGfIIK0MtUn8gZZD+2kPEVpj5MmfNl7JpJA==
dependencies: dependencies:
nan "^2.17.0" nan "^2.13.2"
worker-farm@^1.6.0, worker-farm@^1.7.0: worker-farm@^1.6.0, worker-farm@^1.7.0:
version "1.7.0" version "1.7.0"
@@ -4055,10 +4053,10 @@ yargs-parser@^15.0.1:
camelcase "^5.0.0" camelcase "^5.0.0"
decamelize "^1.2.0" decamelize "^1.2.0"
yargs-parser@^21.1.1: yargs-parser@^21.0.0:
version "21.1.1" version "21.0.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55"
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==
yargs-parser@^7.0.0: yargs-parser@^7.0.0:
version "7.0.0" version "7.0.0"
@@ -4084,18 +4082,18 @@ yargs@^14.2.3:
y18n "^4.0.0" y18n "^4.0.0"
yargs-parser "^15.0.1" yargs-parser "^15.0.1"
yargs@^17.7.2: yargs@^17.3.1:
version "17.7.2" version "17.3.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9"
integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==
dependencies: dependencies:
cliui "^8.0.1" cliui "^7.0.2"
escalade "^3.1.1" escalade "^3.1.1"
get-caller-file "^2.0.5" get-caller-file "^2.0.5"
require-directory "^2.1.1" require-directory "^2.1.1"
string-width "^4.2.3" string-width "^4.2.3"
y18n "^5.0.5" y18n "^5.0.5"
yargs-parser "^21.1.1" yargs-parser "^21.0.0"
yargs@^8.0.2: yargs@^8.0.2:
version "8.0.2" version "8.0.2"

View File

@@ -2,7 +2,7 @@
const fs = require('fs') const fs = require('fs')
const path = require('path') const path = require('path')
const notarizer = require('@electron/notarize') const notarizer = require('electron-notarize')
module.exports = async function (params) { module.exports = async function (params) {
// notarize the app on Mac OS only. // notarize the app on Mac OS only.

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@ msgid ""
msgstr "" msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
#: tabby-local/src/components/terminalTab.component.ts:111 #: tabby-local/src/components/terminalTab.component.ts:112
msgid "\"{command}\" is still running. Close?" msgid "\"{command}\" is still running. Close?"
msgstr "" msgstr ""
@@ -31,7 +31,7 @@ msgstr ""
msgid "Accessibility" msgid "Accessibility"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20
msgid "Acrylic background" msgid "Acrylic background"
msgstr "" msgstr ""
@@ -116,7 +116,7 @@ msgstr ""
msgid "Ask a question" msgid "Ask a question"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:20 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13
msgid "Ask before closing the browser tab" msgid "Ask before closing the browser tab"
msgstr "" msgstr ""
@@ -158,12 +158,12 @@ msgstr ""
msgid "Available" msgid "Available"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:35 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28
msgid "Background type" msgid "Background type"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14 #: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:14
#: tabby-serial/src/components/serialTab.component.ts:111 #: tabby-serial/src/components/serialTab.component.ts:112
#: tabby-serial/src/profiles.ts:86 #: tabby-serial/src/profiles.ts:86
msgid "Baud rate" msgid "Baud rate"
msgstr "" msgstr ""
@@ -180,7 +180,7 @@ msgstr ""
msgid "Blue" msgid "Blue"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:32
msgid "Blur" msgid "Blur"
msgstr "" msgstr ""
@@ -188,8 +188,8 @@ msgstr ""
msgid "Bold font weight" msgid "Bold font weight"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:132 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:125
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:80 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:73
msgid "Bottom" msgid "Bottom"
msgstr "" msgstr ""
@@ -214,12 +214,12 @@ msgstr ""
#: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7 #: locale/tmp-html/tabby-ssh/src/components/sftpDeleteModal.component.html:7
#: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:32 #: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:32
#: tabby-electron/src/services/updater.service.ts:134 #: tabby-electron/src/services/updater.service.ts:134
#: tabby-local/src/components/terminalTab.component.ts:116 #: tabby-local/src/components/terminalTab.component.ts:117
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:117 #: tabby-settings/src/components/configSyncSettingsTab.component.ts:117
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79 #: tabby-settings/src/components/configSyncSettingsTab.component.ts:79
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99 #: tabby-settings/src/components/configSyncSettingsTab.component.ts:99
#: tabby-ssh/src/sftpContextMenu.ts:40 #: tabby-ssh/src/sftpContextMenu.ts:40
#: tabby-terminal/src/api/baseTerminalTab.component.ts:484 #: tabby-terminal/src/api/baseTerminalTab.component.ts:480
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
@@ -294,7 +294,7 @@ msgstr ""
msgid "Close tabs to the right" msgid "Close tabs to the right"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:175
msgid "Close the window after closing the last tab" msgid "Close the window after closing the last tab"
msgstr "" msgstr ""
@@ -327,7 +327,7 @@ msgstr ""
msgid "Commands" msgid "Commands"
msgstr "" msgstr ""
#: tabby-core/src/theme.ts:21 #: tabby-core/src/theme.ts:20
msgid "Compact (legacy)" msgid "Compact (legacy)"
msgstr "" msgstr ""
@@ -339,8 +339,8 @@ msgstr ""
msgid "Config downloaded" msgid "Config downloaded"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:115 #: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:109
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:120 #: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:114
msgid "Config file" msgid "Config file"
msgstr "" msgstr ""
@@ -361,7 +361,7 @@ msgstr ""
msgid "Connect through a proxy server" msgid "Connect through a proxy server"
msgstr "" msgstr ""
#: tabby-core/src/index.ts:214 #: tabby-core/src/index.ts:212
#: tabby-core/src/services/profiles.service.ts:178 #: tabby-core/src/services/profiles.service.ts:178
msgid "Connect to \"%s\"..." msgid "Connect to \"%s\"..."
msgstr "" msgstr ""
@@ -371,7 +371,7 @@ msgid "Connect to a different host first and use it as a proxy"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19 #: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:19
#: tabby-serial/src/components/serialTab.component.ts:65 #: tabby-serial/src/components/serialTab.component.ts:66
#: tabby-ssh/src/components/sshTab.component.ts:143 #: tabby-ssh/src/components/sshTab.component.ts:143
#: tabby-telnet/src/components/telnetTab.component.ts:72 #: tabby-telnet/src/components/telnetTab.component.ts:72
msgid "Connecting" msgid "Connecting"
@@ -393,14 +393,10 @@ msgstr ""
msgid "Context menu" msgid "Context menu"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14 #: tabby-terminal/src/api/baseTerminalTab.component.ts:225
msgid "Controls the amount of space between elements" #: tabby-terminal/src/api/baseTerminalTab.component.ts:233
msgstr "" #: tabby-terminal/src/api/baseTerminalTab.component.ts:549
#: tabby-terminal/src/api/baseTerminalTab.component.ts:770
#: 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 #: tabby-terminal/src/tabContextMenu.ts:30
msgid "Copied" msgid "Copied"
msgstr "" msgstr ""
@@ -443,7 +439,7 @@ msgstr ""
msgid "Create directory" msgid "Create directory"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:83
msgid "Current" msgid "Current"
msgstr "" msgstr ""
@@ -495,7 +491,7 @@ msgstr ""
msgid "Default profile settings" msgid "Default profile settings"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124 #: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:118
msgid "Defaults" msgid "Defaults"
msgstr "" msgstr ""
@@ -576,11 +572,11 @@ msgstr ""
msgid "Disable dynamic tab title" msgid "Disable dynamic tab title"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:218 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211
msgid "Disable fluent background while dragging" msgid "Disable fluent background while dragging"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197
msgid "Disable GPU acceleration" msgid "Disable GPU acceleration"
msgstr "" msgstr ""
@@ -603,7 +599,7 @@ msgstr ""
msgid "Display images via Sixel escape sequences" msgid "Display images via Sixel escape sequences"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:85 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78
msgid "Display on" msgid "Display on"
msgstr "" msgstr ""
@@ -621,23 +617,23 @@ msgstr ""
msgid "Do not remember" msgid "Do not remember"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90
msgid "Dock always on top" msgid "Dock always on top"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:60
msgid "Dock the terminal" msgid "Dock the terminal"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:97
msgid "Docked terminal size" msgid "Docked terminal size"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:104
msgid "Docked terminal space" msgid "Docked terminal space"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:64 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57
msgid "Docking" msgid "Docking"
msgstr "" msgstr ""
@@ -661,7 +657,7 @@ msgstr ""
msgid "Duplicate" msgid "Duplicate"
msgstr "" msgstr ""
#: tabby-local/src/tabContextMenu.ts:122 #: tabby-local/src/tabContextMenu.ts:123
msgid "Duplicate as administrator" msgid "Duplicate as administrator"
msgstr "" msgstr ""
@@ -695,7 +691,7 @@ msgstr ""
msgid "Enable automatic installation of updates when they become available." msgid "Enable automatic installation of updates when they become available."
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204
msgid "Enable fluent background option" msgid "Enable fluent background option"
msgstr "" msgstr ""
@@ -744,7 +740,7 @@ msgstr ""
msgid "Example:" msgid "Example:"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205
msgid "Experimental Windows 10 background style known to cause issues" msgid "Experimental Windows 10 background style known to cause issues"
msgstr "" msgstr ""
@@ -768,11 +764,11 @@ msgstr ""
msgid "Filter" msgid "Filter"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:147 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:140
msgid "Fixed" msgid "Fixed"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:219 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:212
msgid "Fluent background sometimes causes drag lag" msgid "Fluent background sometimes causes drag lag"
msgstr "" msgstr ""
@@ -792,7 +788,7 @@ msgstr ""
msgid "Focus all tabs at once (broadcast)" msgid "Focus all tabs at once (broadcast)"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189
msgid "Focus follows mouse" msgid "Focus follows mouse"
msgstr "" msgstr ""
@@ -832,7 +828,7 @@ msgstr ""
msgid "Focus the pane on the right" msgid "Focus the pane on the right"
msgstr "" msgstr ""
#: tabby-core/src/theme.ts:43 #: tabby-core/src/theme.ts:42
msgid "Follow the color scheme" msgid "Follow the color scheme"
msgstr "" msgstr ""
@@ -840,7 +836,7 @@ msgstr ""
msgid "Font" msgid "Font"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:183
msgid "For keyboard shortcuts" msgid "For keyboard shortcuts"
msgstr "" msgstr ""
@@ -884,7 +880,7 @@ msgstr ""
msgid "Frontend" msgid "Frontend"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:54
msgid "Full" msgid "Full"
msgstr "" msgstr ""
@@ -906,7 +902,7 @@ msgstr ""
msgid "Get it from the Tabby Web settings window" msgid "Get it from the Tabby Web settings window"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:29 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:22
msgid "Gives the window a blurred transparent background" msgid "Gives the window a blurred transparent background"
msgstr "" msgstr ""
@@ -922,7 +918,7 @@ msgstr ""
msgid "Group" msgid "Group"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:194
msgid "Hacks" msgid "Hacks"
msgstr "" msgstr ""
@@ -939,23 +935,23 @@ msgstr ""
msgid "Hexadecimal" msgid "Hexadecimal"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:176 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:169
msgid "Hide tab close button" msgid "Hide tab close button"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:158 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:151
msgid "Hide tab index" msgid "Hide tab index"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:170 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:163
msgid "Hide tab options button" msgid "Hide tab options button"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:118 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:111
msgid "Hide window on focus loss" msgid "Hide window on focus loss"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112
msgid "Hides the docked terminal when you click away." msgid "Hides the docked terminal when you click away."
msgstr "" msgstr ""
@@ -1001,7 +997,7 @@ msgstr ""
msgid "Icon" msgid "Icon"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:138
msgid "id.tab-width.dynamic" msgid "id.tab-width.dynamic"
msgstr "" msgstr ""
@@ -1049,7 +1045,7 @@ msgstr ""
msgid "Interactive" msgid "Interactive"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:130 #: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:124
msgid "Invalid syntax" msgid "Invalid syntax"
msgstr "" msgstr ""
@@ -1079,7 +1075,7 @@ msgstr ""
msgid "Keep Alive Interval (Milliseconds)" msgid "Keep Alive Interval (Milliseconds)"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:91
msgid "Keep docked terminal always on top" msgid "Keep docked terminal always on top"
msgstr "" msgstr ""
@@ -1099,7 +1095,7 @@ msgstr ""
msgid "Keyboard-interactive auth" msgid "Keyboard-interactive auth"
msgstr "" msgstr ""
#: tabby-local/src/components/terminalTab.component.ts:115 #: tabby-local/src/components/terminalTab.component.ts:116
msgid "Kill" msgid "Kill"
msgstr "" msgstr ""
@@ -1125,8 +1121,8 @@ msgstr ""
msgid "Learn how to allow Tabby to detect remote shell's working directory." msgid "Learn how to allow Tabby to detect remote shell's working directory."
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:127
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:69
#: tabby-core/src/tabContextMenu.ts:80 #: tabby-core/src/tabContextMenu.ts:80
msgid "Left" msgid "Left"
msgstr "" msgstr ""
@@ -1190,7 +1186,6 @@ msgstr ""
msgid "Maximize the active pane" msgid "Maximize the active pane"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:93
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70 #: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:70
msgid "Minimum contrast ratio" msgid "Minimum contrast ratio"
msgstr "" msgstr ""
@@ -1215,7 +1210,7 @@ msgstr ""
msgid "Move to \"Ungrouped\"" msgid "Move to \"Ungrouped\""
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:197 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:190
msgid "Moving the mouse over an inactive pane will cause it to activate" msgid "Moving the mouse over an inactive pane will cause it to activate"
msgstr "" msgstr ""
@@ -1232,11 +1227,11 @@ msgstr ""
msgid "Name for the new directory" msgid "Name for the new directory"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:57 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:50
msgid "Native" msgid "Native"
msgstr "" msgstr ""
#: tabby-local/src/tabContextMenu.ts:103 #: tabby-local/src/tabContextMenu.ts:104
msgid "New admin tab" msgid "New admin tab"
msgstr "" msgstr ""
@@ -1257,7 +1252,7 @@ msgstr ""
msgid "New profile" msgid "New profile"
msgstr "" msgstr ""
#: tabby-local/src/tabContextMenu.ts:30 #: tabby-local/src/tabContextMenu.ts:31
msgid "New profile name" msgid "New profile name"
msgstr "" msgstr ""
@@ -1270,7 +1265,7 @@ msgid "New tab: {profile}"
msgstr "" msgstr ""
#: tabby-local/src/buttonProvider.ts:20 #: tabby-local/src/buttonProvider.ts:20
#: tabby-local/src/tabContextMenu.ts:77 #: tabby-local/src/tabContextMenu.ts:78
msgid "New terminal" msgid "New terminal"
msgstr "" msgstr ""
@@ -1278,11 +1273,11 @@ msgstr ""
msgid "New window" msgid "New window"
msgstr "" msgstr ""
#: tabby-electron/src/services/dockMenu.service.ts:62 #: tabby-local/src/services/dockMenu.service.ts:62
msgid "New Window" msgid "New Window"
msgstr "" msgstr ""
#: tabby-local/src/tabContextMenu.ts:87 #: tabby-local/src/tabContextMenu.ts:88
msgid "New with profile" msgid "New with profile"
msgstr "" msgstr ""
@@ -1328,7 +1323,7 @@ msgstr ""
msgid "Number of lines kept in the buffer" msgid "Number of lines kept in the buffer"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:72 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:65
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137 #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60 #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60
msgid "Off" msgid "Off"
@@ -1342,7 +1337,7 @@ msgstr ""
msgid "On GitHub Discussions" msgid "On GitHub Discussions"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:39
msgid "Opacity" msgid "Opacity"
msgstr "" msgstr ""
@@ -1375,11 +1370,11 @@ msgstr ""
msgid "Orange" msgid "Orange"
msgstr "" msgstr ""
#: tabby-electron/src/shells/macDefault.ts:25 #: tabby-local/src/shells/macDefault.ts:25
msgid "OS default" msgid "OS default"
msgstr "" msgstr ""
#: tabby-electron/src/shells/winDefault.ts:43 #: tabby-local/src/shells/winDefault.ts:43
msgid "OS default ({name})" msgid "OS default ({name})"
msgstr "" msgstr ""
@@ -1419,18 +1414,14 @@ msgstr ""
msgid "Overwrite the local config and start syncing?" msgid "Overwrite the local config and start syncing?"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182
msgid "Pane resize step" msgid "Pane resize step"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:186 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:179
msgid "Panes" msgid "Panes"
msgstr "" msgstr ""
#: tabby-core/src/theme.ts:35
msgid "Paper (legacy)"
msgstr ""
#: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38 #: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:38
msgid "Parity" msgid "Parity"
msgstr "" msgstr ""
@@ -1449,7 +1440,7 @@ msgid "Password"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62 #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62
#: tabby-terminal/src/api/baseTerminalTab.component.ts:483 #: tabby-terminal/src/api/baseTerminalTab.component.ts:479
#: tabby-terminal/src/tabContextMenu.ts:35 #: tabby-terminal/src/tabContextMenu.ts:35
msgid "Paste" msgid "Paste"
msgstr "" msgstr ""
@@ -1462,7 +1453,7 @@ msgstr ""
msgid "Paste if no selection, else copy" msgid "Paste if no selection, else copy"
msgstr "" msgstr ""
#: tabby-terminal/src/api/baseTerminalTab.component.ts:490 #: tabby-terminal/src/api/baseTerminalTab.component.ts:486
msgid "Paste multiple lines?" msgid "Paste multiple lines?"
msgstr "" msgstr ""
@@ -1491,7 +1482,7 @@ msgstr ""
msgid "Port" msgid "Port"
msgstr "" msgstr ""
#: tabby-serial/src/components/serialTab.component.ts:70 #: tabby-serial/src/components/serialTab.component.ts:71
msgid "Port opened" msgid "Port opened"
msgstr "" msgstr ""
@@ -1500,7 +1491,7 @@ msgstr ""
msgid "Ports" msgid "Ports"
msgstr "" msgstr ""
#: tabby-serial/src/components/serialTab.component.ts:85 #: tabby-serial/src/components/serialTab.component.ts:86
#: tabby-ssh/src/components/sshTab.component.ts:172 #: tabby-ssh/src/components/sshTab.component.ts:172
#: tabby-telnet/src/components/telnetTab.component.ts:53 #: tabby-telnet/src/components/telnetTab.component.ts:53
msgid "Press any key to reconnect" msgid "Press any key to reconnect"
@@ -1510,7 +1501,7 @@ msgstr ""
msgid "Press the key now" msgid "Press the key now"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14
msgid "Prevents accidental closing" msgid "Prevents accidental closing"
msgstr "" msgstr ""
@@ -1536,7 +1527,7 @@ msgstr ""
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2 #: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:2
#: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4 #: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:4
#: tabby-electron/src/services/dockMenu.service.ts:40 #: tabby-local/src/services/dockMenu.service.ts:40
msgid "Profiles" msgid "Profiles"
msgstr "" msgstr ""
@@ -1561,7 +1552,7 @@ msgstr ""
msgid "Puts all of Tabby's configuration into the vault" msgid "Puts all of Tabby's configuration into the vault"
msgstr "" msgstr ""
#: tabby-core/src/index.ts:213 #: tabby-core/src/index.ts:211
#: tabby-core/src/services/profiles.service.ts:177 #: tabby-core/src/services/profiles.service.ts:177
msgid "Quick connect" msgid "Quick connect"
msgstr "" msgstr ""
@@ -1581,7 +1572,7 @@ msgstr ""
#: tabby-core/src/services/profiles.service.ts:120 #: tabby-core/src/services/profiles.service.ts:120
#: tabby-core/src/services/profiles.service.ts:134 #: tabby-core/src/services/profiles.service.ts:134
#: tabby-electron/src/services/dockMenu.service.ts:28 #: tabby-local/src/services/dockMenu.service.ts:28
msgid "Recent" msgid "Recent"
msgstr "" msgstr ""
@@ -1668,7 +1659,7 @@ msgstr ""
msgid "Restart tab" msgid "Restart tab"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:140 #: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:134
msgid "Restart the app to apply changes" msgid "Restart the app to apply changes"
msgstr "" msgstr ""
@@ -1680,8 +1671,8 @@ msgstr ""
msgid "Reuse session for multiple tabs" msgid "Reuse session for multiple tabs"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:136 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:129
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:71
#: tabby-core/src/tabContextMenu.ts:78 #: tabby-core/src/tabContextMenu.ts:78
msgid "Right" msgid "Right"
msgstr "" msgstr ""
@@ -1704,11 +1695,11 @@ msgstr ""
msgid "Save a password in the keychain" msgid "Save a password in the keychain"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:129 #: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:123
msgid "Save and apply" msgid "Save and apply"
msgstr "" msgstr ""
#: tabby-local/src/tabContextMenu.ts:27 #: tabby-local/src/tabContextMenu.ts:28
msgid "Save as profile" msgid "Save as profile"
msgstr "" msgstr ""
@@ -1716,7 +1707,7 @@ msgstr ""
msgid "Save layout as profile" msgid "Save layout as profile"
msgstr "" msgstr ""
#: tabby-local/src/tabContextMenu.ts:48 #: tabby-local/src/tabContextMenu.ts:49
msgid "Saved" msgid "Saved"
msgstr "" msgstr ""
@@ -1790,7 +1781,7 @@ msgstr ""
msgid "Select file storage" msgid "Select file storage"
msgstr "" msgstr ""
#: tabby-core/src/index.ts:225 #: tabby-core/src/index.ts:223
msgid "Select profile" msgid "Select profile"
msgstr "" msgstr ""
@@ -1854,7 +1845,7 @@ msgstr ""
msgid "Shell" msgid "Shell"
msgstr "" msgstr ""
#: tabby-terminal/src/api/baseTerminalTab.component.ts:555 #: tabby-terminal/src/api/baseTerminalTab.component.ts:551
msgid "Shell does not support current path detection" msgid "Shell does not support current path detection"
msgstr "" msgstr ""
@@ -1878,11 +1869,11 @@ msgstr ""
msgid "Show command selector" msgid "Show command selector"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:132 #: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:126
msgid "Show config file" msgid "Show config file"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:131 #: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:125
msgid "Show defaults" msgid "Show defaults"
msgstr "" msgstr ""
@@ -1894,7 +1885,7 @@ msgstr ""
msgid "Show pane labels (for rearranging)" msgid "Show pane labels (for rearranging)"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:164 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:157
msgid "Show profile icon on tab" msgid "Show profile icon on tab"
msgstr "" msgstr ""
@@ -1914,7 +1905,7 @@ msgstr ""
msgid "Show Serial connections" msgid "Show Serial connections"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:145
msgid "Show tabs in fullscreen mode" msgid "Show tabs in fullscreen mode"
msgstr "" msgstr ""
@@ -1938,8 +1929,8 @@ msgstr ""
msgid "Slow feed" msgid "Slow feed"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:68 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:61
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:86 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:79
msgid "Snaps the window to a side of the screen" msgid "Snaps the window to a side of the screen"
msgstr "" msgstr ""
@@ -1965,10 +1956,6 @@ msgstr ""
msgid "Source code" msgid "Source code"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:13
msgid "Spaciness"
msgstr ""
#: tabby-core/src/tabContextMenu.ts:75 #: tabby-core/src/tabContextMenu.ts:75
msgid "Split" msgid "Split"
msgstr "" msgstr ""
@@ -2011,7 +1998,7 @@ msgstr ""
msgid "SSH password for {user}@{host}:{port}" msgid "SSH password for {user}@{host}:{port}"
msgstr "" msgstr ""
#: tabby-core/src/theme.ts:9 #: tabby-core/src/theme.ts:8
msgid "Standard (legacy)" msgid "Standard (legacy)"
msgstr "" msgstr ""
@@ -2106,15 +2093,15 @@ msgstr ""
msgid "Tabby news and updates on Twitter" msgid "Tabby news and updates on Twitter"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:116
msgid "Tabs" msgid "Tabs"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:126 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:119
msgid "Tabs location" msgid "Tabs location"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:141 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134
msgid "Tabs width" msgid "Tabs width"
msgstr "" msgstr ""
@@ -2122,7 +2109,7 @@ msgstr ""
msgid "Telnet session" msgid "Telnet session"
msgstr "" msgstr ""
#: tabby-terminal/src/api/baseTerminalTab.component.ts:204 #: tabby-terminal/src/api/baseTerminalTab.component.ts:200
#: tabby-terminal/src/settings.ts:43 #: tabby-terminal/src/settings.ts:43
msgid "Terminal" msgid "Terminal"
msgstr "" msgstr ""
@@ -2159,11 +2146,11 @@ msgstr ""
msgid "These apply to all profiles of a given type" msgid "These apply to all profiles of a given type"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:59 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52
msgid "Thin" msgid "Thin"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:205 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:198
msgid "Tick this if you're experiencing aliasing, ghosting or other visual issues" msgid "Tick this if you're experiencing aliasing, ghosting or other visual issues"
msgstr "" msgstr ""
@@ -2183,8 +2170,8 @@ msgstr ""
msgid "Toggles the Tabby window visibility" msgid "Toggles the Tabby window visibility"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:130 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:123
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:74 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:67
msgid "Top" msgid "Top"
msgstr "" msgstr ""
@@ -2254,8 +2241,8 @@ msgstr ""
msgid "Use ConPTY" msgid "Use ConPTY"
msgstr "" msgstr ""
#: tabby-electron/src/shells/linuxDefault.ts:31 #: tabby-local/src/shells/linuxDefault.ts:31
#: tabby-electron/src/shells/linuxDefault.ts:38 #: tabby-local/src/shells/linuxDefault.ts:38
msgid "User default" msgid "User default"
msgstr "" msgstr ""
@@ -2308,7 +2295,7 @@ msgstr ""
msgid "Version: {version}" msgid "Version: {version}"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:28 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:21
msgid "Vibrancy" msgid "Vibrancy"
msgstr "" msgstr ""
@@ -2348,28 +2335,24 @@ msgstr ""
msgid "When WinSCP is detected, you can launch an SCP session from the context menu." msgid "When WinSCP is detected, you can launch an SCP session from the context menu."
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:53 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:46
msgid "Whether a custom window or an OS native window should be used" msgid "Whether a custom window or an OS native window should be used"
msgstr "" 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 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:2
#: tabby-settings/src/settings.ts:30 #: tabby-settings/src/settings.ts:30
msgid "Window" msgid "Window"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:112 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105
msgid "Window dimension along the edge" msgid "Window dimension along the edge"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:105 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:98
msgid "Window dimension away from the edge" msgid "Window dimension away from the edge"
msgstr "" msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:45
msgid "Window frame" msgid "Window frame"
msgstr "" msgstr ""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,22 +1,20 @@
{ {
"devDependencies": { "devDependencies": {
"@angular/animations": "^15.2.6", "@angular/animations": "^15.1.3",
"@angular/cdk": "^15.2.6", "@angular/cdk": "^15.1.3",
"@angular/common": "^15.2.6", "@angular/common": "^15.1.3",
"@angular/compiler": "^15.2.6", "@angular/compiler": "^15.1.3",
"@angular/compiler-cli": "^15.2.6", "@angular/compiler-cli": "^15.1.3",
"@angular/core": "^15.2.6", "@angular/core": "^15.1.3",
"@angular/forms": "^15.2.6", "@angular/forms": "^15.1.3",
"@angular/localize": "^15.2.9", "@angular/platform-browser": "^15.1.3",
"@angular/platform-browser": "^15.2.6", "@angular/platform-browser-dynamic": "^15.1.3",
"@angular/platform-browser-dynamic": "^15.2.6",
"@biesbjerg/ngx-translate-extract-marker": "^1.0.0", "@biesbjerg/ngx-translate-extract-marker": "^1.0.0",
"@electron/notarize": "^1.2.3", "@fortawesome/fontawesome-free": "^6.2.0",
"@fortawesome/fontawesome-free": "^6.4.0", "@ng-bootstrap/ng-bootstrap": "^14.0.1",
"@ng-bootstrap/ng-bootstrap": "^14.1.0", "@ngtools/webpack": "^15.1.4",
"@ngtools/webpack": "^15.2.5",
"@popperjs/core": "^2.11.6", "@popperjs/core": "^2.11.6",
"@sentry/cli": "^2.18.1", "@sentry/cli": "^1.74.3",
"@sentry/electron": "^2.5.4", "@sentry/electron": "^2.5.4",
"@tabby-gang/to-string-loader": "^1.1.7-beta.2", "@tabby-gang/to-string-loader": "^1.1.7-beta.2",
"@types/deep-equal": "1.0.1", "@types/deep-equal": "1.0.1",
@@ -24,29 +22,30 @@
"@types/electron-debug": "^2.1.0", "@types/electron-debug": "^2.1.0",
"@types/fs-extra": "^9.0.13", "@types/fs-extra": "^9.0.13",
"@types/js-yaml": "^4.0.5", "@types/js-yaml": "^4.0.5",
"@types/node": "20.3.1", "@types/node": "16.0.1",
"@types/webpack-env": "^1.18.0", "@types/webpack-env": "^1.18.0",
"@typescript-eslint/eslint-plugin": "^5.45.0", "@typescript-eslint/eslint-plugin": "^5.45.0",
"@typescript-eslint/parser": "^5.54.1", "@typescript-eslint/parser": "^5.45.0",
"apply-loader": "2.0.0", "apply-loader": "2.0.0",
"axios": "^1.4.0", "axios": "^0.27.2",
"babel-loader": "^9.1.2", "babel-loader": "^9.1.2",
"browserify-sign": "^4.2.1", "browserify-sign": "^4.2.1",
"clone-deep": "^4.0.1", "clone-deep": "^4.0.1",
"compare-versions": "^5", "compare-versions": "^5",
"core-js": "^3.31.0", "core-js": "^3.21.1",
"core-js-pure": "^3.21.1", "core-js-pure": "^3.21.1",
"cross-env": "7.0.3", "cross-env": "7.0.3",
"css-loader": "^6.7.3", "css-loader": "^6.7.3",
"deep-equal": "2.0.5", "deep-equal": "2.0.5",
"electron": "^25.3.0", "electron": "22.3.1",
"electron-builder": "^24.0.0-alpha.1", "electron-builder": "^24.0.0-alpha.1",
"electron-download": "^4.1.1", "electron-download": "^4.1.1",
"electron-installer-snap": "^5.1.0", "electron-installer-snap": "^5.1.0",
"electron-notarize": "^1.2.2",
"electron-rebuild": "^3.2.9", "electron-rebuild": "^3.2.9",
"eslint": "^8.38.0", "eslint": "^8.29.0",
"eslint-import-resolver-typescript": "^3.5.2", "eslint-import-resolver-typescript": "^3.5.2",
"eslint-plugin-import": "^2.27.5", "eslint-plugin-import": "^2.26.0",
"file-loader": "^6.2.0", "file-loader": "^6.2.0",
"gettext-extractor": "^3.5.4", "gettext-extractor": "^3.5.4",
"graceful-fs": "^4.2.10", "graceful-fs": "^4.2.10",
@@ -55,7 +54,7 @@
"lru-cache": "^6.0.0", "lru-cache": "^6.0.0",
"macos-release": "^3.1.0", "macos-release": "^3.1.0",
"ngx-toastr": "^16.0.2", "ngx-toastr": "^16.0.2",
"node-abi": "^3.45.0", "node-abi": "^3.33.0",
"npmlog": "6.0.2", "npmlog": "6.0.2",
"npx": "^10.2.2", "npx": "^10.2.2",
"patch-package": "^6.4.7", "patch-package": "^6.4.7",
@@ -68,7 +67,7 @@
"pug-static-loader": "2.0.0", "pug-static-loader": "2.0.0",
"raw-loader": "4.0.2", "raw-loader": "4.0.2",
"rxjs": "^7.5.7", "rxjs": "^7.5.7",
"sass": "^1.63.4", "sass": "^1.58.0",
"sass-loader": "^13.2.0", "sass-loader": "^13.2.0",
"shell-quote": "^1.7.4", "shell-quote": "^1.7.4",
"shelljs": "0.8.5", "shelljs": "0.8.5",
@@ -85,20 +84,19 @@
"tslib": "^2.5.0", "tslib": "^2.5.0",
"typedoc": "^0.22.18", "typedoc": "^0.22.18",
"typescript": "^4.9.5", "typescript": "^4.9.5",
"utils-decorators": "^2.0.6", "utils-decorators": "^1.10.4",
"val-loader": "5.0.1", "val-loader": "5.0.1",
"webpack": "^5.86.0", "webpack": "^5.75.0",
"webpack-bundle-analyzer": "^4.7.0", "webpack-bundle-analyzer": "^4.7.0",
"webpack-cli": "^5.0.1", "webpack-cli": "^5.0.1",
"yaml-loader": "0.8.0", "yaml-loader": "0.8.0",
"zone.js": "^0.13.0" "zone.js": "^0.11.5"
}, },
"resolutions": { "resolutions": {
"*/pug": "^3", "*/pug": "^3",
"lzma-native": "^8.0.0", "lzma-native": "^8.0.0",
"*/node-abi": "^3.33.0", "*/node-abi": "^3.33.0",
"**/graceful-fs": "^4.2.4", "**/graceful-fs": "^4.2.4"
"nan": "2.17.0"
}, },
"scripts": { "scripts": {
"build": "npm run build:typings && node scripts/build-modules.mjs", "build": "npm run build:typings && node scripts/build-modules.mjs",

View File

@@ -9,7 +9,7 @@ process.env.ARCH = (process.env.ARCH || process.arch) === 'arm' ? 'armv7l' : pro
builder({ builder({
dir: true, dir: true,
linux: ['deb', 'tar.gz', 'rpm', 'pacman', 'appimage'], linux: ['deb', 'tar.gz', 'rpm', 'pacman'],
armv7l: process.env.ARCH === 'armv7l', armv7l: process.env.ARCH === 'armv7l',
arm64: process.env.ARCH === 'arm64', arm64: process.env.ARCH === 'arm64',
config: { config: {

View File

@@ -9,7 +9,7 @@ sh.exec(`${sentryCli} releases new ${vars.version}`)
if (process.platform === 'darwin') { if (process.platform === 'darwin') {
for (const path of [ for (const path of [
'app/node_modules/@serialport/bindings/build/Release/bindings.node', 'app/node_modules/@serialport/bindings/build/Release/bindings.node',
'app/node_modules/node-pty/build/Release/pty.node', 'app/node_modules/@tabby-gang/node-pty/build/Release/pty.node',
'app/node_modules/fontmanager-redux/build/Release/fontmanager.node', 'app/node_modules/fontmanager-redux/build/Release/fontmanager.node',
'app/node_modules/macos-native-processlist/build/Release/native.node', 'app/node_modules/macos-native-processlist/build/Release/native.node',
]) { ]) {

View File

@@ -3,8 +3,6 @@ import * as fs from 'fs'
import * as semver from 'semver' import * as semver from 'semver'
import * as childProcess from 'child_process' 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' import * as url from 'url'
const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
@@ -27,8 +25,8 @@ export const builtinPlugins = [
'tabby-ssh', 'tabby-ssh',
'tabby-serial', 'tabby-serial',
'tabby-telnet', 'tabby-telnet',
'tabby-local',
'tabby-electron', 'tabby-electron',
'tabby-local',
'tabby-plugin-manager', 'tabby-plugin-manager',
'tabby-linkifier', 'tabby-linkifier',
] ]
@@ -60,21 +58,21 @@ export const keygenConfig = {
win32: { win32: {
x64: 'f481b9d6-d5da-4970-b926-f515373e986f', x64: 'f481b9d6-d5da-4970-b926-f515373e986f',
arm64: '950999b9-371c-419b-b291-938c5e4d364c', arm64: '950999b9-371c-419b-b291-938c5e4d364c',
}[process.env.ARCH], }[process.env.ARCH ?? process.arch],
darwin: { darwin: {
arm64: '98fbadee-c707-4cd6-9d99-56683595a846', arm64: '98fbadee-c707-4cd6-9d99-56683595a846',
x86_64: 'f5a48841-d5b8-4b7b-aaa7-cf5bffd36461', x86_64: 'f5a48841-d5b8-4b7b-aaa7-cf5bffd36461',
x64: 'f5a48841-d5b8-4b7b-aaa7-cf5bffd36461', x64: 'f5a48841-d5b8-4b7b-aaa7-cf5bffd36461',
}[process.env.ARCH], }[process.env.ARCH ?? process.arch],
linux: { linux: {
x64: '7bf45071-3031-4a26-9f2e-72604308313e', x64: '7bf45071-3031-4a26-9f2e-72604308313e',
arm64: '39e3c736-d4d4-4fbf-a201-324b7bab0d17', arm64: '39e3c736-d4d4-4fbf-a201-324b7bab0d17',
armv7l: '50ae0a82-7f47-4fa4-b0a8-b0d575ce9409', armv7l: '50ae0a82-7f47-4fa4-b0a8-b0d575ce9409',
armhf: '7df5aa12-04ab-4075-a0fe-93b0bbea9643', armhf: '7df5aa12-04ab-4075-a0fe-93b0bbea9643',
}[process.env.ARCH], }[process.env.ARCH ?? process.arch],
}[process.platform], }[process.platform],
} }
if (!keygenConfig.product) { if (!keygenConfig.product) {
throw new Error(`Unrecognized platform ${process.platform}/${process.env.ARCH}`) throw new Error(`Unrecognized platform ${process.platform}/${process.env.ARCH ?? process.arch}`)
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-community-color-schemes", "name": "tabby-community-color-schemes",
"version": "1.0.197-nightly.1", "version": "1.0.189-nightly.2",
"description": "Community color schemes for Tabby", "description": "Community color schemes for Tabby",
"keywords": [ "keywords": [
"tabby-builtin-plugin" "tabby-builtin-plugin"
@@ -17,7 +17,7 @@
"author": "Eugene Pankov", "author": "Eugene Pankov",
"license": "MIT", "license": "MIT",
"peerDependencies": { "peerDependencies": {
"@angular/core": "^15", "@angular/core": "^9.1.9",
"tabby-core": "*", "tabby-core": "*",
"tabby-terminal": "*" "tabby-terminal": "*"
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-core", "name": "tabby-core",
"version": "1.0.197-nightly.1", "version": "1.0.189-nightly.0",
"description": "Tabby core", "description": "Tabby core",
"keywords": [ "keywords": [
"tabby-builtin-plugin" "tabby-builtin-plugin"
@@ -12,7 +12,6 @@
"watch": "webpack --progress --color --watch" "watch": "webpack --progress --color --watch"
}, },
"files": [ "files": [
"dist",
"typings" "typings"
], ],
"author": "Eugene Pankov", "author": "Eugene Pankov",
@@ -26,16 +25,16 @@
"messageformat": "^2.3.0", "messageformat": "^2.3.0",
"mixpanel": "^0.17.0", "mixpanel": "^0.17.0",
"ngx-translate-messageformat-compiler": "^4.11.0", "ngx-translate-messageformat-compiler": "^4.11.0",
"readable-stream": "4.4.0", "readable-stream": "4.2.0",
"uuid": "^9.0.0" "uuid": "^9.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/animations": "^15", "@angular/animations": "^9.1.9",
"@angular/common": "^15", "@angular/common": "^9.1.11",
"@angular/core": "^15", "@angular/core": "^9.1.9",
"@angular/forms": "^15", "@angular/forms": "^9.1.11",
"@angular/platform-browser": "^15", "@angular/platform-browser": "^9.1.11",
"@angular/platform-browser-dynamic": "^15", "@angular/platform-browser-dynamic": "^9.1.11",
"rxjs": "^7" "rxjs": "^6.6.3"
} }
} }

View File

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

View File

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

View File

@@ -27,7 +27,7 @@ export class CoreCommandProvider extends CommandProvider {
async provide (): Promise<Command[]> { async provide (): Promise<Command[]> {
return [ return [
{ {
id: 'core:profile-selector', id: 'profile-selector',
locations: [CommandLocation.LeftToolbar, CommandLocation.StartPage], locations: [CommandLocation.LeftToolbar, CommandLocation.StartPage],
label: this.translate.instant('Profiles & connections'), label: this.translate.instant('Profiles & connections'),
icon: this.hostApp.platform === Platform.Web icon: this.hostApp.platform === Platform.Web
@@ -35,8 +35,7 @@ export class CoreCommandProvider extends CommandProvider {
: require('./icons/profiles.svg'), : require('./icons/profiles.svg'),
run: async () => this.activate(), run: async () => this.activate(),
}, },
...this.profilesService.getRecentProfiles().map((profile, index) => ({ ...this.profilesService.getRecentProfiles().map(profile => ({
id: `core:recent-profile-${index}`,
label: profile.name, label: profile.name,
locations: [CommandLocation.StartPage], locations: [CommandLocation.StartPage],
icon: require('./icons/history.svg'), icon: require('./icons/history.svg'),

View File

@@ -1,20 +1,16 @@
title-bar( title-bar(
*ngIf='ready && !hostWindow.isFullscreen && config.store.appearance.frame == "full" && config.store.appearance.dock == "off"', *ngIf='ready && !hostWindow.isFullscreen && config.store.appearance.frame == "full" && config.store.appearance.dock == "off"',
(dblclick)='hostWindow.toggleMaximize()', (dblclick)='hostWindow.toggleMaximize()',
[hideControls]='hostApp.platform !== Platform.Linux && !hostWindow.isFullscreen',
[class.inset]='hostApp.platform == Platform.macOS && !hostWindow.isFullscreen' [class.inset]='hostApp.platform == Platform.macOS && !hostWindow.isFullscreen'
) )
.content( .content(
*ngIf='ready', *ngIf='ready',
[class.tabs-on-top]='config.store.appearance.tabsLocation == "top" || config.store.appearance.tabsLocation == "left"', [class.tabs-on-top]='config.store.appearance.tabsLocation == "top" || config.store.appearance.tabsLocation == "left"',
[class.tabs-on-left]='hasVerticalTabs() && config.store.appearance.tabsLocation == "left"', [class.tabs-on-side]='hasVerticalTabs()',
[class.tabs-titlebar-enabled]='config.store.appearance.frame == "full"',
[class.tabs-on-right]='hasVerticalTabs() && config.store.appearance.tabsLocation == "right"',
) )
.tab-bar( .tab-bar(
*ngIf='!hostWindow.isFullscreen || config.store.appearance.tabsInFullscreen', *ngIf='!hostWindow.isFullscreen || config.store.appearance.tabsInFullscreen',
[class.tab-bar-no-controls-overlay]='hostApp.platform == Platform.macOS',
(dblclick)='hostWindow.toggleMaximize()' (dblclick)='hostWindow.toggleMaximize()'
) )
.inset.background(*ngIf='hostApp.platform == Platform.macOS \ .inset.background(*ngIf='hostApp.platform == Platform.macOS \
@@ -41,12 +37,14 @@ title-bar(
.btn-group.background .btn-group.background
.d-flex( .d-flex(
*ngFor='let button of leftToolbarButtons' *ngFor='let button of leftToolbarButtons',
ngbDropdown
) )
button.btn.btn-secondary.btn-tab-bar( button.btn.btn-secondary.btn-tab-bar(
[title]='button.label', [title]='button.label',
(click)='button.run && button.run()', (click)='button.run && button.run()',
[fastHtmlBind]='button.icon' [fastHtmlBind]='button.icon',
ngbDropdownToggle,
) )
.d-flex( .d-flex(
@@ -55,7 +53,7 @@ title-bar(
#activeTransfersDropdown='ngbDropdown' #activeTransfersDropdown='ngbDropdown'
) )
button.btn.btn-secondary.btn-tab-bar( button.btn.btn-secondary.btn-tab-bar(
[hidden]='activeTransfers.length == 0', *ngIf='activeTransfers.length > 0',
title='File transfers', title='File transfers',
ngbDropdownToggle ngbDropdownToggle
) !{require('../icons/transfers.svg')} ) !{require('../icons/transfers.svg')}
@@ -69,12 +67,14 @@ title-bar(
.btn-group.background .btn-group.background
.d-flex( .d-flex(
*ngFor='let button of rightToolbarButtons' *ngFor='let button of rightToolbarButtons',
ngbDropdown
) )
button.btn.btn-secondary.btn-tab-bar( button.btn.btn-secondary.btn-tab-bar(
[title]='button.label', [title]='button.title',
(click)='button.run && button.run()', (click)='button.run && button.run()',
[fastHtmlBind]='button.icon' [fastHtmlBind]='button.icon',
ngbDropdownToggle,
) )
button.btn.btn-secondary.btn-tab-bar.btn-update( button.btn.btn-secondary.btn-tab-bar.btn-update(
@@ -85,12 +85,9 @@ title-bar(
window-controls.background( window-controls.background(
*ngIf='config.store.appearance.frame == "thin" \ *ngIf='config.store.appearance.frame == "thin" \
&& (hostApp.platform == Platform.Linux)', && (hostApp.platform == Platform.Windows || hostApp.platform == Platform.Linux)',
) )
div.window-controls-spacer(
*ngIf='config.store.appearance.frame == "thin" && (hostApp.platform == Platform.Windows) && (config.store.appearance.tabsLocation == "top")',
)
.content .content
start-page.content-tab.content-tab-active(*ngIf='ready && app.tabs.length == 0') start-page.content-tab.content-tab-active(*ngIf='ready && app.tabs.length == 0')

View File

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

View File

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

View File

@@ -192,14 +192,6 @@ export abstract class BaseTabComponent extends BaseComponent {
this.viewContainer = undefined 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 * Called before the tab is closed
*/ */

View File

@@ -5,7 +5,7 @@ import { BaseComponent } from './base.component'
/** @hidden */ /** @hidden */
@Component({ @Component({
selector: 'profile-icon', selector: 'profile-icon',
templateUrl: './profileIcon.component.pug', templateUrl:'./profileIcon.component.pug',
styleUrls: ['./profileIcon.component.scss'], styleUrls: ['./profileIcon.component.scss'],
}) })
export class ProfileIconComponent extends BaseComponent { export class ProfileIconComponent extends BaseComponent {

View File

@@ -3,7 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
/** @hidden */ /** @hidden */
@Component({ @Component({
templateUrl: './promptModal.component.pug', templateUrl:'./promptModal.component.pug',
}) })
export class PromptModalComponent { export class PromptModalComponent {
@Input() value: string @Input() value: string

View File

@@ -5,7 +5,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
/** @hidden */ /** @hidden */
@Component({ @Component({
selector: 'rename-tab-modal', selector: 'rename-tab-modal',
templateUrl: './renameTabModal.component.pug', templateUrl:'./renameTabModal.component.pug',
}) })
export class RenameTabModalComponent { export class RenameTabModalComponent {
@Input() value: string @Input() value: string

View File

@@ -3,7 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
/** @hidden */ /** @hidden */
@Component({ @Component({
templateUrl: './safeModeModal.component.pug', templateUrl:'./safeModeModal.component.pug',
}) })
export class SafeModeModalComponent { export class SafeModeModalComponent {
@Input() error: Error @Input() error: Error

View File

@@ -26,9 +26,9 @@
*ngIf='option.description !== getOptionText(option)' *ngIf='option.description !== getOptionText(option)'
) {{option.description}} ) {{option.description}}
.ms-auto .ms-auto
.no-wrap.badge.text-bg-secondary.ms-2(*ngIf='selectedIndex == i && canEditSelected()') .no-wrap.badge.text-bg-secondary.text-muted.ms-2(*ngIf='selectedIndex == i && canEditSelected()')
span BACKSPACE span Backspace
i.fas.fa-pencil.ms-1 i.fas.fa-pencil.ms-1
.no-wrap.badge.text-bg-secondary.ms-2(*ngIf='selectedIndex == i') .no-wrap.badge.text-bg-secondary.text-muted.ms-2(*ngIf='selectedIndex == i')
span ENTER span Enter
i.fas.fa-arrow-right.ms-1 i.fas.fa-arrow-right.ms-1

View File

@@ -7,7 +7,7 @@ import { SelectorOption } from '../api/selector'
/** @hidden */ /** @hidden */
@Component({ @Component({
selector: 'selector-modal', selector: 'selector-modal',
templateUrl: './selectorModal.component.pug', templateUrl:'./selectorModal.component.pug',
styleUrls: ['./selectorModal.component.scss'], styleUrls: ['./selectorModal.component.scss'],
}) })
export class SelectorModalComponent<T> { export class SelectorModalComponent<T> {

View File

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

View File

@@ -458,18 +458,12 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
tab.destroy() tab.destroy()
} }
let allTabs: BaseTabComponent[] = []
if (thing instanceof BaseTabComponent) { if (thing instanceof BaseTabComponent) {
allTabs = [thing] if (thing.parent instanceof SplitTabComponent) {
} else if (thing instanceof SplitContainer) { thing.parent.removeTab(thing)
allTabs = thing.getAllTabs()
} }
for (const tab of allTabs) { thing.removeFromContainer()
if (tab.parent instanceof SplitTabComponent) { thing.parent = this
tab.parent.removeTab(tab)
}
tab.removeFromContainer()
tab.parent = this
} }
let target = relative ? this.getParentOf(relative) : null let target = relative ? this.getParentOf(relative) : null
@@ -787,7 +781,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
} }
get icon (): string|null { get icon (): string|null {
return this.getFocusedTab()?.icon ?? this.getAllTabs()[0]?.icon ?? null return this.getFocusedTab()?.icon ?? null
} }
set icon (icon: string|null) { set icon (icon: string|null) {
@@ -797,7 +791,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
} }
get color (): string|null { get color (): string|null {
return this.getFocusedTab()?.color ?? this.getAllTabs()[0]?.color ?? null return this.getFocusedTab()?.color ?? null
} }
set color (color: string|null) { set color (color: string|null) {

View File

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

View File

@@ -7,7 +7,7 @@ import { Command, CommandLocation } from '../api/commands'
/** @hidden */ /** @hidden */
@Component({ @Component({
selector: 'start-page', selector: 'start-page',
templateUrl: './startPage.component.pug', templateUrl:'./startPage.component.pug',
styleUrls: ['./startPage.component.scss'], styleUrls: ['./startPage.component.scss'],
}) })
export class StartPageComponent { export class StartPageComponent {

View File

@@ -1,7 +1,6 @@
.colorbar([style.background-color]='tab.color', *ngIf='tab.color != null') .colorbar([style.background-color]='tab.color', *ngIf='tab.color != null')
.progressbar([style.width]='progress + "%"', *ngIf='progress != null') .progressbar([style.width]='progress + "%"', *ngIf='progress != null')
.activity-indicator(*ngIf='tab.activity$|async') .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', cdkDragHandle) {{index + 1}}
.index(*ngIf='!config.store.terminal.hideTabIndex && hostApp.platform !== Platform.macOS') {{index + 1}} .index(*ngIf='!config.store.terminal.hideTabIndex && hostApp.platform !== Platform.macOS') {{index + 1}}

View File

@@ -35,7 +35,7 @@ $tabs-height: 38px;
-webkit-app-region: no-drag; -webkit-app-region: no-drag;
cursor: -webkit-grab; cursor: -webkit-grab;
width: calc(22px * var(--spaciness)); width: 22px;
border-radius: 10px; border-radius: 10px;
text-align: center; text-align: center;
transition: 0.25s all; transition: 0.25s all;
@@ -134,29 +134,15 @@ $tabs-height: 38px;
z-index: 1; z-index: 1;
} }
.activity-indicator, .current-tab-indicator {
position: absolute;
height: 2px;
}
&.active .activity-indicator { &.active .activity-indicator {
display: none; display: none;
} }
.activity-indicator { .activity-indicator {
bottom: 4px; position: absolute;
left: 10px; left: 10px;
right: 10px; right: 10px;
} bottom: 4px;
height: 2px;
&.active .current-tab-indicator {
display: block;
}
.current-tab-indicator {
display: none;
top: 0;
left: 0;
right: 0;
} }
} }

View File

@@ -15,7 +15,7 @@ import { PlatformService } from '../api/platform'
/** @hidden */ /** @hidden */
@Component({ @Component({
selector: 'tab-header', selector: 'tab-header',
templateUrl: './tabHeader.component.pug', templateUrl:'./tabHeader.component.pug',
styleUrls: ['./tabHeader.component.scss'], styleUrls: ['./tabHeader.component.scss'],
}) })
export class TabHeaderComponent extends BaseComponent { export class TabHeaderComponent extends BaseComponent {

View File

@@ -1,2 +1,2 @@
.title((dblclick)='hostWindow.toggleMaximize()') Tabby .title((dblclick)='hostWindow.toggleMaximize()') Tabby
window-controls(*ngIf="!hideControls") window-controls

View File

@@ -1,14 +1,12 @@
import { Component, Input } from '@angular/core' import { Component } from '@angular/core'
import { HostWindowService } from '../api' import { HostWindowService } from '../api'
/** @hidden */ /** @hidden */
@Component({ @Component({
selector: 'title-bar', selector: 'title-bar',
templateUrl: './titleBar.component.pug', templateUrl:'./titleBar.component.pug',
styleUrls: ['./titleBar.component.scss'], styleUrls: ['./titleBar.component.scss'],
}) })
export class TitleBarComponent { export class TitleBarComponent {
@Input() hideControls: boolean
constructor (public hostWindow: HostWindowService) { } constructor (public hostWindow: HostWindowService) { }
} }

View File

@@ -6,7 +6,12 @@
.icon(*ngIf='!isDownload(transfer)') !{require('../icons/upload.svg')} .icon(*ngIf='!isDownload(transfer)') !{require('../icons/upload.svg')}
.main .main
label.no-wrap([title]='transfer.getName()') {{transfer.getName()}} label.no-wrap([title]='transfer.getName()') {{transfer.getName()}}
ngb-progressbar([type]='transfer.isComplete() ? "success" : transfer.isCancelled() ? "danger" : "info"', [value]='getProgress(transfer)') .status(*ngIf='transfer.isComplete()')
ngb-progressbar(type='success', [value]='100')
.status(*ngIf='transfer.isCancelled()')
ngb-progressbar(type='danger', [value]='100')
.status(*ngIf='!transfer.isComplete() && !transfer.isCancelled()')
ngb-progressbar(type='info', [value]='getProgress(transfer)')
.metadata .metadata
.size {{transfer.getSize()|filesize}} .size {{transfer.getSize()|filesize}}
.speed(*ngIf='transfer.getSpeed()') {{transfer.getSpeed()|filesize}}/s .speed(*ngIf='transfer.getSpeed()') {{transfer.getSpeed()|filesize}}/s

View File

@@ -5,7 +5,7 @@ import { FileDownload, FileTransfer, PlatformService } from '../api/platform'
/** @hidden */ /** @hidden */
@Component({ @Component({
selector: 'transfers-menu', selector: 'transfers-menu',
templateUrl: './transfersMenu.component.pug', templateUrl:'./transfersMenu.component.pug',
styleUrls: ['./transfersMenu.component.scss'], styleUrls: ['./transfersMenu.component.scss'],
}) })
export class TransfersMenuComponent { export class TransfersMenuComponent {

View File

@@ -3,7 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
/** @hidden */ /** @hidden */
@Component({ @Component({
templateUrl: './unlockVaultModal.component.pug', templateUrl:'./unlockVaultModal.component.pug',
}) })
export class UnlockVaultModalComponent { export class UnlockVaultModalComponent {
passphrase: string passphrase: string

View File

@@ -8,7 +8,7 @@ import { LocaleService } from '../services/locale.service'
/** @hidden */ /** @hidden */
@Component({ @Component({
selector: 'welcome-page', selector: 'welcome-page',
templateUrl: './welcomeTab.component.pug', templateUrl:'./welcomeTab.component.pug',
styleUrls: ['./welcomeTab.component.scss'], styleUrls: ['./welcomeTab.component.scss'],
}) })
export class WelcomeTabComponent extends BaseTabComponent { export class WelcomeTabComponent extends BaseTabComponent {

View File

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

View File

@@ -6,7 +6,7 @@ import { AppService } from '../services/app.service'
/** @hidden */ /** @hidden */
@Component({ @Component({
selector: 'window-controls', selector: 'window-controls',
templateUrl: './windowControls.component.pug', templateUrl:'./windowControls.component.pug',
styleUrls: ['./windowControls.component.scss'], styleUrls: ['./windowControls.component.scss'],
}) })
export class WindowControlsComponent { export class WindowControlsComponent {

View File

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

View File

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

View File

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

View File

@@ -18,7 +18,6 @@ appearance:
vibrancy: false vibrancy: false
vibrancyType: 'blur' vibrancyType: 'blur'
lastTabClosesWindow: false lastTabClosesWindow: false
spaciness: 1
terminal: terminal:
showBuiltinProfiles: true showBuiltinProfiles: true
showRecentProfiles: 3 showRecentProfiles: 3
@@ -46,9 +45,6 @@ vault: null
encrypted: false encrypted: false
enableExperimentalFeatures: false enableExperimentalFeatures: false
pluginBlacklist: [] pluginBlacklist: []
commandBlacklist: []
providerBlacklist: []
profileBlacklist: []
hacks: hacks:
disableGPU: false disableGPU: false
disableVibrancyWhileDragging: false disableVibrancyWhileDragging: false

View File

@@ -19,7 +19,6 @@ export class CdkAutoDropGroup implements OnInit {
) { } ) { }
ngOnInit (): void { ngOnInit (): void {
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
CdkAutoDropGroup.groups[this.groupName] ??= new FakeDropGroup() CdkAutoDropGroup.groups[this.groupName] ??= new FakeDropGroup()
CdkAutoDropGroup.groups[this.groupName]._items.add(this.cdkDropList) CdkAutoDropGroup.groups[this.groupName]._items.add(this.cdkDropList)
this.cdkDropList['_group'] = CdkAutoDropGroup.groups[this.groupName] this.cdkDropList['_group'] = CdkAutoDropGroup.groups[this.groupName]

View File

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

View File

@@ -5,11 +5,9 @@ import { FormsModule } from '@angular/forms'
import { NgbModule } from '@ng-bootstrap/ng-bootstrap' import { NgbModule } from '@ng-bootstrap/ng-bootstrap'
import { NgxFilesizeModule } from 'ngx-filesize' import { NgxFilesizeModule } from 'ngx-filesize'
import { DragDropModule } from '@angular/cdk/drag-drop' import { DragDropModule } from '@angular/cdk/drag-drop'
import { TranslateModule, TranslateCompiler, TranslateService, MissingTranslationHandler } from '@ngx-translate/core' import { TranslateModule, TranslateCompiler, TranslateService } from '@ngx-translate/core'
import { TranslateMessageFormatCompiler, MESSAGE_FORMAT_CONFIG } from 'ngx-translate-messageformat-compiler' import { TranslateMessageFormatCompiler, MESSAGE_FORMAT_CONFIG } from 'ngx-translate-messageformat-compiler'
import '@angular/localize/init'
import { AppRootComponent } from './components/appRoot.component' import { AppRootComponent } from './components/appRoot.component'
import { CheckboxComponent } from './components/checkbox.component' import { CheckboxComponent } from './components/checkbox.component'
import { TabBodyComponent } from './components/tabBody.component' import { TabBodyComponent } from './components/tabBody.component'
@@ -43,7 +41,7 @@ import { AppService } from './services/app.service'
import { ConfigService } from './services/config.service' import { ConfigService } from './services/config.service'
import { VaultFileProvider } from './services/vault.service' import { VaultFileProvider } from './services/vault.service'
import { HotkeysService } from './services/hotkeys.service' import { HotkeysService } from './services/hotkeys.service'
import { CustomMissingTranslationHandler, LocaleService } from './services/locale.service' import { LocaleService } from './services/locale.service'
import { CommandService } from './services/commands.service' import { CommandService } from './services/commands.service'
import { StandardTheme, StandardCompactTheme, PaperTheme, NewTheme } from './theme' import { StandardTheme, StandardCompactTheme, PaperTheme, NewTheme } from './theme'
@@ -101,10 +99,6 @@ const PROVIDERS = [
provide: TranslateCompiler, provide: TranslateCompiler,
useFactory: TranslateMessageFormatCompilerFactory, useFactory: TranslateMessageFormatCompilerFactory,
}, },
missingTranslationHandler: {
provide: MissingTranslationHandler,
useClass: CustomMissingTranslationHandler,
},
}), }),
], ],
declarations: [ declarations: [
@@ -195,7 +189,7 @@ export default class AppModule { // eslint-disable-line @typescript-eslint/no-ex
} }
if (hotkey === 'profile-selector') { if (hotkey === 'profile-selector') {
commands.run('core:profile-selector', {}) commands.run('profile-selector', {})
} }
}) })
} }

View File

@@ -71,7 +71,6 @@ export class CommandService {
} }
return commands return commands
.filter(c => !this.config.store.commandBlacklist.includes(c.id))
.sort((a, b) => (a.weight ?? 0) - (b.weight ?? 0)) .sort((a, b) => (a.weight ?? 0) - (b.weight ?? 0))
.map(command => { .map(command => {
const run = command.run const run = command.run

View File

@@ -15,9 +15,6 @@ const deepmerge = require('deepmerge')
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types // 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 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 const LATEST_VERSION = 1
function isStructuralMember (v) { function isStructuralMember (v) {
@@ -165,7 +162,7 @@ export class ConfigService {
defaults = configMerge(provider.defaults, defaults) defaults = configMerge(provider.defaults, defaults)
} }
return defaults return defaults
}).reduce(configMergeByDefault) }).reduce(configMerge)
} }
getDefaults (): Record<string, any> { getDefaults (): Record<string, any> {
@@ -216,9 +213,7 @@ export class ConfigService {
* Reads config YAML as string * Reads config YAML as string
*/ */
readRaw (): string { readRaw (): string {
// Scrub undefined values return yaml.dump(this._store)
const cleanStore = JSON.parse(JSON.stringify(this._store))
return yaml.dump(cleanStore)
} }
/** /**
@@ -259,9 +254,7 @@ export class ConfigService {
return services.filter(service => { return services.filter(service => {
for (const pluginName in this.servicesCache) { for (const pluginName in this.servicesCache) {
if (this.servicesCache[pluginName].includes(service.constructor)) { if (this.servicesCache[pluginName].includes(service.constructor)) {
const id = `${pluginName}:${service.constructor.name}`
return !this.store?.pluginBlacklist?.includes(pluginName) return !this.store?.pluginBlacklist?.includes(pluginName)
&& !this.store?.providerBlacklist?.includes(id)
} }
} }
return true return true
@@ -356,14 +349,6 @@ export class ConfigService {
delete window.localStorage.lastSerialConnection delete window.localStorage.lastSerialConnection
config.version = 3 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) { private async maybeDecryptConfig (store) {

View File

@@ -178,7 +178,7 @@ export class HotkeysService {
this._key.next(getKeyName(eventData)) this._key.next(getKeyName(eventData))
}) })
if (process.platform === 'darwin' && eventData.metaKey && eventName === 'keydown' && !['Ctrl', 'Shift', altKeyName, metaKeyName, 'Enter'].includes(keyName)) { if (process.platform === 'darwin' && eventData.metaKey && eventName === 'keydown' && !['Ctrl', 'Shift', altKeyName, metaKeyName].includes(keyName)) {
// macOS will swallow non-modified keyups if Cmd is held down // macOS will swallow non-modified keyups if Cmd is held down
this.pushKeyEvent('keyup', nativeEvent) this.pushKeyEvent('keyup', nativeEvent)
} }

View File

@@ -1,13 +1,11 @@
import { Injectable } from '@angular/core' import { Injectable } from '@angular/core'
import { registerLocaleData } from '@angular/common' import { registerLocaleData } from '@angular/common'
import { TranslateService, MissingTranslationHandler } from '@ngx-translate/core' import { TranslateService } from '@ngx-translate/core'
import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler'
import localeENUS from '@angular/common/locales/en' import localeENUS from '@angular/common/locales/en'
import localeENGB from '@angular/common/locales/en-GB' import localeENGB from '@angular/common/locales/en-GB'
import localeAF from '@angular/common/locales/af' import localeAF from '@angular/common/locales/af'
import localeBG from '@angular/common/locales/bg' import localeBG from '@angular/common/locales/bg'
import localeCS from '@angular/common/locales/cs'
import localeDA from '@angular/common/locales/da' import localeDA from '@angular/common/locales/da'
import localeDE from '@angular/common/locales/de' import localeDE from '@angular/common/locales/de'
import localeES from '@angular/common/locales/es' import localeES from '@angular/common/locales/es'
@@ -32,7 +30,6 @@ registerLocaleData(localeENUS)
registerLocaleData(localeENGB) registerLocaleData(localeENGB)
registerLocaleData(localeAF) registerLocaleData(localeAF)
registerLocaleData(localeBG) registerLocaleData(localeBG)
registerLocaleData(localeCS)
registerLocaleData(localeDA) registerLocaleData(localeDA)
registerLocaleData(localeDE) registerLocaleData(localeDE)
registerLocaleData(localeES) registerLocaleData(localeES)
@@ -58,19 +55,6 @@ function flattenMessageFormatTranslation (po: any) {
return translation 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' }) @Injectable({ providedIn: 'root' })
export class LocaleService { export class LocaleService {
private logger: Logger private logger: Logger
@@ -84,10 +68,6 @@ export class LocaleService {
code: 'id-ID', code: 'id-ID',
name: 'Bahasa Indonesia', name: 'Bahasa Indonesia',
}, },
{
code: 'cs-CZ',
name: 'Čeština',
},
{ {
code: 'da-DK', code: 'da-DK',
name: 'Dansk', name: 'Dansk',

View File

@@ -24,7 +24,6 @@ export class ProfilesService {
isBuiltin: false, isBuiltin: false,
isTemplate: false, isTemplate: false,
terminalColorScheme: null, terminalColorScheme: null,
behaviorOnSessionEnd: 'auto',
} }
constructor ( constructor (
@@ -96,8 +95,6 @@ export class ProfilesService {
const freeInputEquivalent = provider?.intoQuickConnectString(fullProfile) ?? undefined const freeInputEquivalent = provider?.intoQuickConnectString(fullProfile) ?? undefined
return { return {
...profile, ...profile,
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
group: profile.group || '',
freeInputEquivalent, freeInputEquivalent,
description: provider?.getDescription(fullProfile), description: provider?.getDescription(fullProfile),
} }
@@ -153,8 +150,6 @@ export class ProfilesService {
profiles = profiles.filter(x => !x.isTemplate) 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> => ({ options = [...options, ...profiles.map((p): SelectorOption<void> => ({
...this.selectorOptionForProfile(p), ...this.selectorOptionForProfile(p),
weight: p.isBuiltin ? 2 : 1, weight: p.isBuiltin ? 2 : 1,

View File

@@ -26,14 +26,15 @@ export class ThemesService {
this.applyThemeVariables() this.applyThemeVariables()
config.changed$.subscribe(() => { config.changed$.subscribe(() => {
this.applyCurrentTheme() this.applyCurrentTheme()
this.applyThemeVariables()
}) })
}) })
config.changed$.subscribe(() => this.applyThemeVariables())
} }
private applyThemeVariables () { private applyThemeVariables () {
if (!this.findCurrentTheme().followsColorScheme) { if (!this.findCurrentTheme().followsColorScheme) {
document.documentElement.style.cssText = this.rootElementStyleBackup document.documentElement.style.cssText = this.rootElementStyleBackup
return
} }
const theme = this.config.store.terminal.colorScheme const theme = this.config.store.terminal.colorScheme
@@ -62,11 +63,8 @@ export class ThemesService {
// const backgroundMore =more(theme.background, 0.25).string() // const backgroundMore =more(theme.background, 0.25).string()
const accentIndex = 4 const accentIndex = 4
const vars: Record<string, string> = {} const vars: Record<string, string> = {}
const contrastPairs: string[][] = []
vars['--body-bg'] = background.string() vars['--bs-body-bg'] = background.string()
if (this.findCurrentTheme().followsColorScheme) {
vars['--bs-body-bg'] = theme.background
vars['--bs-body-color'] = theme.foreground vars['--bs-body-color'] = theme.foreground
vars['--bs-black'] = theme.colors[0] vars['--bs-black'] = theme.colors[0]
vars['--bs-red'] = theme.colors[1] vars['--bs-red'] = theme.colors[1]
@@ -84,8 +82,6 @@ export class ThemesService {
// vars['--bs-purple'] = theme.colors[13] // vars['--bs-purple'] = theme.colors[13]
// vars['--bs-cyan'] = theme.colors[14] // 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-2'] = more(theme.foreground, 0.5).string()
vars['--theme-fg-more'] = more(theme.foreground, 0.25).string() vars['--theme-fg-more'] = more(theme.foreground, 0.25).string()
vars['--theme-fg'] = theme.foreground vars['--theme-fg'] = theme.foreground
@@ -98,21 +94,15 @@ export class ThemesService {
vars['--theme-bg-more'] = backgroundMore vars['--theme-bg-more'] = backgroundMore
vars['--theme-bg-more-2'] = more(backgroundMore, 0.25).string() 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 = { const themeColors = {
primary: theme.colors[accentIndex], primary: theme.colors[accentIndex],
secondary: less(theme.background, 0.5).string(), secondary: theme.colors[8],
tertiary: theme.colors[8], tertiary: theme.colors[8],
warning: theme.colors[3], warning: theme.colors[3],
danger: theme.colors[1], danger: theme.colors[1],
success: theme.colors[2], success: theme.colors[2],
info: theme.colors[4], info: theme.colors[4],
dark: more(theme.background, 0.75).string(), dark: more(theme.background, 0.5).string(),
light: more(theme.foreground, 0.5).string(), light: more(theme.foreground, 0.5).string(),
link: theme.colors[8], // for .btn-link link: theme.colors[8], // for .btn-link
} }
@@ -127,53 +117,14 @@ export class ThemesService {
vars[`--theme-${key}`] = color vars[`--theme-${key}`] = color
vars[`--theme-${key}-less`] = less(color, 0.25).string() vars[`--theme-${key}-less`] = less(color, 0.25).string()
vars[`--theme-${key}-less-2`] = less(color, 0.75).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() const switchBackground = less(theme.colors[accentIndex], 0.25).string()
vars['--bs-form-switch-bg'] = `url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27${switchBackground}%27/%3e%3c/svg%3e")` vars['--bs-form-switch-bg'] = `url("data:image/svg+xml,%3csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-4 -4 8 8%27%3e%3ccircle r=%273%27 fill=%27${switchBackground}%27/%3e%3c/svg%3e")`
}
vars['--spaciness'] = this.config.store.appearance.spaciness
for (const [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)) { for (const [key, value] of Object.entries(vars)) {
document.documentElement.style.setProperty(key, value) 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 { findTheme (name: string): Theme|null {

View File

@@ -10,7 +10,7 @@ app-root {
&> .content { &> .content {
.tab-bar { .tab-bar {
background: var(--theme-bg-more-2); background: var(--theme-bg-more);
.btn-tab-bar { .btn-tab-bar {
background: transparent; background: transparent;
@@ -30,7 +30,6 @@ app-root {
border-left: 1px solid transparent; border-left: 1px solid transparent;
border-right: 1px solid transparent; border-right: 1px solid transparent;
transition: 0.125s ease-out width; transition: 0.125s ease-out width;
color: var(--theme-fg-more-2);
.index { .index {
color: var(--bs-body-color); color: var(--bs-body-color);
@@ -55,41 +54,131 @@ app-root {
opacity: .2; opacity: .2;
} }
.current-tab-indicator { &.active {
background:var(--bs-light); // color: $black;
background: var(--bs-body-bg);
// border-left: 1px solid $border-color;
// border-right: 1px solid $border-color;
}
}
}
} }
&.active { // &.tabs-on-top .tab-bar {
color: var(--theme-fg); // &>.background {
background: var(--body-bg); // border-bottom: 1px solid $border-color;
} // }
}
} // tab-header {
} // border-bottom: 1px solid $border-color;
// &.active {
// border-bottom-color: transparent;
// }
// }
// }
// &:not(.tabs-on-top) .tab-bar {
// &>.background {
// border-top: 1px solid $border-color;
// }
// tab-header {
// border-top: 1px solid $border-color;
// &.active {
// margin-top: -1px;
// }
// }
// }
} }
// &.platform-win32, &.platform-linux {
// border: 1px solid #111;
// &>.content .tab-bar .tabs tab-header:first-child {
// border-left: none;
// }
// }
} }
tab-body { tab-body {
background: var(--body-bg); background: var(--bs-body-bg);
} }
$tab-border-radius: 5px; // $black: #002b36;
// $base02: #073642;
// $base01: #586e75;
// $base00: #657b83;
// $base0: #839496;
// $base1: #93a1a1;
// $base2: #eee8d5;
// $white: #fdf6e3;
// $yellow: #b58900;
// $orange: #cb4b16;
// $red: #dc322f;
// $pink: #d33682;
// $purple: #6c71c4;
// $blue: #268bd2;
// $teal: #2aa198;
// $green: #859900;
$tab-border-radius: 5px;
// $button-hover-bg: rgba(0, 0, 0, .125);
// $button-active-bg: rgba(0, 0, 0, .25);
// $btn-border-radius: 0;
// $input-bg: $base2;
// $input-disabled-bg: $base1;
// $input-color: $body-color;
// $input-color-placeholder: $base1;
// $input-border-color: $base1;
// //$input-box-shadow: inset 0 1px 1px rgba($black,.075);
// $input-border-radius: 0;
// $custom-select-border-radius: 0;
// $input-bg-focus: $input-bg;
// //$input-border-focus: lighten($brand-primary, 25%);
// //$input-box-shadow-focus: $input-box-shadow, rgba($input-border-focus, .6);
// $input-color-focus: $input-color;
// $input-group-addon-bg: $body-bg;
// $input-group-addon-border-color: $input-border-color;
// $modal-content-bg: $content-bg-solid;
// $modal-content-border-color: $body-bg;
$modal-header-border-color: transparent; $modal-header-border-color: transparent;
$modal-footer-border-color: transparent; $modal-footer-border-color: transparent;
// $popover-bg: $body-bg;
// $dropdown-bg: $body-bg;
// $dropdown-link-color: $body-color;
// $dropdown-link-hover-color: #333;
// $dropdown-link-hover-bg: $body-bg2;
// //$dropdown-link-active-color: $component-active-color;
// //$dropdown-link-active-bg: $component-active-bg;
// $dropdown-link-disabled-color: #333;
// $dropdown-header-color: #333;
// $list-group-action-bg: rgba($black,.05);
// $list-group-action-active-bg: $list-group-link-active-bg;
// $pre-bg: $dropdown-bg;
// $pre-color: $dropdown-link-color;
// $headings-font-weight: lighter;
// $headings-color: $base0;
$form-check-input-width: 1.4em; $form-check-input-width: 1.4em;
$form-switch-width: 2.5em; $form-switch-width: 2.5em;
$input-placeholder-color: var(--theme-fg-more-2);
@import '~bootstrap/scss/bootstrap.scss'; @import '~bootstrap/scss/bootstrap.scss';
@import "./theme.vendor.scss"; @import "./theme.vendor.scss";
body { body {
background: var(--body-bg);
--bs-border-color: var(--theme-bg-more-2); --bs-border-color: var(--theme-bg-more-2);
--bs-form-control-bg: var(--theme-bg-more-2); --bs-form-control-bg: var(--theme-bg-more);
--bs-emphasis-color: var(--theme-fg-less-2); --bs-emphasis-color: var(--theme-fg-less-2);
} }
@@ -97,6 +186,8 @@ body {
--bs-list-group-bg: var(--theme-bg-more); --bs-list-group-bg: var(--theme-bg-more);
--bs-list-group-border-color: var(--theme-bg-more-2); --bs-list-group-border-color: var(--theme-bg-more-2);
--bs-list-group-border-width: 0; --bs-list-group-border-width: 0;
// --bs-list-group-item-padding-x: 1rem;
// --bs-list-group-item-padding-y: 0.5rem;
--bs-list-group-action-color: var(--bs-body-color); --bs-list-group-action-color: var(--bs-body-color);
--bs-list-group-action-hover-color: var(--theme-fg); --bs-list-group-action-hover-color: var(--theme-fg);
--bs-list-group-action-hover-bg: var(--theme-bg-more-2); --bs-list-group-action-hover-bg: var(--theme-bg-more-2);
@@ -107,15 +198,23 @@ body {
--bs-list-group-disabled-bg: var(--bs-body-bg); --bs-list-group-disabled-bg: var(--bs-body-bg);
--bs-list-group-active-color: var(--bs-primary-color); --bs-list-group-active-color: var(--bs-primary-color);
--bs-list-group-active-bg: var(--bs-primary-bg); --bs-list-group-active-bg: var(--bs-primary-bg);
// --bs-list-group-active-border-color: #0d6efd;
} }
.nav { .nav {
--bs-nav-link-color: var(--theme-fg); // scss-docs-start nav-css-vars
--bs-nav-link-hover-color: var(--theme-fg-less); // --bs-nav-link-padding-x: #{$nav-link-padding-x};
// --bs-nav-link-padding-y: #{$nav-link-padding-y};
// @include rfs($nav-link-font-size, --bs-nav-link-font-size);
// --bs-nav-link-font-weight: #{$nav-link-font-weight};
--bs-nav-link-color: var(--bs-body-color);
--bs-nav-link-hover-color: var(--theme-fg-less-2);
--bs-nav-link-disabled-color: var(--bs-gray); --bs-nav-link-disabled-color: var(--bs-gray);
// scss-docs-end nav-css-vars
} }
.nav-tabs { .nav-tabs {
// scss-docs-start nav-tabs-css-vars
--bs-nav-tabs-border-width: 2px; --bs-nav-tabs-border-width: 2px;
--bs-nav-tabs-border-radius: 0; --bs-nav-tabs-border-radius: 0;
--bs-nav-tabs-link-hover-border-color: var(--bs-body-bg); --bs-nav-tabs-link-hover-border-color: var(--bs-body-bg);
@@ -124,12 +223,15 @@ body {
--bs-nav-tabs-link-active-bg: transparent; --bs-nav-tabs-link-active-bg: transparent;
--bs-nav-tabs-link-active-border-color: transparent; --bs-nav-tabs-link-active-border-color: transparent;
// scss-docs-end nav-tabs-css-vars
} }
.nav-pills { .nav-pills {
// scss-docs-start nav-pills-css-vars
--bs-nav-pills-border-radius: #{$nav-pills-border-radius}; --bs-nav-pills-border-radius: #{$nav-pills-border-radius};
--bs-nav-pills-link-active-color: var(--theme-primary-fg); --bs-nav-pills-link-active-color: var(--theme-bg-more);
--bs-nav-pills-link-active-bg: var(--theme-primary); --bs-nav-pills-link-active-bg: var(--bs-primary);
// scss-docs-end nav-pills-css-vars
} }
.nav-tabs { .nav-tabs {
@@ -173,13 +275,6 @@ body {
} }
} }
.dropdown-menu {
--bs-dropdown-bg: var(--theme-bg-more);
}
.progress {
--bs-progress-height: 3px;
}
tab-body { tab-body {
terminal-toolbar { terminal-toolbar {
@@ -202,20 +297,20 @@ tab-body {
--bs-btn-hover-border-color: var(--theme-#{$color}-less); --bs-btn-hover-border-color: var(--theme-#{$color}-less);
--bs-btn-hover-bg: var(--theme-#{$color}-less); --bs-btn-hover-bg: var(--theme-#{$color}-less);
--bs-btn-active-border-color: var(--theme-#{$color}); --bs-btn-active-border-color: var(--theme-#{$color}-less-2);
--bs-btn-active-bg: var(--theme-#{$color}-active-bg); --bs-btn-active-bg: var(--theme-#{$color}-less-2);
--bs-btn-focus-shadow-rgb: 130, 138, 145; --bs-btn-focus-shadow-rgb: 130, 138, 145;
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
--bs-btn-color: var(--theme-#{$color}-fg); --bs-btn-color: var(--theme-#{$color}-more-2);
--bs-btn-hover-color: var(--theme-#{$color}-fg); --bs-btn-hover-color: var(--theme-#{$color}-more-2);
--bs-btn-active-color: var(--theme-#{$color}-active-fg); --bs-btn-active-color: var(--theme-#{$color}-more-2);
--bs-btn-disabled-color: var(--theme-#{$color}-fg); --bs-btn-disabled-color: var(--theme-#{$color}-more-2);
} }
.alert-#{$color} { .alert-#{$color} {
--bs-alert-bg: var(--theme-#{$color}-fg); --bs-alert-bg: var(--theme-#{$color}-more-2);
--bs-alert-border-color: var(--theme-#{$color}-more); --bs-alert-border-color: var(--theme-#{$color}-more);
--bs-alert-color: var(--theme-#{$color}); --bs-alert-color: var(--theme-#{$color});
} }
@@ -343,6 +438,19 @@ hotkey-input-modal {
} }
} }
// checkbox i.on {
// color: $blue;
// }
// .modal .modal-footer {
// background: rgba(0, 0, 0, .25);
// .btn {
// font-weight: bold;
// padding: 0.375rem 1.5rem;
// }
// }
.list-group-item svg { .list-group-item svg {
fill: var(--bs-body-color); fill: var(--bs-body-color);
fill-opacity: 0.75; fill-opacity: 0.75;
@@ -385,8 +493,30 @@ search-panel {
.btn-link { .btn-link {
text-decoration: none; text-decoration: none;
// &:hover, &[aria-expanded=true], &:active, &.active {
// color: $link-hover-color;
// border-radius: $btn-border-radius;
// }
// &[aria-expanded=true], &:active, &.active {
// background: rgba(255, 255, 255, 0.1);
// }
} }
// .btn-group .btn.active {
// border-color: transparent !important;
// }
// hr {
// border-color: $list-group-border-color;
// }
// .dropdown-menu {
// box-shadow: $dropdown-box-shadow;
// }
ngx-colors-panel .opened { ngx-colors-panel .opened {
background: var(--bs-body-bg) !important; background: var(--bs-body-bg) !important;
@@ -400,8 +530,8 @@ ngx-colors-panel .opened {
} }
.text-muted { .text-muted {
// color: var(--bs-body-color) !important;
opacity: .5; opacity: .5;
color: var(--theme-fg) !important;
} }
.form-switch .form-check-input { .form-switch .form-check-input {
@@ -426,7 +556,7 @@ ngx-colors-panel .opened {
} }
start-page { start-page {
background: var(--theme-bg-more-2); background: var(--theme-bg);
} }
split-tab-spanner { split-tab-spanner {
@@ -436,9 +566,3 @@ split-tab-spanner {
background: rgba(var(--bs-dark-rgb), .2); background: rgba(var(--bs-dark-rgb), .2);
} }
} }
window-controls {
button svg {
fill: var(--theme-fg) !important;
}
}

View File

@@ -1,29 +1,37 @@
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'
import { Injectable } from '@angular/core' import { Injectable } from '@angular/core'
import { TranslateService } from '@ngx-translate/core'
import { Theme } from './api' import { Theme } from './api'
/** @hidden */ /** @hidden */
@Injectable() @Injectable()
export class StandardTheme extends Theme { export class StandardTheme extends Theme {
name = _('Standard (legacy)') name = this.translate.instant('Standard (legacy)')
css = require('./theme.scss') css = require('./theme.scss')
terminalBackground = '#222a33' terminalBackground = '#222a33'
constructor (private translate: TranslateService) {
super()
}
} }
/** @hidden */ /** @hidden */
@Injectable() @Injectable()
export class StandardCompactTheme extends Theme { export class StandardCompactTheme extends Theme {
name = _('Compact (legacy)') name = this.translate.instant('Compact (legacy)')
css = require('./theme.compact.scss') css = require('./theme.compact.scss')
terminalBackground = '#222a33' terminalBackground = '#222a33'
macOSWindowButtonsInsetX = 8 macOSWindowButtonsInsetX = 8
macOSWindowButtonsInsetY = 6 macOSWindowButtonsInsetY = 6
constructor (private translate: TranslateService) {
super()
}
} }
/** @hidden */ /** @hidden */
@Injectable() @Injectable()
export class PaperTheme extends Theme { export class PaperTheme extends Theme {
name = _('Paper (legacy)') name = 'Paper (legacy)'
css = require('./theme.paper.scss') css = require('./theme.paper.scss')
terminalBackground = '#f7f1e0' terminalBackground = '#f7f1e0'
} }
@@ -31,8 +39,12 @@ export class PaperTheme extends Theme {
/** @hidden */ /** @hidden */
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class NewTheme extends Theme { export class NewTheme extends Theme {
name = _('Follow the color scheme') name = this.translate.instant('Follow the color scheme')
css = require('./theme.new.scss') css = require('./theme.new.scss')
terminalBackground = '#f7f1e0' terminalBackground = '#f7f1e0'
followsColorScheme = true followsColorScheme = true
constructor (private translate: TranslateService) {
super()
}
} }

View File

@@ -7,13 +7,8 @@ export const WIN_BUILD_CONPTY_STABLE = 18309
export const WIN_BUILD_WSL_EXE_DISTRO_FLAG = 17763 export const WIN_BUILD_WSL_EXE_DISTRO_FLAG = 17763
export const WIN_BUILD_FLUENT_BG_SUPPORTED = 17063 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 { export function isWindowsBuild (build: number): boolean {
const b = getWindows10Build() return process.platform === 'win32' && parseFloat(os.release()) >= 10 && parseInt(os.release().split('.')[2]) >= build
return b !== undefined && b >= build
} }
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types

View File

@@ -174,10 +174,10 @@ process@^0.11.10:
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
readable-stream@4.4.0: readable-stream@4.2.0:
version "4.4.0" version "4.2.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.0.tgz#55ce132d60a988c460d75c631e9ccf6a7229b468" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.2.0.tgz#a7ef523d3b39e4962b0db1a1af22777b10eeca46"
integrity sha512-kDMOq0qLtxV9f/SQv522h8cxZBqNZXuXNyjyezmfAAuribMyVXziljpQ/uQhfE1XLg2/TLTW2DsnoE4VAi/krg== integrity sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==
dependencies: dependencies:
abort-controller "^3.0.0" abort-controller "^3.0.0"
buffer "^6.0.3" buffer "^6.0.3"

View File

@@ -1,6 +1,6 @@
{ {
"name": "tabby-electron", "name": "tabby-electron",
"version": "1.0.197-nightly.1", "version": "1.0.189-nightly.2",
"description": "Electron-specific bindings", "description": "Electron-specific bindings",
"keywords": [ "keywords": [
"tabby-builtin-plugin" "tabby-builtin-plugin"
@@ -12,20 +12,16 @@
"watch": "webpack --progress --color --watch" "watch": "webpack --progress --color --watch"
}, },
"files": [ "files": [
"dist", "dist"
"typings"
], ],
"author": "Eugene Pankov", "author": "Eugene Pankov",
"license": "MIT", "license": "MIT",
"peerDependencies": { "peerDependencies": {
"@angular/core": "^15", "@angular/core": "^9.1.9"
"tabby-local": "*"
}, },
"devDependencies": { "devDependencies": {
"electron-promise-ipc": "^2.2.4", "electron-promise-ipc": "^2.2.4",
"ps-node": "^0.1.6",
"tmp-promise": "^3.0.2", "tmp-promise": "^3.0.2",
"which": "^3.0.0",
"winston": "^3.3.3" "winston": "^3.3.3"
} }
} }

View File

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

View File

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

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