From 64d9c9853848ce9f115ae0ea7e12187736e91180 Mon Sep 17 00:00:00 2001 From: Jai-JAP Date: Sat, 23 Dec 2023 14:29:51 +0530 Subject: [PATCH 01/26] Better crossbuild v3 + fixes - Build now uses a bare `debootstrap` as a build-sysroot instead of a `chroot` and use its libraries for cross compiling using `crossbuild-essential-*` package using `--sysroot` GCC/G++ flag and `PKG_CONFIG_PATH` to specify path to find `*.pc` files for target arch - Use node 18 (16 is EOL) - Fix a potential ambiguous case in scripts/vars.mjs --- .github/workflows/build.yml | 57 ++++++++++++++++++------------------- scripts/vars.mjs | 2 +- 2 files changed, 28 insertions(+), 31 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5e8b28b6..f3918488 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,11 +13,11 @@ jobs: - name: Installing Node uses: actions/setup-node@v3.7.0 with: - node-version: 16 + node-version: 18 - name: Install deps run: | - npm i -g yarn@1.19.1 + npm i -g yarn cd app yarn cd .. @@ -49,13 +49,13 @@ jobs: - name: Installing Node uses: actions/setup-node@v3.7.0 with: - node-version: 16 + node-version: 18 - name: Install deps run: | sudo -H pip3 install setuptools npm config set python python3 - sudo npm i -g yarn@1.22.1 + sudo npm i -g yarn yarn --network-timeout 1000000 env: ARCH: ${{matrix.arch}} @@ -96,7 +96,7 @@ jobs: - name: Build packages without signing run: scripts/build-macos.mjs - if: "! (github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')))" + if: ! (github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags'))) env: ARCH: ${{matrix.arch}} # DEBUG: electron-builder,electron-builder:* @@ -164,34 +164,31 @@ jobs: - name: Install deps (amd64) run: | sudo apt-get update - sudo apt-get install libarchive-tools zsh python3-distutils - - - name: Install npm_modules (amd64) - run: | - npm i -g yarn - yarn --network-timeout 1000000 - if: matrix.build-arch == 'x64' + sudo apt-get install libarchive-tools zsh crossbuild-essential-${{matrix.arch}} - name: Setup Crossbuild (${{matrix.arch}}) run: | - sudo apt-get update -y && sudo apt-get install schroot sbuild debootstrap -y - sudo debootstrap --include=git,curl,gnupg,ca-certificates,crossbuild-essential-${{matrix.arch}},python-dev,python3-dev,libarchive-tools,cmake --variant=buildd --exclude=snapd --components=main,restricted,universe,multiverse --extractor=dpkg-deb bionic /build-chroot/ - echo 'deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu bionic main restricted universe multiverse' | sudo tee /build-chroot/etc/apt/sources.list >/dev/null - echo 'deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports bionic main restricted universe multiverse' | sudo tee -a /build-chroot/etc/apt/sources.list >/dev/null - curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor | sudo tee /build-chroot/etc/apt/trusted.gpg.d/nodesource.gpg >/dev/null - echo 'deb http://deb.nodesource.com/node_16.x bionic main' | sudo tee /build-chroot/etc/apt/sources.list.d/nodesource.list >/dev/null - echo "[build-chroot] - description=Ubuntu 18.04 Build chroot - type=directory - directory=/build-chroot - root-groups=root,sudo - profile=buildd - personality=linux - union-type=overlay" | sudo tee /etc/schroot/chroot.d/build-chroot.pref >/dev/null - echo "/home /home none rw,bind 0 0" | sudo tee -a /etc/schroot/buildd/fstab >/dev/null - + echo "CFLAGS=--sysroot=/build-sysroot/" >> $GITHUB_ENV + echo "CXXFLAGS=--sysroot=/build-sysroot/" >> $GITHUB_ENV + echo "LDFLAGS=--sysroot=/build-sysroot/" >> $GITHUB_ENV + [[ ${npm_config_arch} == 'arm' ]] && echo "npm_config_arch=armv7l" >> $GITHUB_ENV + if [[ ${{matrix.arch}} == 'armhf' ]]; then + echo "PKG_CONFIG_PATH=/build-sysroot/usr/lib/pkgconfig/:/build-sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig/" >> $GITHUB_ENV + elif [[ ${{matrix.arch}} == 'arm64' ]]; then + echo "PKG_CONFIG_PATH=/build-sysroot/usr/lib/pkgconfig/:/build-sysroot/usr/lib/aarch64-linux-gnu/pkgconfig/" >> $GITHUB_ENV + fi + sudo apt-get update -y && sudo apt-get install debootstrap qemu-user-static binfmt-support -y + sudo qemu-debootstrap --include=libfontconfig1-dev,libsecret-1-dev,libnss3,libatk1.0-0,libatk-bridge2.0-0,libgdk-pixbuf2.0-0,libgtk-3-0,libgbm1 --variant=buildd --exclude=snapd --components=main,restricted,universe,multiverse --extractor=dpkg-deb --arch ${{matrix.arch}} bionic /build-sysroot/ http://ports.ubuntu.com/ubuntu-ports/ + sudo find /build-sysroot -type l -lname '/*' -exec sh -c 'file="$0"; dir=$(dirname "$file"); target=$(readlink "$0"); prefix=$(dirname "$dir" | sed 's@[^/]*@\.\.@g'); newtarget="$prefix$target"; ln -snf $newtarget $file' {} \; ; if: matrix.build-arch != 'x64' + - name: Install npm_modules (amd64) + run: | + npm i -g yarn node-gyp + npm prefix -g | $(npm config set node_gyp "$_/node_modules/node-gyp/bin/node-gyp.js") + yarn --network-timeout 1000000 --arch=${{matrix.build-arch}} --target-arch=${{matrix.build-arch}} + if: matrix.build-arch == 'x64' + - name: Install node_modules & CrossBuild native modules for ${{matrix.arch}} run: | sudo schroot -c build-chroot -u root -- bash -c "apt-get update -y @@ -349,7 +346,7 @@ jobs: - name: Installing Node uses: actions/setup-node@v3.7.0 with: - node-version: 16 + node-version: 18 - name: Update node-gyp run: | @@ -379,7 +376,7 @@ jobs: - name: Build packages without signing run: node scripts/build-windows.mjs - if: "!(github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')))" + if: ! (github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags'))) env: ARCH: ${{matrix.arch}} diff --git a/scripts/vars.mjs b/scripts/vars.mjs index 11ade76e..218402f8 100755 --- a/scripts/vars.mjs +++ b/scripts/vars.mjs @@ -3,7 +3,7 @@ import * as fs from 'fs' import * as semver from 'semver' import * as childProcess from 'child_process' -process.env.ARCH = ((process.env.ARCH || process.arch) === 'arm') ? 'armv7l' : process.env.ARCH || process.arch +process.env.ARCH = ((process.env.ARCH || process.arch) === 'arm') ? 'armv7l' : (process.env.ARCH || process.arch) import * as url from 'url' const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) From 50c534789a1086af10bec6db34ba27845e448d39 Mon Sep 17 00:00:00 2001 From: Jai-JAP Date: Sat, 23 Dec 2023 14:44:59 +0530 Subject: [PATCH 02/26] Fix an error --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f3918488..b74c5f69 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -96,7 +96,7 @@ jobs: - name: Build packages without signing run: scripts/build-macos.mjs - if: ! (github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags'))) + if: "! (github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')))" env: ARCH: ${{matrix.arch}} # DEBUG: electron-builder,electron-builder:* @@ -376,7 +376,7 @@ jobs: - name: Build packages without signing run: node scripts/build-windows.mjs - if: ! (github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags'))) + if: "! (github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags')))" env: ARCH: ${{matrix.arch}} From 7af6a31f55dda63c79a8591521778fde0616dad0 Mon Sep 17 00:00:00 2001 From: Jai-JAP Date: Sat, 23 Dec 2023 14:55:22 +0530 Subject: [PATCH 03/26] Fix a few other errors & remove old code --- .github/workflows/build.yml | 56 +------------------------------------ 1 file changed, 1 insertion(+), 55 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b74c5f69..b10280b0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -54,7 +54,6 @@ jobs: - name: Install deps run: | sudo -H pip3 install setuptools - npm config set python python3 sudo npm i -g yarn yarn --network-timeout 1000000 env: @@ -185,7 +184,6 @@ jobs: - name: Install npm_modules (amd64) run: | npm i -g yarn node-gyp - npm prefix -g | $(npm config set node_gyp "$_/node_modules/node-gyp/bin/node-gyp.js") yarn --network-timeout 1000000 --arch=${{matrix.build-arch}} --target-arch=${{matrix.build-arch}} if: matrix.build-arch == 'x64' @@ -223,53 +221,6 @@ jobs: run: zsh -c 'tar czf tabby-web.tar.gz (tabby-*|web)/dist' if: matrix.build-arch == 'x64' -# - name: Install deps and Build (arm64) -# uses: docker://multiarch/ubuntu-core:arm64-bionic -# with: -# args: > -# bash -c -# "apt update && apt install curl lsb-release gnupg -y && -# curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && -# apt install make build-essential git ruby libarchive-tools nodejs rpm libsecret-1-dev libfontconfig1-dev -y && -# git config --global --add safe.directory /github/workspace && -# gem install public_suffix -v 4.0.7 && -# gem install fpm --no-document && -# npm i -g yarn && -# cd /github/workspace && -# yarn --network-timeout 1000000 && -# yarn run build && -# scripts/prepackage-plugins.mjs && -# USE_SYSTEM_FPM=true scripts/build-linux.mjs" -# env: -# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -# KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }} -# USE_HARD_LINKS: false -# if: matrix.build-arch == 'arm64' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags') - -# - name: Install deps and Build (armv7l) -# uses: docker://multiarch/ubuntu-core:armhf-bionic -# with: -# args: > -# bash -c -# "apt update && apt install curl lsb-release gnupg -y && -# curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && -# apt install make build-essential git ruby libarchive-tools nodejs rpm libsecret-1-dev libfontconfig1-dev -y && -# git config --global --add safe.directory /github/workspace && -# gem install public_suffix -v 4.0.7 && -# gem install fpm --no-document && -# npm i -g yarn && -# cd /github/workspace && -# sed -i '/ \"electron\":/c\ \"electron\": \"17.0.0\",' package.json && -# yarn --network-timeout 1000000 && -# yarn run build && -# scripts/prepackage-plugins.mjs && -# USE_SYSTEM_FPM=true scripts/build-linux.mjs" -# env: -# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -# KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }} -# USE_HARD_LINKS: false -# if: matrix.build-arch == 'arm' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags') - - name: Upload symbols (amd64 only) run: | sudo npm install -g @sentry/cli --unsafe-perm @@ -348,15 +299,10 @@ jobs: with: node-version: 18 - - name: Update node-gyp - run: | - npm install --global node-gyp@8.4.1 - npm prefix -g | % {npm config set node_gyp "$_\node_modules\node-gyp\bin\node-gyp.js"} - - name: Build shell: powershell run: | - npm i -g yarn@1.19.1 + npm i -g yar node-gyp yarn --network-timeout 1000000 yarn run build node scripts/prepackage-plugins.mjs From 9b985698ff0fc5d24e218992aff84c250ea8f17b Mon Sep 17 00:00:00 2001 From: Jai-JAP Date: Sat, 23 Dec 2023 15:02:20 +0530 Subject: [PATCH 04/26] Add caching of sysroot for hopefully more speedup --- .github/workflows/build.yml | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b10280b0..db2ad0ce 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -160,6 +160,13 @@ jobs: with: node-version: 18 + - name: Download cached sysroot + uses: actions/cache@v3 + if: matrix.build-arch !='x64' + with: + key: sysroot-${{matrix.build-arch}} + path: /${{matrix.build-arch}}-sysroot + - name: Install deps (amd64) run: | sudo apt-get update @@ -167,18 +174,18 @@ jobs: - name: Setup Crossbuild (${{matrix.arch}}) run: | - echo "CFLAGS=--sysroot=/build-sysroot/" >> $GITHUB_ENV - echo "CXXFLAGS=--sysroot=/build-sysroot/" >> $GITHUB_ENV - echo "LDFLAGS=--sysroot=/build-sysroot/" >> $GITHUB_ENV + echo "CFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV + echo "CXXFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV + echo "LDFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV [[ ${npm_config_arch} == 'arm' ]] && echo "npm_config_arch=armv7l" >> $GITHUB_ENV if [[ ${{matrix.arch}} == 'armhf' ]]; then - echo "PKG_CONFIG_PATH=/build-sysroot/usr/lib/pkgconfig/:/build-sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig/" >> $GITHUB_ENV + echo "PKG_CONFIG_PATH=/${{matrix.build-arch}}-sysroot/usr/lib/pkgconfig/:/${{matrix.build-arch}}-sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig/" >> $GITHUB_ENV elif [[ ${{matrix.arch}} == 'arm64' ]]; then - echo "PKG_CONFIG_PATH=/build-sysroot/usr/lib/pkgconfig/:/build-sysroot/usr/lib/aarch64-linux-gnu/pkgconfig/" >> $GITHUB_ENV + echo "PKG_CONFIG_PATH=/${{matrix.build-arch}}-sysroot/usr/lib/pkgconfig/:/${{matrix.build-arch}}-sysroot/usr/lib/aarch64-linux-gnu/pkgconfig/" >> $GITHUB_ENV fi sudo apt-get update -y && sudo apt-get install debootstrap qemu-user-static binfmt-support -y - sudo qemu-debootstrap --include=libfontconfig1-dev,libsecret-1-dev,libnss3,libatk1.0-0,libatk-bridge2.0-0,libgdk-pixbuf2.0-0,libgtk-3-0,libgbm1 --variant=buildd --exclude=snapd --components=main,restricted,universe,multiverse --extractor=dpkg-deb --arch ${{matrix.arch}} bionic /build-sysroot/ http://ports.ubuntu.com/ubuntu-ports/ - sudo find /build-sysroot -type l -lname '/*' -exec sh -c 'file="$0"; dir=$(dirname "$file"); target=$(readlink "$0"); prefix=$(dirname "$dir" | sed 's@[^/]*@\.\.@g'); newtarget="$prefix$target"; ln -snf $newtarget $file' {} \; ; + sudo qemu-debootstrap --include=libfontconfig1-dev,libsecret-1-dev,libnss3,libatk1.0-0,libatk-bridge2.0-0,libgdk-pixbuf2.0-0,libgtk-3-0,libgbm1 --variant=buildd --exclude=snapd --components=main,restricted,universe,multiverse --extractor=dpkg-deb --arch ${{matrix.arch}} bionic /${{matrix.build-arch}}-sysroot/ http://ports.ubuntu.com/ubuntu-ports/ + sudo find /${{matrix.build-arch}}-sysroot -type l -lname '/*' -exec sh -c 'file="$0"; dir=$(dirname "$file"); target=$(readlink "$0"); prefix=$(dirname "$dir" | sed 's@[^/]*@\.\.@g'); newtarget="$prefix$target"; ln -snf $newtarget $file' {} \; ; if: matrix.build-arch != 'x64' - name: Install npm_modules (amd64) From 59c5491432a9667310468565508fc88d92e5d844 Mon Sep 17 00:00:00 2001 From: Jai-JAP Date: Sat, 23 Dec 2023 15:06:23 +0530 Subject: [PATCH 05/26] Remove old code leftover --- .github/workflows/build.yml | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index db2ad0ce..298b1252 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -176,13 +176,16 @@ jobs: run: | echo "CFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV echo "CXXFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV - echo "LDFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV + echo "LDFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV + [[ ${npm_config_arch} == 'arm' ]] && echo "npm_config_arch=armv7l" >> $GITHUB_ENV + if [[ ${{matrix.arch}} == 'armhf' ]]; then echo "PKG_CONFIG_PATH=/${{matrix.build-arch}}-sysroot/usr/lib/pkgconfig/:/${{matrix.build-arch}}-sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig/" >> $GITHUB_ENV elif [[ ${{matrix.arch}} == 'arm64' ]]; then echo "PKG_CONFIG_PATH=/${{matrix.build-arch}}-sysroot/usr/lib/pkgconfig/:/${{matrix.build-arch}}-sysroot/usr/lib/aarch64-linux-gnu/pkgconfig/" >> $GITHUB_ENV fi + sudo apt-get update -y && sudo apt-get install debootstrap qemu-user-static binfmt-support -y sudo qemu-debootstrap --include=libfontconfig1-dev,libsecret-1-dev,libnss3,libatk1.0-0,libatk-bridge2.0-0,libgdk-pixbuf2.0-0,libgtk-3-0,libgbm1 --variant=buildd --exclude=snapd --components=main,restricted,universe,multiverse --extractor=dpkg-deb --arch ${{matrix.arch}} bionic /${{matrix.build-arch}}-sysroot/ http://ports.ubuntu.com/ubuntu-ports/ sudo find /${{matrix.build-arch}}-sysroot -type l -lname '/*' -exec sh -c 'file="$0"; dir=$(dirname "$file"); target=$(readlink "$0"); prefix=$(dirname "$dir" | sed 's@[^/]*@\.\.@g'); newtarget="$prefix$target"; ln -snf $newtarget $file' {} \; ; @@ -192,23 +195,6 @@ jobs: run: | npm i -g yarn node-gyp yarn --network-timeout 1000000 --arch=${{matrix.build-arch}} --target-arch=${{matrix.build-arch}} - if: matrix.build-arch == 'x64' - - - name: Install node_modules & CrossBuild native modules for ${{matrix.arch}} - run: | - sudo schroot -c build-chroot -u root -- bash -c "apt-get update -y - dpkg --add-architecture ${{matrix.arch}} - apt-get install -y nodejs libfontconfig-dev:${{matrix.arch}} libsecret-1-dev:${{matrix.arch}} libnss3:${{matrix.arch}} libatk1.0-0:${{matrix.arch}} libatk-bridge2.0-0:${{matrix.arch}} libgdk-pixbuf2.0-0:${{matrix.arch}} libgtk-3-0:${{matrix.arch}} libgbm1:${{matrix.arch}} - export CC=${{matrix.triplet}}gcc CXX=${{matrix.triplet}}g++ LD=${{matrix.triplet}}ld - if [[ ${{matrix.arch}} == 'arm64' ]]; then - export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/aarch64-linux-gnu/pkgconfig/ - elif [[ ${{matrix.arch}} == 'armhf' ]]; then - export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/arm-linux-gnueabihf/pkgconfig/ - fi - export ARCH=${{matrix.build-arch}} npm_config_arch=${{matrix.build-arch}} npm_config_target_arch=${{matrix.build-arch}} - npm i -g yarn - yarn --network-timeout 1000000 --arch=${{matrix.build-arch}} --target_arch=${{matrix.build-arch}}" - if: matrix.build-arch != 'x64' - name: Webpack (${{matrix.arch}}) run: yarn run build --arch=${{matrix.build-arch}} --target_arch=${{matrix.build-arch}} From 7fbe3405fe4f6bc36523acdc3414bd054b644e42 Mon Sep 17 00:00:00 2001 From: Jai-JAP Date: Sat, 23 Dec 2023 15:11:30 +0530 Subject: [PATCH 06/26] Setup crossbuild only if cache not found --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 298b1252..c212e746 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -162,6 +162,7 @@ jobs: - name: Download cached sysroot uses: actions/cache@v3 + id: cache-sysroot if: matrix.build-arch !='x64' with: key: sysroot-${{matrix.build-arch}} @@ -189,7 +190,7 @@ jobs: sudo apt-get update -y && sudo apt-get install debootstrap qemu-user-static binfmt-support -y sudo qemu-debootstrap --include=libfontconfig1-dev,libsecret-1-dev,libnss3,libatk1.0-0,libatk-bridge2.0-0,libgdk-pixbuf2.0-0,libgtk-3-0,libgbm1 --variant=buildd --exclude=snapd --components=main,restricted,universe,multiverse --extractor=dpkg-deb --arch ${{matrix.arch}} bionic /${{matrix.build-arch}}-sysroot/ http://ports.ubuntu.com/ubuntu-ports/ sudo find /${{matrix.build-arch}}-sysroot -type l -lname '/*' -exec sh -c 'file="$0"; dir=$(dirname "$file"); target=$(readlink "$0"); prefix=$(dirname "$dir" | sed 's@[^/]*@\.\.@g'); newtarget="$prefix$target"; ln -snf $newtarget $file' {} \; ; - if: matrix.build-arch != 'x64' + if: matrix.build-arch != 'x64' && steps.cache-sysroot.outputs.cache-hit != 'true' - name: Install npm_modules (amd64) run: | From f0a83c68dc320225a057b7524d2c709d2c02c567 Mon Sep 17 00:00:00 2001 From: Jai-JAP Date: Sat, 23 Dec 2023 15:21:54 +0530 Subject: [PATCH 07/26] State that web resourses are built only on amd64 --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c212e746..2c10c9e2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -211,7 +211,7 @@ jobs: USE_HARD_LINKS: false # DEBUG: electron-builder,electron-builder:* - - name: Build web resources + - name: Build web resources (amd64 only) run: zsh -c 'tar czf tabby-web.tar.gz (tabby-*|web)/dist' if: matrix.build-arch == 'x64' From 9da21a82a80293ddb869d404a8a899fdae14fa04 Mon Sep 17 00:00:00 2001 From: Jai-JAP Date: Sat, 23 Dec 2023 17:59:25 +0530 Subject: [PATCH 08/26] Fix caching on build - Fix cache on x64 - Run tar as root --- .github/workflows/build.yml | 49 +++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2c10c9e2..a24156c3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -160,42 +160,49 @@ jobs: with: node-version: 18 + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install libarchive-tools zsh crossbuild-essential-${{matrix.arch}} + + - name: Setup tar to run as root + run: sudo chmod u+s "$(command -v tar)" + if: matrix.build-arch != 'x64' + - name: Download cached sysroot uses: actions/cache@v3 - id: cache-sysroot + id: dl-cached-sysroot if: matrix.build-arch !='x64' with: key: sysroot-${{matrix.build-arch}} path: /${{matrix.build-arch}}-sysroot - - name: Install deps (amd64) + - name: Setup crossbuild sysroot run: | - sudo apt-get update - sudo apt-get install libarchive-tools zsh crossbuild-essential-${{matrix.arch}} + sudo apt-get update -y && sudo apt-get install debootstrap qemu-user-static binfmt-support -y + sudo qemu-debootstrap --include=libfontconfig1-dev,libsecret-1-dev,libnss3,libatk1.0-0,libatk-bridge2.0-0,libgdk-pixbuf2.0-0,libgtk-3-0,libgbm1 --variant=buildd --exclude=snapd --components=main,restricted,universe,multiverse --extractor=dpkg-deb --arch ${{matrix.arch}} bionic /${{matrix.build-arch}}-sysroot/ http://ports.ubuntu.com/ubuntu-ports/ + sudo find /${{matrix.build-arch}}-sysroot -type l -lname '/*' -exec sh -c 'file="$0"; dir=$(dirname "$file"); target=$(readlink "$0"); prefix=$(dirname "$dir" | sed 's@[^/]*@\.\.@g'); newtarget="$prefix$target"; ln -snf $newtarget $file' {} \; ; + if: matrix.build-arch != 'x64' && steps.dl-cached-sysroot.outputs.cache-hit != 'true' - - name: Setup Crossbuild (${{matrix.arch}}) + - name: Setup env to use ${{matrix.build-arch}} sysroot run: | - echo "CFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV - echo "CXXFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV - echo "LDFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV + echo "CFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV + echo "CXXFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV + echo "LDFLAGS=--sysroot=/${{matrix.build-arch}}-sysroot/" >> $GITHUB_ENV - [[ ${npm_config_arch} == 'arm' ]] && echo "npm_config_arch=armv7l" >> $GITHUB_ENV + [[ ${npm_config_arch} == 'arm' ]] && echo "npm_config_arch=armv7l" >> $GITHUB_ENV - if [[ ${{matrix.arch}} == 'armhf' ]]; then - echo "PKG_CONFIG_PATH=/${{matrix.build-arch}}-sysroot/usr/lib/pkgconfig/:/${{matrix.build-arch}}-sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig/" >> $GITHUB_ENV - elif [[ ${{matrix.arch}} == 'arm64' ]]; then - echo "PKG_CONFIG_PATH=/${{matrix.build-arch}}-sysroot/usr/lib/pkgconfig/:/${{matrix.build-arch}}-sysroot/usr/lib/aarch64-linux-gnu/pkgconfig/" >> $GITHUB_ENV - fi - - sudo apt-get update -y && sudo apt-get install debootstrap qemu-user-static binfmt-support -y - sudo qemu-debootstrap --include=libfontconfig1-dev,libsecret-1-dev,libnss3,libatk1.0-0,libatk-bridge2.0-0,libgdk-pixbuf2.0-0,libgtk-3-0,libgbm1 --variant=buildd --exclude=snapd --components=main,restricted,universe,multiverse --extractor=dpkg-deb --arch ${{matrix.arch}} bionic /${{matrix.build-arch}}-sysroot/ http://ports.ubuntu.com/ubuntu-ports/ - sudo find /${{matrix.build-arch}}-sysroot -type l -lname '/*' -exec sh -c 'file="$0"; dir=$(dirname "$file"); target=$(readlink "$0"); prefix=$(dirname "$dir" | sed 's@[^/]*@\.\.@g'); newtarget="$prefix$target"; ln -snf $newtarget $file' {} \; ; - if: matrix.build-arch != 'x64' && steps.cache-sysroot.outputs.cache-hit != 'true' + if [[ ${{matrix.arch}} == 'armhf' ]]; then + echo "PKG_CONFIG_PATH=/${{matrix.build-arch}}-sysroot/usr/lib/pkgconfig/:/${{matrix.build-arch}}-sysroot/usr/lib/arm-linux-gnueabihf/pkgconfig/" >> $GITHUB_ENV + elif [[ ${{matrix.arch}} == 'arm64' ]]; then + echo "PKG_CONFIG_PATH=/${{matrix.build-arch}}-sysroot/usr/lib/pkgconfig/:/${{matrix.build-arch}}-sysroot/usr/lib/aarch64-linux-gnu/pkgconfig/" >> $GITHUB_ENV + fi + if: matrix.build-arch != 'x64' - name: Install npm_modules (amd64) run: | - npm i -g yarn node-gyp - yarn --network-timeout 1000000 --arch=${{matrix.build-arch}} --target-arch=${{matrix.build-arch}} + npm i -g yarn node-gyp + yarn --network-timeout 1000000 --arch=${{matrix.build-arch}} --target-arch=${{matrix.build-arch}} - name: Webpack (${{matrix.arch}}) run: yarn run build --arch=${{matrix.build-arch}} --target_arch=${{matrix.build-arch}} From dd9a13c91734f6ecfef43d6391608a6889afd135 Mon Sep 17 00:00:00 2001 From: Jai-JAP Date: Sat, 23 Dec 2023 18:08:41 +0530 Subject: [PATCH 09/26] Bump (Test caching) From 1e6c2cba769fadf4fdce4715b8cf29b45bfe7984 Mon Sep 17 00:00:00 2001 From: Matheus Castello Date: Sun, 30 Jun 2024 23:13:02 -0300 Subject: [PATCH 10/26] wsl: Get the distro icon from the package family name All the WSL distributions that was installed from the Microsoft Store have a package family name that can be used to get the icon of the distribution. Signed-off-by: Matheus Castello --- app/package.json | 1 + .../src/components/profileIcon.component.pug | 6 ++- .../src/components/profileIcon.component.ts | 8 ++++ tabby-electron/src/shells/wsl.ts | 42 ++++++++++++++++++- 4 files changed, 54 insertions(+), 3 deletions(-) diff --git a/app/package.json b/app/package.json index 679538de..819a1e39 100644 --- a/app/package.json +++ b/app/package.json @@ -24,6 +24,7 @@ "electron-updater": "^5.2.1", "fontmanager-redux": "1.1.0", "glasstron": "0.1.1", + "node-powershell": "5.0.1", "js-yaml": "4.1.0", "keytar": "^7.9.0", "mz": "^2.7.0", diff --git a/tabby-core/src/components/profileIcon.component.pug b/tabby-core/src/components/profileIcon.component.pug index afdad571..0e5d8446 100644 --- a/tabby-core/src/components/profileIcon.component.pug +++ b/tabby-core/src/components/profileIcon.component.pug @@ -1,7 +1,11 @@ +.icon( + [fastHtmlBind]='pngPath', + *ngIf='!isHTML && isPNG' +) i.icon( class='fa-fw {{icon}}', [style.color]='color', - *ngIf='!isHTML' + *ngIf='!isHTML && !isPNG' ) .icon( [fastHtmlBind]='icon', diff --git a/tabby-core/src/components/profileIcon.component.ts b/tabby-core/src/components/profileIcon.component.ts index 89df4229..0a837aba 100644 --- a/tabby-core/src/components/profileIcon.component.ts +++ b/tabby-core/src/components/profileIcon.component.ts @@ -12,7 +12,15 @@ export class ProfileIconComponent extends BaseComponent { @Input() icon?: string @Input() color?: string + get pngPath (): string { + return `` + } + get isHTML (): boolean { return this.icon?.startsWith('<') ?? false } + + get isPNG (): boolean { + return this.icon?.endsWith('.png') ?? false + } } diff --git a/tabby-electron/src/shells/wsl.ts b/tabby-electron/src/shells/wsl.ts index 67811a4d..bf6bfd34 100644 --- a/tabby-electron/src/shells/wsl.ts +++ b/tabby-electron/src/shells/wsl.ts @@ -6,6 +6,8 @@ import { HostAppService, Platform, isWindowsBuild, WIN_BUILD_WSL_EXE_DISTRO_FLAG import { ShellProvider, Shell } from 'tabby-local' +import { PowerShell } from 'node-powershell' + /* eslint-disable block-scoped-var */ try { @@ -38,10 +40,42 @@ const wslIconMap: Record = { /** @hidden */ @Injectable() export class WSLShellProvider extends ShellProvider { + private _pwsh: PowerShell + constructor ( private hostApp: HostAppService, ) { super() + + // make sure that this will not use the powershell profile + // that may take a long time to load + this._pwsh = new PowerShell({ + executableOptions: { + '-NoProfile': true, + }, + }) + } + + private async _resolveIcon (defaultDistKey: any): Promise { + let _icon = wslIconMap.Linux + + // check if the register has PackageFamilyName + if (defaultDistKey.PackageFamilyName) { + // get the icon from the package family name + const packageFamilyName = (defaultDistKey.PackageFamilyName.value as string).split('_')[0] + + if (packageFamilyName) { + const _ret = await this._pwsh.invoke(`Get-AppxPackage ${packageFamilyName} | ConvertTo-Json`) + + if (!_ret.hadErrors && _ret.stdout?.toString() !== undefined && _ret.stdout.toString() !== '') { + const appx = JSON.parse(_ret.stdout.toString()) + const installationLocation = appx.InstallLocation + _icon = `${installationLocation}\\Assets\\Square44x44Logo.targetsize-16.png` + } + } + } + + return _icon } async provide (): Promise { @@ -59,6 +93,7 @@ export class WSLShellProvider extends ShellProvider { if (lxss?.DefaultDistribution) { const defaultDistKey = wnr.getRegistryKey(wnr.HK.CU, lxssPath + '\\' + String(lxss.DefaultDistribution.value)) if (defaultDistKey?.DistributionName) { + const _icon = await this._resolveIcon(defaultDistKey) const shell: Shell = { id: 'wsl', name: 'WSL / Default distro', @@ -68,7 +103,7 @@ export class WSLShellProvider extends ShellProvider { COLORTERM: 'truecolor', }, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - icon: wslIconMap[defaultDistKey.DistributionName.value] ?? wslIconMap.Linux, + icon: wslIconMap[defaultDistKey.DistributionName.value] ?? _icon, } shells.push(shell) } @@ -90,11 +125,14 @@ export class WSLShellProvider extends ShellProvider { return [] } } + for (const child of wnr.listRegistrySubkeys(wnr.HK.CU, lxssPath) as string[]) { const childKey = wnr.getRegistryKey(wnr.HK.CU, lxssPath + '\\' + child) if (!childKey.DistributionName || !childKey.BasePath) { continue } + + const _icon = await this._resolveIcon(childKey) const wslVersion = (childKey.Flags?.value || 0) & 8 ? 2 : 1 const name = childKey.DistributionName.value const fsBase = wslVersion === 2 ? `\\\\wsl$\\${name}` : childKey.BasePath.value as string + '\\rootfs' @@ -110,7 +148,7 @@ export class WSLShellProvider extends ShellProvider { COLORTERM: 'truecolor', }, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - icon: wslIconMap[name] ?? wslIconMap.Linux, + icon: wslIconMap[name] ?? _icon, } shells.push(shell) } From fa9ee756d20a77b7fd6beaf1c7c708cf71488007 Mon Sep 17 00:00:00 2001 From: Vadhvis Date: Tue, 9 Jul 2024 11:21:35 +0300 Subject: [PATCH 11/26] SSH Lag Fix --- tabby-ssh/src/polyfills.ts | 8 ++++++++ tabby-ssh/src/session/ssh.ts | 2 ++ 2 files changed, 10 insertions(+) diff --git a/tabby-ssh/src/polyfills.ts b/tabby-ssh/src/polyfills.ts index 0893d22e..8872290d 100644 --- a/tabby-ssh/src/polyfills.ts +++ b/tabby-ssh/src/polyfills.ts @@ -1,4 +1,12 @@ +import 'ssh2'; const nodeCrypto = require('crypto') const browserDH = require('diffie-hellman/browser') nodeCrypto.createDiffieHellmanGroup = browserDH.createDiffieHellmanGroup nodeCrypto.createDiffieHellman = browserDH.createDiffieHellman + +// Declare function missing from @types +declare module 'ssh2' { + interface Client { + setNoDelay(enable?: boolean): this; + } +} \ No newline at end of file diff --git a/tabby-ssh/src/session/ssh.ts b/tabby-ssh/src/session/ssh.ts index 6bc354ef..bb1de94d 100644 --- a/tabby-ssh/src/session/ssh.ts +++ b/tabby-ssh/src/session/ssh.ts @@ -218,6 +218,8 @@ export class SSHSession { const resultPromise: Promise = new Promise(async (resolve, reject) => { ssh.on('ready', () => { connected = true + // Fix SSH Lagging + ssh.setNoDelay(true); if (this.savedPassword) { this.passwordStorage.savePassword(this.profile, this.savedPassword) } From 4ed4d756c9589d91d1d3708b453da61aed444442 Mon Sep 17 00:00:00 2001 From: Vadhvis Date: Tue, 9 Jul 2024 11:32:02 +0300 Subject: [PATCH 12/26] Remove semicolons --- tabby-ssh/src/polyfills.ts | 4 ++-- tabby-ssh/src/session/ssh.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tabby-ssh/src/polyfills.ts b/tabby-ssh/src/polyfills.ts index 8872290d..da48c261 100644 --- a/tabby-ssh/src/polyfills.ts +++ b/tabby-ssh/src/polyfills.ts @@ -1,4 +1,4 @@ -import 'ssh2'; +import 'ssh2' const nodeCrypto = require('crypto') const browserDH = require('diffie-hellman/browser') nodeCrypto.createDiffieHellmanGroup = browserDH.createDiffieHellmanGroup @@ -7,6 +7,6 @@ nodeCrypto.createDiffieHellman = browserDH.createDiffieHellman // Declare function missing from @types declare module 'ssh2' { interface Client { - setNoDelay(enable?: boolean): this; + setNoDelay(enable?: boolean): this } } \ No newline at end of file diff --git a/tabby-ssh/src/session/ssh.ts b/tabby-ssh/src/session/ssh.ts index bb1de94d..2ad99325 100644 --- a/tabby-ssh/src/session/ssh.ts +++ b/tabby-ssh/src/session/ssh.ts @@ -219,7 +219,7 @@ export class SSHSession { ssh.on('ready', () => { connected = true // Fix SSH Lagging - ssh.setNoDelay(true); + ssh.setNoDelay(true) if (this.savedPassword) { this.passwordStorage.savePassword(this.profile, this.savedPassword) } From 2b65bb4b141640697934e9aa4f381f8869c688b7 Mon Sep 17 00:00:00 2001 From: Vadhvis Date: Tue, 9 Jul 2024 11:39:37 +0300 Subject: [PATCH 13/26] Linting Fix: Switch to function property --- tabby-ssh/src/polyfills.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tabby-ssh/src/polyfills.ts b/tabby-ssh/src/polyfills.ts index da48c261..06235b1f 100644 --- a/tabby-ssh/src/polyfills.ts +++ b/tabby-ssh/src/polyfills.ts @@ -7,6 +7,6 @@ nodeCrypto.createDiffieHellman = browserDH.createDiffieHellman // Declare function missing from @types declare module 'ssh2' { interface Client { - setNoDelay(enable?: boolean): this + setNoDelay: (enable?: boolean) => this } -} \ No newline at end of file +} From 64195940a113bec18c8d4c9ea522d1e10edcaa44 Mon Sep 17 00:00:00 2001 From: GeminiLn Date: Tue, 9 Jul 2024 22:15:12 -0700 Subject: [PATCH 14/26] Fix: Ensure IP is selectable in SSH tab --- tabby-ssh/src/components/sshTab.component.pug | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tabby-ssh/src/components/sshTab.component.pug b/tabby-ssh/src/components/sshTab.component.pug index f4ef807f..c6be5567 100644 --- a/tabby-ssh/src/components/sshTab.component.pug +++ b/tabby-ssh/src/components/sshTab.component.pug @@ -1,7 +1,10 @@ terminal-toolbar([tab]='this') i.fas.fa-xs.fa-circle.text-success.me-2(*ngIf='session && session.open') i.fas.fa-xs.fa-circle.text-danger.me-2(*ngIf='!session || !session.open') - strong.me-auto {{profile.options.user}}@{{profile.options.host}}:{{profile.options.port}} + strong.me-auto( + style='user-select: text; cursor: text;' + onclick='event.stopPropagation()' + ) {{profile.options.user}}@{{profile.options.host}}:{{profile.options.port}} .me-2( ngbDropdown, @@ -11,7 +14,7 @@ terminal-toolbar([tab]='this') ) button.btn.btn-sm.btn-link(ngbDropdownToggle) i.far.fa-lightbulb.text-primary - .bg-dark(ngbDropdownMenu) + .bg-dark(ngbDropdownMenu)yarn a.d-flex.align-items-center(ngbDropdownItem, (click)='platform.openExternal("https://tabby.sh/go/cwd-detection")') .me-auto strong(translate) Working directory detection From b436eac97386ea5acdb87234634293416067fd78 Mon Sep 17 00:00:00 2001 From: GeminiLn Date: Tue, 9 Jul 2024 22:17:11 -0700 Subject: [PATCH 15/26] Fix: Ensure IP is selectable in SSH tab --- tabby-ssh/src/components/sshTab.component.pug | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tabby-ssh/src/components/sshTab.component.pug b/tabby-ssh/src/components/sshTab.component.pug index c6be5567..f6dd1aac 100644 --- a/tabby-ssh/src/components/sshTab.component.pug +++ b/tabby-ssh/src/components/sshTab.component.pug @@ -14,7 +14,7 @@ terminal-toolbar([tab]='this') ) button.btn.btn-sm.btn-link(ngbDropdownToggle) i.far.fa-lightbulb.text-primary - .bg-dark(ngbDropdownMenu)yarn + .bg-dark(ngbDropdownMenu) a.d-flex.align-items-center(ngbDropdownItem, (click)='platform.openExternal("https://tabby.sh/go/cwd-detection")') .me-auto strong(translate) Working directory detection From e9ae253a6c9738e66230ddb4bc90c7957cc1bb85 Mon Sep 17 00:00:00 2001 From: Eugene Date: Wed, 10 Jul 2024 10:58:46 +0200 Subject: [PATCH 16/26] updated contributors --- .all-contributorsrc | 9 +++++++++ README.de-DE.md | 1 + README.es-ES.md | 1 + README.id-ID.md | 1 + README.it-IT.md | 1 + README.ja-JP.md | 1 + README.ko-KR.md | 1 + README.md | 1 + README.pt-BR.md | 1 + README.ru-RU.md | 1 + README.zh-CN.md | 1 + 11 files changed, 19 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 97c51061..e6040402 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1301,6 +1301,15 @@ "contributions": [ "code" ] + }, + { + "login": "GeminiLn", + "name": "Yu Qin", + "avatar_url": "https://avatars.githubusercontent.com/u/12425057?v=4", + "profile": "https://github.com/GeminiLn", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/README.de-DE.md b/README.de-DE.md index e07fd082..13175c0b 100644 --- a/README.de-DE.md +++ b/README.de-DE.md @@ -339,6 +339,7 @@ Dank geht an diese wunderbaren Menschen ([emoji key](https://allcontributors.org Mxmilu
Mxmilu

💻 Charles Buffington
Charles Buffington

💻 + Yu Qin
Yu Qin

💻 diff --git a/README.es-ES.md b/README.es-ES.md index 6b7ceb13..20202a6c 100644 --- a/README.es-ES.md +++ b/README.es-ES.md @@ -341,6 +341,7 @@ Gracias a estas maravillosas personas ([emoji key](https://allcontributors.org/d Mxmilu
Mxmilu

💻 Charles Buffington
Charles Buffington

💻 + Yu Qin
Yu Qin

💻 diff --git a/README.id-ID.md b/README.id-ID.md index 33f1b274..973e7c74 100644 --- a/README.id-ID.md +++ b/README.id-ID.md @@ -338,6 +338,7 @@ Terima kasih kepada mereka yang telah membantu ([emoji key](https://allcontribut Mxmilu
Mxmilu

💻 Charles Buffington
Charles Buffington

💻 + Yu Qin
Yu Qin

💻 diff --git a/README.it-IT.md b/README.it-IT.md index 38c22aa2..679a5e3c 100644 --- a/README.it-IT.md +++ b/README.it-IT.md @@ -334,6 +334,7 @@ Grazie a queste persone meravigliose ([emoji key](https://allcontributors.org/do Mxmilu
Mxmilu

💻 Charles Buffington
Charles Buffington

💻 + Yu Qin
Yu Qin

💻 diff --git a/README.ja-JP.md b/README.ja-JP.md index 9bf11428..270ba75e 100644 --- a/README.ja-JP.md +++ b/README.ja-JP.md @@ -349,6 +349,7 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル Mxmilu
Mxmilu

💻 Charles Buffington
Charles Buffington

💻 + Yu Qin
Yu Qin

💻 diff --git a/README.ko-KR.md b/README.ko-KR.md index 74379bde..e3c8170a 100644 --- a/README.ko-KR.md +++ b/README.ko-KR.md @@ -333,6 +333,7 @@ Pull requests and plugins are welcome! Mxmilu
Mxmilu

💻 Charles Buffington
Charles Buffington

💻 + Yu Qin
Yu Qin

💻 diff --git a/README.md b/README.md index 848c4e29..119cba65 100644 --- a/README.md +++ b/README.md @@ -355,6 +355,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Mxmilu
Mxmilu

💻 Charles Buffington
Charles Buffington

💻 + Yu Qin
Yu Qin

💻 diff --git a/README.pt-BR.md b/README.pt-BR.md index 6811f251..f7b14f83 100644 --- a/README.pt-BR.md +++ b/README.pt-BR.md @@ -342,6 +342,7 @@ Obrigado vai para essas pessoas maravilhosas ([emoji key](https://allcontributor Mxmilu
Mxmilu

💻 Charles Buffington
Charles Buffington

💻 + Yu Qin
Yu Qin

💻 diff --git a/README.ru-RU.md b/README.ru-RU.md index 02f7ee42..d5c1c803 100644 --- a/README.ru-RU.md +++ b/README.ru-RU.md @@ -334,6 +334,7 @@ Pull-запросы и плагины приветствуются! Mxmilu
Mxmilu

💻 Charles Buffington
Charles Buffington

💻 + Yu Qin
Yu Qin

💻 diff --git a/README.zh-CN.md b/README.zh-CN.md index 55789378..f772043c 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -333,6 +333,7 @@ Mxmilu
Mxmilu

💻 Charles Buffington
Charles Buffington

💻 + Yu Qin
Yu Qin

💻 From 4d63422b783098f06e74ba11461ffc3e67d41879 Mon Sep 17 00:00:00 2001 From: Eugene Date: Wed, 10 Jul 2024 11:06:34 +0200 Subject: [PATCH 17/26] updated locales --- locale/af-ZA.po | 2 +- locale/bg-BG.po | 2 +- locale/cs-CZ.po | 4 ++-- locale/da-DK.po | 46 ++++++++++++++++++------------------ locale/de-DE.po | 2 +- locale/en-GB.po | 10 +------- locale/es-ES.po | 2 +- locale/fr-FR.po | 2 +- locale/hr-HR.po | 2 +- locale/id-ID.po | 8 +++---- locale/it-IT.po | 33 +++++++++++++------------- locale/ja-JP.po | 62 ++++++++++++++++++++++++------------------------- locale/ko-KR.po | 2 +- locale/pl-PL.po | 2 +- locale/pt-BR.po | 2 +- locale/pt-PT.po | 14 +++++------ locale/ru-RU.po | 2 +- locale/sr-SP.po | 2 +- locale/sv-SE.po | 4 ++-- locale/tr-TR.po | 2 +- locale/uk-UA.po | 2 +- locale/zh-CN.po | 2 +- locale/zh-TW.po | 2 +- 23 files changed, 101 insertions(+), 110 deletions(-) diff --git a/locale/af-ZA.po b/locale/af-ZA.po index ea3ceb64..fe1ad36b 100644 --- a/locale/af-ZA.po +++ b/locale/af-ZA.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Afrikaans\n" "Language: af_ZA\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" diff --git a/locale/bg-BG.po b/locale/bg-BG.po index f14a3068..ad716e7c 100644 --- a/locale/bg-BG.po +++ b/locale/bg-BG.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" diff --git a/locale/cs-CZ.po b/locale/cs-CZ.po index 3d48a056..b64f641c 100644 --- a/locale/cs-CZ.po +++ b/locale/cs-CZ.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Czech\n" "Language: cs_CZ\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" @@ -1935,7 +1935,7 @@ msgstr "Sériové připojení" #: tabby-serial/src/profiles.ts:73 msgid "Serial: {description}" -msgstr "Seriální: {description}" +msgstr "Sériový: {description}" #: locale/tmp-html/tabby-settings/src/components/setVaultPassphraseModal.component.html:2 #: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:5 diff --git a/locale/da-DK.po b/locale/da-DK.po index 22107fe2..4167f328 100644 --- a/locale/da-DK.po +++ b/locale/da-DK.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Danish\n" "Language: da_DK\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" @@ -100,12 +100,12 @@ msgstr "Tillader hurtigt at åbne en terminal i den valgte mappe" #: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25 #: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11 msgid "Always dark" -msgstr "" +msgstr "Altid mørk" #: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27 #: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13 msgid "Always light" -msgstr "" +msgstr "Altid lys" #: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2 #: tabby-terminal/src/settings.ts:14 @@ -272,7 +272,7 @@ msgstr "Ciphers" #: locale/tmp-html/tabby-terminal/src/components/colorSchemeSelector.component.html:5 msgid "Clear" -msgstr "" +msgstr "Ryd" #: tabby-core/src/services/profiles.service.ts:248 msgid "Clear recent profiles" @@ -324,7 +324,7 @@ msgstr "Luk faner til højre" #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:182 msgid "Close the window after closing the last tab" -msgstr "" +msgstr "Luk vinduet efter lukningen af den sidste fane" #: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:33 #: tabby-core/src/tabContextMenu.ts:132 @@ -337,16 +337,16 @@ msgstr "Farvetema" #: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:2 msgid "Color schemes" -msgstr "" +msgstr "Farveskemaer" #: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:81 #: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:216 msgid "Colors" -msgstr "" +msgstr "Farver" #: tabby-core/src/hotkeys.ts:72 msgid "Combine all tabs into the current tab" -msgstr "" +msgstr "Kombinér alle faner til den aktuelle fane" #: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:4 msgid "Command line" @@ -358,15 +358,15 @@ msgstr "Kommandoens stdin/stdout bruges i stedet for en netværksforbindelse" #: tabby-core/src/services/commands.service.ts:105 msgid "Commands" -msgstr "" +msgstr "Kommandoer" #: tabby-core/src/theme.ts:16 msgid "Compact (legacy)" -msgstr "" +msgstr "Kompakt (ældre)" #: tabby-settings/src/components/configSyncSettingsTab.component.ts:126 msgid "Config deleted" -msgstr "" +msgstr "Konfig slettet" #: tabby-settings/src/components/configSyncSettingsTab.component.ts:108 msgid "Config downloaded" @@ -428,7 +428,7 @@ msgstr "Kontekstmenu" #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:14 msgid "Controls the amount of space between elements" -msgstr "" +msgstr "Styrer mængden af mellemrum mellem elementer" #: tabby-terminal/src/api/baseTerminalTab.component.ts:240 #: tabby-terminal/src/api/baseTerminalTab.component.ts:248 @@ -449,7 +449,7 @@ msgstr "Kopiér nuværende sti" #: tabby-electron/src/sftpContextMenu.ts:29 msgid "Copy full path" -msgstr "" +msgstr "Kopiér hele stien" #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97 msgid "Copy on select" @@ -461,7 +461,7 @@ msgstr "Kopiér til udklipsholder" #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103 msgid "Copy with formatting" -msgstr "" +msgstr "Kopiér med formatering" #: tabby-core/src/services/config.service.ts:425 msgid "Could not decrypt config" @@ -469,12 +469,12 @@ msgstr "Kunne ikke dekryptere konfiguration" #: locale/tmp-html/tabby-ssh/src/components/sftpCreateDirectoryModal.component.html:9 msgid "Create" -msgstr "" +msgstr "Opret" #: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:7 #: tabby-ssh/src/sftpContextMenu.ts:29 msgid "Create directory" -msgstr "" +msgstr "Opret mappe" #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:90 msgid "Current" @@ -498,7 +498,7 @@ msgstr "Markørens form" #: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46 msgid "Custom" -msgstr "" +msgstr "Tilpasset" #: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90 msgid "Custom CSS" @@ -506,7 +506,7 @@ msgstr "Brugerdefineret CSS" #: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17 msgid "Dark mode" -msgstr "" +msgstr "Mørk tilstand" #: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26 msgid "Data bits" @@ -518,15 +518,15 @@ msgstr "Fejlfinding" #: tabby-core/src/hotkeys.ts:256 msgid "Decrease horizontal split size" -msgstr "" +msgstr "Reducér den vandrette splitstørrelse" #: tabby-core/src/hotkeys.ts:248 msgid "Decrease vertical split size" -msgstr "" +msgstr "Reducér den lodrette splitstørrelse" #: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:92 msgid "Default \"Connect to\" type" -msgstr "" +msgstr "Standard \"Forbind til\"-type" #: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:93 msgid "Default connection type used by quick connect feature (ex. SSH, Telnet)" @@ -582,7 +582,7 @@ msgstr "Slet {fullPath}?" #: tabby-terminal/src/hotkeys.ts:42 msgid "Delete entire line" -msgstr "" +msgstr "Slet hele linjen" #: tabby-terminal/src/hotkeys.ts:46 msgid "Delete next word" @@ -594,7 +594,7 @@ msgstr "Slet forrige ord" #: tabby-settings/src/components/configSyncSettingsTab.component.ts:114 msgid "Delete the config on the remote side?" -msgstr "" +msgstr "Slet konfigurationen på fjernsiden?" #: tabby-settings/src/components/profilesSettingsTab.component.ts:226 msgid "Delete the group's profiles?" diff --git a/locale/de-DE.po b/locale/de-DE.po index 2c008848..57865e50 100644 --- a/locale/de-DE.po +++ b/locale/de-DE.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: German\n" "Language: de_DE\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" diff --git a/locale/en-GB.po b/locale/en-GB.po index 724d623e..1e0d3afc 100644 --- a/locale/en-GB.po +++ b/locale/en-GB.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: English, United Kingdom\n" "Language: en_GB\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" @@ -2036,10 +2036,6 @@ msgstr "" msgid "Show Serial connections" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:73 -msgid "Hide Tabby in tray or menu bar." -msgstr "" - #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:152 msgid "Show tabs in fullscreen mode" msgstr "" @@ -2048,10 +2044,6 @@ msgstr "" msgid "Show toolbar" msgstr "" -#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:73 -msgid "Hide tray" -msgstr "" - #: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:45 msgid "Show vault contents" msgstr "" diff --git a/locale/es-ES.po b/locale/es-ES.po index a74b1bb4..8babe83e 100644 --- a/locale/es-ES.po +++ b/locale/es-ES.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Spanish\n" "Language: es_ES\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" diff --git a/locale/fr-FR.po b/locale/fr-FR.po index b2a11448..28fcd425 100644 --- a/locale/fr-FR.po +++ b/locale/fr-FR.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: French\n" "Language: fr_FR\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" diff --git a/locale/hr-HR.po b/locale/hr-HR.po index f0eacff1..968e0d85 100644 --- a/locale/hr-HR.po +++ b/locale/hr-HR.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Croatian\n" "Language: hr_HR\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" diff --git a/locale/id-ID.po b/locale/id-ID.po index aafeba7c..0135dbb8 100644 --- a/locale/id-ID.po +++ b/locale/id-ID.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Indonesian\n" "Language: id_ID\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" @@ -1762,11 +1762,11 @@ msgstr "Ukuran Semula" #: tabby-serial/src/hotkeys.ts:14 msgid "Restart current serial session" -msgstr "" +msgstr "Mulai ulang sesi serial saat ini" #: tabby-ssh/src/hotkeys.ts:10 msgid "Restart current SSH session" -msgstr "" +msgstr "Mulai ulang sesi SSH saat ini" #: tabby-telnet/src/hotkeys.ts:10 msgid "Restart current Telnet session" @@ -2401,7 +2401,7 @@ msgstr "" #: tabby-ssh/src/session/ssh.ts:465 msgid "Using preset password" -msgstr "" +msgstr "Gunakan kata sandi yang telah disetel sebelumnya" #: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:9 msgid "Vault" diff --git a/locale/it-IT.po b/locale/it-IT.po index bb49deb7..d69e27c6 100644 --- a/locale/it-IT.po +++ b/locale/it-IT.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Italian\n" "Language: it_IT\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" @@ -31,7 +31,7 @@ msgstr "Annulla tutto" #: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:24 msgid "Accept and remember key" -msgstr "Accetta e ricorda la chiave" +msgstr "Accetta e ricorda chiave" #: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25 msgid "Accept just this once" @@ -43,7 +43,7 @@ msgstr "Accessibilità" #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27 msgid "Acrylic background" -msgstr "Sfondo traslucido" +msgstr "Sfondo acrilico" #: locale/tmp-html/tabby-local/src/components/commandLineEditor.component.html:24 #: locale/tmp-html/tabby-local/src/components/environmentEditor.component.html:11 @@ -225,8 +225,7 @@ msgstr "Incolla tra parentesi (richiede una shell che lo supporti)" #: tabby-terminal/src/services/multifocus.service.ts:19 msgid "Broadcast mode. Click anywhere to cancel." -msgstr "Modalità broadcast. \n" -"Fai clic ovunque per annullare." +msgstr "Modalità broadcast. Fai clic ovunque per disabilitare." #: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:50 #: tabby-core/src/services/profiles.service.ts:411 @@ -508,7 +507,7 @@ msgstr "CSS personalizzato" #: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:17 msgid "Dark mode" -msgstr "Modalità scura" +msgstr "Tema scuro" #: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:26 msgid "Data bits" @@ -708,7 +707,7 @@ msgstr "La selezione con doppio clic si fermerà a questi caratteri" #: tabby-core/src/tabContextMenu.ts:79 msgid "Down" -msgstr "Giù" +msgstr "In basso" #: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43 msgid "Download" @@ -896,7 +895,7 @@ msgstr "Evidenzia il riquadro a destra" #: tabby-core/src/theme.ts:34 msgid "Follow the color scheme" -msgstr "Segui lo schema dei colori" +msgstr "Segui il tema di sistema" #: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:5 msgid "Font" @@ -1209,7 +1208,7 @@ msgstr "Scopri come consentire a Tabby di rilevare la cartella di lavoro della s #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76 #: tabby-core/src/tabContextMenu.ts:80 msgid "Left" -msgstr "Sinistra" +msgstr "A sinistra" #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:40 msgid "Lets the shell handle Meta key instead of OS" @@ -1802,7 +1801,7 @@ msgstr "Riusa la sessione per più schede" #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:78 #: tabby-core/src/tabContextMenu.ts:78 msgid "Right" -msgstr "Destra" +msgstr "A destra" #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:56 msgid "Right click" @@ -2361,7 +2360,7 @@ msgstr "Sgancia" #: tabby-core/src/tabContextMenu.ts:81 msgid "Up" -msgstr "Su" +msgstr "In alto" #: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:14 #: tabby-electron/src/services/updater.service.ts:133 @@ -2429,7 +2428,7 @@ msgstr "La cassaforte non è configurata" #: tabby-core/src/services/fileProviders.service.ts:40 msgid "Vault master passphrase needs to be set to allow storing secrets" -msgstr "Per consentire la memorizzazione di dati cifrati deve essere impostata la frase segreta principale della cassaforte." +msgstr "Per consentire la memorizzazione di dati cifrati deve essere impostata la frase segreta principale della cassaforte" #: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11 msgid "Verify host keys when connecting" @@ -2465,7 +2464,7 @@ msgstr "Attenzione: la chiave dell'host remoto è improvvisamente cambiata!" #: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:67 msgid "We're only tracking your Tabby and OS versions." -msgstr "Monitoreremo soltanto le versioni di Tabby e del sistema operativo." +msgstr "Monitoreremo soltanto le versioni di Tabby e del Sistema Operativo." #: tabby-core/src/components/welcomeTab.component.ts:25 msgid "Welcome" @@ -2510,7 +2509,7 @@ msgstr "Dimensione finestra fuori dal bordo" #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:52 msgid "Window frame" -msgstr "Cornice finestra" +msgstr "Cornice della finestra" #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:165 msgid "Windows" @@ -2526,7 +2525,7 @@ msgstr "Percorso WinSCP" #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74 msgid "Word separators" -msgstr "Separatori parole" +msgstr "Separatori di parole" #: locale/tmp-html/tabby-local/src/components/localProfileSettings.component.html:10 msgid "Working directory" @@ -2563,11 +2562,11 @@ msgstr "In questo momento potresti essere sotto un attacco man-in-the-middle, o #: tabby-terminal/src/hotkeys.ts:54 msgid "Zoom in" -msgstr "Zoom +" +msgstr "Zoom avanti" #: tabby-terminal/src/hotkeys.ts:58 msgid "Zoom out" -msgstr "Zoom -" +msgstr "Zoom indietro" #: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:43 #: locale/tmp-html/tabby-ssh/src/components/sshPortForwardingConfig.component.html:5 diff --git a/locale/ja-JP.po b/locale/ja-JP.po index f07ed778..b721fbb9 100644 --- a/locale/ja-JP.po +++ b/locale/ja-JP.po @@ -10,11 +10,11 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Japanese\n" "Language: ja_JP\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" -msgstr "\"{command}\"が実行中です。閉じますか?" +msgstr "\"{command}\"が実行中です。閉じてもよろしいですか?" #: tabby-settings/src/components/profilesSettingsTab.component.ts:78 #: tabby-settings/src/components/profilesSettingsTab.component.ts:88 @@ -23,7 +23,7 @@ msgstr "{name} コピー" #: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:77 msgid "A second font family used to display characters missing in the main font" -msgstr "既定フォントに不足している文字を表示する際に使用されます" +msgstr "メインフォントに不足している文字を表示する際に使用されます" #: tabby-core/src/components/transfersMenu.component.ts:49 msgid "Abort all" @@ -64,7 +64,7 @@ msgstr "追加..." #: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:84 msgid "Additional space between lines" -msgstr "行間にスペースを空けます" +msgstr "行と行の間隔を広げます" #: locale/tmp-html/tabby-serial/src/components/serialProfileSettings.component.html:22 #: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:61 @@ -79,15 +79,15 @@ msgstr "SSHエージェント" #: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:134 msgid "Agent forwarding" -msgstr "SSHエージェントの転送" +msgstr "SSHエージェント転送" #: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:35 msgid "Agent pipe path" -msgstr "SSHエージェントのパイプのパス" +msgstr "SSHエージェントのパイプ名" #: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:24 msgid "Agent type" -msgstr "SSHエージェントの種類" +msgstr "SSHエージェントの指定" #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169 msgid "Allows opening .bat files in tabs, but breaks some shells" @@ -354,7 +354,7 @@ msgstr "コマンドライン" #: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:13 msgid "Command's stdin/stdout is used instead of a network connection" -msgstr "ネットワーク接続の代わりにコマンドの stdin/stdout が使用されます" +msgstr "ネットワーク接続の代わりにコマンドの stdin/stdout を使用します" #: tabby-core/src/services/commands.service.ts:105 msgid "Commands" @@ -486,7 +486,7 @@ msgstr "使用中の配色" #: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:17 msgid "Current host key fingerprint" -msgstr "使用中のホストキーのフィンガープリント" +msgstr "現在のホスト鍵のフィンガープリント" #: tabby-core/src/tabContextMenu.ts:184 msgid "Current process: {name}" @@ -618,7 +618,7 @@ msgstr "デバイス" #: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:10 msgid "Direct" -msgstr "直接" +msgstr "直接接続" #: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:57 msgid "Disable" @@ -1039,11 +1039,11 @@ msgstr "ホスト" #: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:206 msgid "Host key" -msgstr "ホストキー" +msgstr "ホスト鍵" #: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:3 msgid "Host key verification" -msgstr "ホストキーの検証" +msgstr "ホスト鍵の検証" #: locale/tmp-html/tabby-settings/src/components/hotkeySettingsTab.component.html:2 #: tabby-settings/src/settings.ts:15 @@ -1131,7 +1131,7 @@ msgstr "無効な構文" #: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:16 #: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:43 msgid "Jump host" -msgstr "ジャンプサーバー" +msgstr "踏み台サーバー" #: tabby-terminal/src/hotkeys.ts:34 msgid "Jump to next word" @@ -1188,7 +1188,7 @@ msgstr "言語" #: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:11 msgid "Last known host key fingerprint" -msgstr "最後に使用したホストキーのフィンガープリント" +msgstr "最後に使われたホスト鍵のフィンガープリント" #: tabby-ssh/src/tabContextMenu.ts:32 msgid "Launch WinSCP" @@ -1201,7 +1201,7 @@ msgstr "現在のSSHセッションでWinSCPを起動" #: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:16 #: locale/tmp-html/tabby-ssh/src/components/sshTab.component.html:7 msgid "Learn how to allow Tabby to detect remote shell's working directory." -msgstr "Tabbyにリモート側の作業ディレクトリを検出させる方法をご紹介します。" +msgstr "リモート上の作業ディレクトリを自動検出する方法をご紹介します。" #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:134 #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:76 @@ -1227,7 +1227,7 @@ msgstr "Enterキーを押すと入力が送信されます" #: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83 msgid "Line padding" -msgstr "行間の大きさ" +msgstr "行間" #: locale/tmp-html/tabby-ssh/src/components/sftpPanel.component.html:21 msgid "Loading" @@ -1325,7 +1325,7 @@ msgstr "新規" #: tabby-local/src/tabContextMenu.ts:53 msgid "New admin tab" -msgstr "新しい管理者タブ" +msgstr "新しい管理者権限タブ" #: tabby-settings/src/components/configSyncSettingsTab.component.ts:58 msgid "New config on {platform}" @@ -1511,11 +1511,11 @@ msgstr "リモートを上書きして同期" #: tabby-settings/src/components/configSyncSettingsTab.component.ts:76 msgid "Overwrite the config on the remote side and start syncing?" -msgstr "リモート上の設定を上書きして同期を開始しますか?" +msgstr "リモート上の設定を上書きして、同期を開始しますか?" #: tabby-settings/src/components/configSyncSettingsTab.component.ts:96 msgid "Overwrite the local config and start syncing?" -msgstr "これまでのローカル上の設定を上書きして、同期を開始しますか?" +msgstr "現在のローカル上の設定を上書きして、同期を開始しますか?" #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189 msgid "Pane resize step" @@ -1535,7 +1535,7 @@ msgstr "パリティ" #: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:64 msgid "Partial config sync is not possible when the config is encrypted via Vault." -msgstr "設定ファイルがVaultによって暗号化されている場合、部分的な設定の同期はできません。" +msgstr "Vaultによって設定ファイルを暗号化した場合、設定の一部だけを同期から外すことはできません。" #: tabby-terminal/src/components/inputProcessingSettings.component.ts:17 msgid "Pass-through" @@ -1562,11 +1562,11 @@ msgstr "クリップボードから貼り付け" #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63 msgid "Paste if no selection, else copy" -msgstr "通常は貼り付け、テキスト選択時のみコピー、" +msgstr "通常は貼り付け、テキスト選択時のみコピー" #: tabby-terminal/src/api/baseTerminalTab.component.ts:528 msgid "Paste multiple lines?" -msgstr "複数行の貼り付けを実行してもよろしいですか?" +msgstr "複数行貼り付けを実行してもよろしいですか?" #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68 msgid "Paste on middle-click" @@ -1960,7 +1960,7 @@ msgstr "最近使用したプロファイルをセレクターに表示しない #: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:36 msgid "Sets the SSH agent's named pipe path." -msgstr "SSHエージェントの名前付きパイプのパスを設定" +msgstr "SSHエージェントの名前付きパイプのパスを指定します。" #: tabby-settings/src/buttonProvider.ts:28 #: tabby-settings/src/components/settingsTab.component.ts:57 @@ -1990,7 +1990,7 @@ msgstr "{type} プロファイルセレクターを表示" #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117 msgid "Show a confirmation box when pasting multiple lines" -msgstr "複数行を貼り付ける際に確認ボックスを表示します" +msgstr "複数行の貼り付けをする際に確認画面を表示します" #: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:75 msgid "Show built-in profiles in selector" @@ -2268,7 +2268,7 @@ msgstr "端末の識別情報" #: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:7 msgid "Thank you for downloading Tabby!" -msgstr "Tabbyをダウンロードしていただきありがとうございます!" +msgstr "Tabbyをダウンロードしてくださり、ありがとうございます!" #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:5 msgid "Theme" @@ -2280,7 +2280,7 @@ msgstr "ファイル転送を使用中" #: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:102 msgid "There is a saved password for this connection" -msgstr "この接続に利用可能なパスワードが保存されています。" +msgstr "この接続に使用するパスワードを保存しています。" #: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:102 msgid "These apply to all profiles of a given type" @@ -2397,7 +2397,7 @@ msgstr "ユーザー名" #: locale/tmp-html/tabby-ssh/src/components/sshProfileSettings.component.html:25 msgid "Using CONNECT method" -msgstr "CONNECTメソッドの使用" +msgstr "CONNECTメソッドを使用します" #: tabby-ssh/src/session/ssh.ts:465 msgid "Using preset password" @@ -2426,11 +2426,11 @@ msgstr "Vaultが設定されていません" #: tabby-core/src/services/fileProviders.service.ts:40 msgid "Vault master passphrase needs to be set to allow storing secrets" -msgstr "機密性の高い情報を保存するには、Vaultのマスターパスフレーズを設定する必要があります" +msgstr "機密性の高い情報を保存するには、Vaultにマスターパスフレーズを設定する必要があります" #: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:11 msgid "Verify host keys when connecting" -msgstr "接続時にホストキーを確認" +msgstr "接続時にホスト鍵を検証" #: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:75 msgid "Version" @@ -2478,7 +2478,7 @@ msgstr "セッション終了時" #: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82 msgid "When enabled, links are only clickable while holding this key" -msgstr "有効にすると、特定のキーを押しながらクリックした時のみリンクが開けるようになります" +msgstr "有効にすると、特定のキーを押しながらクリックした時のみリンクを開きます" #: locale/tmp-html/tabby-ssh/src/components/sshSettingsTab.component.html:18 msgid "When WinSCP is detected, you can launch an SCP session from the context menu." @@ -2556,7 +2556,7 @@ msgstr "後から変更できますが、忘れた場合復元することはで #: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:7 msgid "You could be under a man-in-the-middle attack right now, or the host key could have just been changed." -msgstr "現在中間者攻撃を受けているか、もしくは、ホストキーが変更された可能性があります。" +msgstr "現在中間者攻撃を受けているか、もしくはホスト鍵が変更された可能性があります。" #: tabby-terminal/src/hotkeys.ts:54 msgid "Zoom in" diff --git a/locale/ko-KR.po b/locale/ko-KR.po index 90164d4d..4b2467b5 100644 --- a/locale/ko-KR.po +++ b/locale/ko-KR.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Korean\n" "Language: ko_KR\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" diff --git a/locale/pl-PL.po b/locale/pl-PL.po index 9a8587e3..0db05073 100644 --- a/locale/pl-PL.po +++ b/locale/pl-PL.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Polish\n" "Language: pl_PL\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" diff --git a/locale/pt-BR.po b/locale/pt-BR.po index 2d089820..a81d2f48 100644 --- a/locale/pt-BR.po +++ b/locale/pt-BR.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" diff --git a/locale/pt-PT.po b/locale/pt-PT.po index a8540ca8..629ef7bb 100644 --- a/locale/pt-PT.po +++ b/locale/pt-PT.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Portuguese\n" "Language: pt_PT\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" @@ -39,7 +39,7 @@ msgstr "Aceitar apenas desta vez" #: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84 msgid "Accessibility" -msgstr "" +msgstr "acessibilidade" #: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:27 msgid "Acrylic background" @@ -100,12 +100,12 @@ msgstr "Permite abrir um terminal rapidamente na pasta selecionada" #: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:25 #: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:11 msgid "Always dark" -msgstr "" +msgstr "sempre escuro" #: locale/tmp-html/tabby-core/src/components/welcomeTab.component.html:27 #: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsTab.component.html:13 msgid "Always light" -msgstr "" +msgstr "Sempre luminoso" #: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:2 #: tabby-terminal/src/settings.ts:14 @@ -498,7 +498,7 @@ msgstr "Formato do cursor" #: locale/tmp-html/tabby-terminal/src/components/colorSchemeSettingsForMode.component.html:46 msgid "Custom" -msgstr "" +msgstr "Personalizado" #: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:90 msgid "Custom CSS" @@ -538,7 +538,7 @@ msgstr "Perfil padrão para novas abas" #: locale/tmp-html/tabby-settings/src/components/editProfileGroupModal.component.html:16 msgid "Default profile group settings" -msgstr "" +msgstr "Parâmetros do grupo de perfis por defeito" #: locale/tmp-html/tabby-settings/src/components/profilesSettingsTab.component.html:101 msgid "Default profile settings" @@ -736,7 +736,7 @@ msgstr "Editar" #: tabby-electron/src/sftpContextMenu.ts:35 msgid "Edit locally" -msgstr "" +msgstr "Editar localmente" #: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:58 msgid "Enable" diff --git a/locale/ru-RU.po b/locale/ru-RU.po index e490cd03..6c836b51 100644 --- a/locale/ru-RU.po +++ b/locale/ru-RU.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Russian\n" "Language: ru_RU\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" diff --git a/locale/sr-SP.po b/locale/sr-SP.po index e5c36177..69b980e4 100644 --- a/locale/sr-SP.po +++ b/locale/sr-SP.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Serbian (Cyrillic)\n" "Language: sr_SP\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" diff --git a/locale/sv-SE.po b/locale/sv-SE.po index e27a020b..5cc640d8 100644 --- a/locale/sv-SE.po +++ b/locale/sv-SE.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Swedish\n" "Language: sv_SE\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" @@ -35,7 +35,7 @@ msgstr "Acceptera och kom ihåg nyckel" #: locale/tmp-html/tabby-ssh/src/components/hostKeyPromptModal.component.html:25 msgid "Accept just this once" -msgstr "Acceptera bara denna gång" +msgstr "Acceptera bara den här gången" #: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:84 msgid "Accessibility" diff --git a/locale/tr-TR.po b/locale/tr-TR.po index a8b26a35..9f3df279 100644 --- a/locale/tr-TR.po +++ b/locale/tr-TR.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Turkish\n" "Language: tr_TR\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" diff --git a/locale/uk-UA.po b/locale/uk-UA.po index a040deec..f6ad1e3d 100644 --- a/locale/uk-UA.po +++ b/locale/uk-UA.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" diff --git a/locale/zh-CN.po b/locale/zh-CN.po index ebc376b8..55e8afec 100644 --- a/locale/zh-CN.po +++ b/locale/zh-CN.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" diff --git a/locale/zh-TW.po b/locale/zh-TW.po index 893fb43f..ae206d35 100644 --- a/locale/zh-TW.po +++ b/locale/zh-TW.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: tabby\n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" -"PO-Revision-Date: 2024-03-11 20:11\n" +"PO-Revision-Date: 2024-07-10 09:04\n" #: tabby-local/src/components/terminalTab.component.ts:113 msgid "\"{command}\" is still running. Close?" From 9d117304173a3b48a4c588f10138cbefd071f354 Mon Sep 17 00:00:00 2001 From: Eugene Date: Mon, 15 Jul 2024 22:58:43 +0200 Subject: [PATCH 18/26] fixed #9746, fixed #9748, fixed #9757, fixed #9779 - altIsMeta not working on macOS --- tabby-terminal/src/frontends/xtermFrontend.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tabby-terminal/src/frontends/xtermFrontend.ts b/tabby-terminal/src/frontends/xtermFrontend.ts index be93e9b1..26961e77 100644 --- a/tabby-terminal/src/frontends/xtermFrontend.ts +++ b/tabby-terminal/src/frontends/xtermFrontend.ts @@ -399,6 +399,10 @@ export class XTermFrontend extends Frontend { } }) + this.xtermCore.browser.isWindows = this.hostApp.platform === Platform.Windows + this.xtermCore.browser.isLinux = this.hostApp.platform === Platform.Linux + this.xtermCore.browser.isMac = this.hostApp.platform === Platform.macOS + this.xterm.options.fontFamily = getCSSFontFamily(config) this.xterm.options.cursorStyle = { beam: 'bar', From a769fdd036b925b3e41c6d97b0ac84e4f27f2bfa Mon Sep 17 00:00:00 2001 From: Eugene Date: Mon, 15 Jul 2024 23:29:03 +0200 Subject: [PATCH 19/26] fixed #9760, fixed #9742, fixed #9762, fixed #9763 - terminals unexpectedly going to sleep --- tabby-core/src/components/splitTab.component.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tabby-core/src/components/splitTab.component.ts b/tabby-core/src/components/splitTab.component.ts index a2c428e2..94b59675 100644 --- a/tabby-core/src/components/splitTab.component.ts +++ b/tabby-core/src/components/splitTab.component.ts @@ -381,6 +381,9 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit } } }, 100) + + // Propagate visibility to new children + this.emitVisibility(this.visibility.value) } this.initialized.next() this.initialized.complete() From b4c3ac8ab601670183557cd58f1da33093d438f8 Mon Sep 17 00:00:00 2001 From: Eugene Date: Mon, 15 Jul 2024 23:53:30 +0200 Subject: [PATCH 20/26] handle node-powershell failing during icon resolution --- tabby-electron/src/shells/wsl.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tabby-electron/src/shells/wsl.ts b/tabby-electron/src/shells/wsl.ts index bf6bfd34..72f3b34a 100644 --- a/tabby-electron/src/shells/wsl.ts +++ b/tabby-electron/src/shells/wsl.ts @@ -56,7 +56,14 @@ export class WSLShellProvider extends ShellProvider { }) } - private async _resolveIcon (defaultDistKey: any): Promise { + private _resolveIcon (defaultDistKey: any): Promise { + return this._resolveIconInner(defaultDistKey).catch(e => { + console.error('Failed to resolve icon for WSL distribution:', defaultDistKey, e) + return wslIconMap.Linux + }) + } + + private async _resolveIconInner (defaultDistKey: any): Promise { let _icon = wslIconMap.Linux // check if the register has PackageFamilyName From 3d7308cea0dde31b4a9178725e99f0eb36d61266 Mon Sep 17 00:00:00 2001 From: Eugene Date: Thu, 18 Jul 2024 23:53:23 +0200 Subject: [PATCH 21/26] fixed #9751 - title/color observers not detaching when detaching a tab --- .../src/components/splitTab.component.ts | 32 +++++++++++++++---- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/tabby-core/src/components/splitTab.component.ts b/tabby-core/src/components/splitTab.component.ts index 94b59675..b187fcb3 100644 --- a/tabby-core/src/components/splitTab.component.ts +++ b/tabby-core/src/components/splitTab.component.ts @@ -1,4 +1,4 @@ -import { Observable, Subject } from 'rxjs' +import { Observable, Subject, takeUntil, takeWhile } from 'rxjs' import { Component, Injectable, ViewChild, ViewContainerRef, EmbeddedViewRef, AfterViewInit, OnDestroy, Injector } from '@angular/core' import { BaseTabComponent, BaseTabProcess, GetRecoveryTokenOptions } from './baseTab.component' import { TabRecoveryProvider, RecoveryToken } from '../api/tabRecovery' @@ -837,20 +837,38 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit }) } - tab.subscribeUntilDestroyed(tab.titleChange$, () => this.updateTitle()) - tab.subscribeUntilDestroyed(tab.activity$, a => a ? this.displayActivity() : this.clearActivity()) - tab.subscribeUntilDestroyed(tab.progress$, p => this.setProgress(p)) + tab.subscribeUntilDestroyed( + this.observeUntilChildDetached(tab.titleChange$), + () => this.updateTitle(), + ) + tab.subscribeUntilDestroyed( + this.observeUntilChildDetached(tab.activity$), + a => a ? this.displayActivity() : this.clearActivity(), + ) + tab.subscribeUntilDestroyed( + this.observeUntilChildDetached(tab.progress$), + p => this.setProgress(p), + ) if (tab.title) { this.updateTitle() } - tab.subscribeUntilDestroyed(tab.recoveryStateChangedHint$, () => { - this.recoveryStateChangedHint.next() - }) + tab.subscribeUntilDestroyed( + this.observeUntilChildDetached(tab.recoveryStateChangedHint$), + () => { + this.recoveryStateChangedHint.next() + }, + ) tab.destroyed$.subscribe(() => { this.removeTab(tab) }) } + private observeUntilChildDetached (tab: BaseTabComponent, event: Observable): Observable { + return event.pipe(takeWhile(() => { + this.getAllTabs().includes(tab) + })) + } + private onAfterTabAdded (tab: BaseTabComponent) { setImmediate(() => { this.layout() From 4485e9a91724d2af8a375d84d37ed815289f0a1c Mon Sep 17 00:00:00 2001 From: Eugene Date: Thu, 18 Jul 2024 23:57:52 +0200 Subject: [PATCH 22/26] Revert "handle node-powershell failing during icon resolution" This reverts commit b4c3ac8ab601670183557cd58f1da33093d438f8. --- tabby-electron/src/shells/wsl.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/tabby-electron/src/shells/wsl.ts b/tabby-electron/src/shells/wsl.ts index 72f3b34a..bf6bfd34 100644 --- a/tabby-electron/src/shells/wsl.ts +++ b/tabby-electron/src/shells/wsl.ts @@ -56,14 +56,7 @@ export class WSLShellProvider extends ShellProvider { }) } - private _resolveIcon (defaultDistKey: any): Promise { - return this._resolveIconInner(defaultDistKey).catch(e => { - console.error('Failed to resolve icon for WSL distribution:', defaultDistKey, e) - return wslIconMap.Linux - }) - } - - private async _resolveIconInner (defaultDistKey: any): Promise { + private async _resolveIcon (defaultDistKey: any): Promise { let _icon = wslIconMap.Linux // check if the register has PackageFamilyName From 72a5da5ac3d1c5541feaa77d33b9a9a8b1354aa2 Mon Sep 17 00:00:00 2001 From: Eugene Date: Thu, 18 Jul 2024 23:57:58 +0200 Subject: [PATCH 23/26] Revert "wsl: Get the distro icon from the package family name" This reverts commit 1e6c2cba769fadf4fdce4715b8cf29b45bfe7984. --- app/package.json | 1 - .../src/components/profileIcon.component.pug | 6 +-- .../src/components/profileIcon.component.ts | 8 ---- tabby-electron/src/shells/wsl.ts | 42 +------------------ 4 files changed, 3 insertions(+), 54 deletions(-) diff --git a/app/package.json b/app/package.json index 819a1e39..679538de 100644 --- a/app/package.json +++ b/app/package.json @@ -24,7 +24,6 @@ "electron-updater": "^5.2.1", "fontmanager-redux": "1.1.0", "glasstron": "0.1.1", - "node-powershell": "5.0.1", "js-yaml": "4.1.0", "keytar": "^7.9.0", "mz": "^2.7.0", diff --git a/tabby-core/src/components/profileIcon.component.pug b/tabby-core/src/components/profileIcon.component.pug index 0e5d8446..afdad571 100644 --- a/tabby-core/src/components/profileIcon.component.pug +++ b/tabby-core/src/components/profileIcon.component.pug @@ -1,11 +1,7 @@ -.icon( - [fastHtmlBind]='pngPath', - *ngIf='!isHTML && isPNG' -) i.icon( class='fa-fw {{icon}}', [style.color]='color', - *ngIf='!isHTML && !isPNG' + *ngIf='!isHTML' ) .icon( [fastHtmlBind]='icon', diff --git a/tabby-core/src/components/profileIcon.component.ts b/tabby-core/src/components/profileIcon.component.ts index 0a837aba..89df4229 100644 --- a/tabby-core/src/components/profileIcon.component.ts +++ b/tabby-core/src/components/profileIcon.component.ts @@ -12,15 +12,7 @@ export class ProfileIconComponent extends BaseComponent { @Input() icon?: string @Input() color?: string - get pngPath (): string { - return `` - } - get isHTML (): boolean { return this.icon?.startsWith('<') ?? false } - - get isPNG (): boolean { - return this.icon?.endsWith('.png') ?? false - } } diff --git a/tabby-electron/src/shells/wsl.ts b/tabby-electron/src/shells/wsl.ts index bf6bfd34..67811a4d 100644 --- a/tabby-electron/src/shells/wsl.ts +++ b/tabby-electron/src/shells/wsl.ts @@ -6,8 +6,6 @@ import { HostAppService, Platform, isWindowsBuild, WIN_BUILD_WSL_EXE_DISTRO_FLAG import { ShellProvider, Shell } from 'tabby-local' -import { PowerShell } from 'node-powershell' - /* eslint-disable block-scoped-var */ try { @@ -40,42 +38,10 @@ const wslIconMap: Record = { /** @hidden */ @Injectable() export class WSLShellProvider extends ShellProvider { - private _pwsh: PowerShell - constructor ( private hostApp: HostAppService, ) { super() - - // make sure that this will not use the powershell profile - // that may take a long time to load - this._pwsh = new PowerShell({ - executableOptions: { - '-NoProfile': true, - }, - }) - } - - private async _resolveIcon (defaultDistKey: any): Promise { - let _icon = wslIconMap.Linux - - // check if the register has PackageFamilyName - if (defaultDistKey.PackageFamilyName) { - // get the icon from the package family name - const packageFamilyName = (defaultDistKey.PackageFamilyName.value as string).split('_')[0] - - if (packageFamilyName) { - const _ret = await this._pwsh.invoke(`Get-AppxPackage ${packageFamilyName} | ConvertTo-Json`) - - if (!_ret.hadErrors && _ret.stdout?.toString() !== undefined && _ret.stdout.toString() !== '') { - const appx = JSON.parse(_ret.stdout.toString()) - const installationLocation = appx.InstallLocation - _icon = `${installationLocation}\\Assets\\Square44x44Logo.targetsize-16.png` - } - } - } - - return _icon } async provide (): Promise { @@ -93,7 +59,6 @@ export class WSLShellProvider extends ShellProvider { if (lxss?.DefaultDistribution) { const defaultDistKey = wnr.getRegistryKey(wnr.HK.CU, lxssPath + '\\' + String(lxss.DefaultDistribution.value)) if (defaultDistKey?.DistributionName) { - const _icon = await this._resolveIcon(defaultDistKey) const shell: Shell = { id: 'wsl', name: 'WSL / Default distro', @@ -103,7 +68,7 @@ export class WSLShellProvider extends ShellProvider { COLORTERM: 'truecolor', }, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - icon: wslIconMap[defaultDistKey.DistributionName.value] ?? _icon, + icon: wslIconMap[defaultDistKey.DistributionName.value] ?? wslIconMap.Linux, } shells.push(shell) } @@ -125,14 +90,11 @@ export class WSLShellProvider extends ShellProvider { return [] } } - for (const child of wnr.listRegistrySubkeys(wnr.HK.CU, lxssPath) as string[]) { const childKey = wnr.getRegistryKey(wnr.HK.CU, lxssPath + '\\' + child) if (!childKey.DistributionName || !childKey.BasePath) { continue } - - const _icon = await this._resolveIcon(childKey) const wslVersion = (childKey.Flags?.value || 0) & 8 ? 2 : 1 const name = childKey.DistributionName.value const fsBase = wslVersion === 2 ? `\\\\wsl$\\${name}` : childKey.BasePath.value as string + '\\rootfs' @@ -148,7 +110,7 @@ export class WSLShellProvider extends ShellProvider { COLORTERM: 'truecolor', }, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - icon: wslIconMap[name] ?? _icon, + icon: wslIconMap[name] ?? wslIconMap.Linux, } shells.push(shell) } From 92bce02f3cc8d9701b1835263129d6e3a98f08a9 Mon Sep 17 00:00:00 2001 From: Eugene Date: Fri, 19 Jul 2024 00:01:46 +0200 Subject: [PATCH 24/26] lint --- tabby-core/src/components/splitTab.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tabby-core/src/components/splitTab.component.ts b/tabby-core/src/components/splitTab.component.ts index b187fcb3..2cccfddb 100644 --- a/tabby-core/src/components/splitTab.component.ts +++ b/tabby-core/src/components/splitTab.component.ts @@ -1,4 +1,4 @@ -import { Observable, Subject, takeUntil, takeWhile } from 'rxjs' +import { Observable, Subject, takeWhile } from 'rxjs' import { Component, Injectable, ViewChild, ViewContainerRef, EmbeddedViewRef, AfterViewInit, OnDestroy, Injector } from '@angular/core' import { BaseTabComponent, BaseTabProcess, GetRecoveryTokenOptions } from './baseTab.component' import { TabRecoveryProvider, RecoveryToken } from '../api/tabRecovery' From 6c9754c9675b3b05ab98505cd4255b218c3115ea Mon Sep 17 00:00:00 2001 From: Eugene Date: Fri, 19 Jul 2024 00:16:58 +0200 Subject: [PATCH 25/26] lint --- tabby-core/src/components/splitTab.component.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tabby-core/src/components/splitTab.component.ts b/tabby-core/src/components/splitTab.component.ts index 2cccfddb..1e4f4c29 100644 --- a/tabby-core/src/components/splitTab.component.ts +++ b/tabby-core/src/components/splitTab.component.ts @@ -838,22 +838,22 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit } tab.subscribeUntilDestroyed( - this.observeUntilChildDetached(tab.titleChange$), + this.observeUntilChildDetached(tab, tab.titleChange$), () => this.updateTitle(), ) tab.subscribeUntilDestroyed( - this.observeUntilChildDetached(tab.activity$), + this.observeUntilChildDetached(tab, tab.activity$), a => a ? this.displayActivity() : this.clearActivity(), ) tab.subscribeUntilDestroyed( - this.observeUntilChildDetached(tab.progress$), + this.observeUntilChildDetached(tab, tab.progress$), p => this.setProgress(p), ) if (tab.title) { this.updateTitle() } tab.subscribeUntilDestroyed( - this.observeUntilChildDetached(tab.recoveryStateChangedHint$), + this.observeUntilChildDetached(tab, tab.recoveryStateChangedHint$), () => { this.recoveryStateChangedHint.next() }, @@ -865,7 +865,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit private observeUntilChildDetached (tab: BaseTabComponent, event: Observable): Observable { return event.pipe(takeWhile(() => { - this.getAllTabs().includes(tab) + return this.getAllTabs().includes(tab) })) } From 3f0b78edd0b244bb3b5a862f217c509768dcd66d Mon Sep 17 00:00:00 2001 From: Eugene Date: Sat, 3 Aug 2024 10:31:19 +0200 Subject: [PATCH 26/26] upgraded to electron 29 --- app/lib/index.ts | 2 + app/lib/window.ts | 107 ++++++++++-------- app/package.json | 7 +- ... => @serialport+bindings-cpp+11.0.3.patch} | 0 app/webpack.config.main.mjs | 1 + app/yarn.lock | 28 +++-- package.json | 4 +- ...4.0.patch => app-builder-lib+24.6.4.patch} | 0 .../src/services/electron.service.ts | 2 - .../src/services/updater.service.ts | 36 +++--- tabby-linkifier/yarn.lock | 5 - tabby-ssh/yarn.lock | 20 +++- yarn.lock | 55 +++++---- 13 files changed, 145 insertions(+), 122 deletions(-) rename app/patches/{@serialport+bindings-cpp+11.0.1.patch => @serialport+bindings-cpp+11.0.3.patch} (100%) rename patches/{app-builder-lib+24.4.0.patch => app-builder-lib+24.6.4.patch} (100%) diff --git a/app/lib/index.ts b/app/lib/index.ts index cc55f413..5326393c 100644 --- a/app/lib/index.ts +++ b/app/lib/index.ts @@ -31,6 +31,8 @@ try { app.exit(1) } +process.mainModule = module + const application = new Application(configStore) ipcMain.on('app:new-window', () => { diff --git a/app/lib/window.ts b/app/lib/window.ts index 63ce9fef..d1887fae 100644 --- a/app/lib/window.ts +++ b/app/lib/window.ts @@ -1,5 +1,5 @@ import * as glasstron from 'glasstron' - +import { autoUpdater } from 'electron-updater' import { Subject, Observable, debounceTime } from 'rxjs' import { BrowserWindow, app, ipcMain, Rectangle, Menu, screen, BrowserWindowConstructorOptions, TouchBar, nativeImage, WebContents } from 'electron' import ElectronConfig = require('electron-config') @@ -159,6 +159,7 @@ export class Window { } this.setupWindowManagement() + this.setupUpdater() this.ready = new Promise(resolve => { const listener = event => { @@ -346,11 +347,8 @@ export class Window { this.send('host:window-focused') }) - ipcMain.on('ready', event => { - if (!this.window || event.sender !== this.window.webContents) { - return - } - this.window.webContents.send('start', { + this.on('ready', () => { + this.window?.webContents.send('start', { config: this.configStore, executable: app.getPath('exe'), windowID: this.window.id, @@ -359,42 +357,26 @@ export class Window { }) }) - ipcMain.on('window-minimize', event => { - if (!this.window || event.sender !== this.window.webContents) { - return - } - this.window.minimize() + this.on('window-minimize', () => { + this.window?.minimize() }) - ipcMain.on('window-set-bounds', (event, bounds) => { - if (!this.window || event.sender !== this.window.webContents) { - return - } - this.window.setBounds(bounds) + this.on('window-set-bounds', (_, bounds) => { + this.window?.setBounds(bounds) }) - ipcMain.on('window-set-always-on-top', (event, flag) => { - if (!this.window || event.sender !== this.window.webContents) { - return - } - this.window.setAlwaysOnTop(flag) + this.on('window-set-always-on-top', (_, flag) => { + this.window?.setAlwaysOnTop(flag) }) - ipcMain.on('window-set-vibrancy', (event, enabled, type) => { - if (!this.window || event.sender !== this.window.webContents) { - return - } + this.on('window-set-vibrancy', (_, enabled, type) => { this.setVibrancy(enabled, type) }) - ipcMain.on('window-set-window-controls-color', (event, theme) => { - if (!this.window || event.sender !== this.window.webContents) { - return - } - + this.on('window-set-window-controls-color', (_, theme) => { if (process.platform === 'win32') { const symbolColor: string = theme.foreground - this.window.setTitleBarOverlay( + this.window?.setTitleBarOverlay( { symbolColor: symbolColor, height: 32, @@ -403,32 +385,23 @@ export class Window { } }) - ipcMain.on('window-set-title', (event, title) => { - if (!this.window || event.sender !== this.window.webContents) { - return - } - this.window.setTitle(title) + this.on('window-set-title', (_, title) => { + this.window?.setTitle(title) }) - ipcMain.on('window-bring-to-front', event => { - if (!this.window || event.sender !== this.window.webContents) { - return - } - if (this.window.isMinimized()) { + this.on('window-bring-to-front', () => { + if (this.window?.isMinimized()) { this.window.restore() } this.present() }) - ipcMain.on('window-close', event => { - if (!this.window || event.sender !== this.window.webContents) { - return - } + this.on('window-close', () => { this.closing = true this.window.close() }) - ipcMain.on('window-set-touch-bar', (_event, segments, selectedIndex) => { + this.on('window-set-touch-bar', (_, segments, selectedIndex) => { this.touchBarControl.segments = segments.map(s => ({ label: s.label, icon: s.hasActivity ? activityIcon : undefined, @@ -468,8 +441,46 @@ export class Window { this.window.setOpacity(opacity) }) - ipcMain.on('window-set-progress-bar', (_event, value) => { - this.window.setProgressBar(value, { mode: value < 0 ? 'none' : 'normal' }) + this.on('window-set-progress-bar', (_, value) => { + this.window?.setProgressBar(value, { mode: value < 0 ? 'none' : 'normal' }) + }) + } + + on (event: string, listener: (...args: any[]) => void): void { + ipcMain.on(event, (e, ...args) => { + if (!this.window || e.sender !== this.window.webContents) { + return + } + listener(e, ...args) + }) + } + + private setupUpdater () { + autoUpdater.autoDownload = true + autoUpdater.autoInstallOnAppQuit = true + + autoUpdater.on('update-available', () => { + this.send('updater:update-available') + }) + + autoUpdater.on('update-not-available', () => { + this.send('updater:update-not-available') + }) + + autoUpdater.on('error', err => { + this.send('updater:error', err) + }) + + autoUpdater.on('update-downloaded', () => { + this.send('updater:update-downloaded') + }) + + this.on('updater:check-for-updates', () => { + autoUpdater.checkForUpdates() + }) + + this.on('updater:quit-and-install', () => { + autoUpdater.quitAndInstall() }) } diff --git a/app/package.json b/app/package.json index 679538de..63891ec0 100644 --- a/app/package.json +++ b/app/package.json @@ -15,7 +15,7 @@ "watch": "webpack --progress --color --watch" }, "dependencies": { - "@electron/remote": "2.0.10", + "@electron/remote": "^2", "node-pty": "^1.0", "any-promise": "^1.3.0", "electron-config": "2.0.0", @@ -63,8 +63,7 @@ "tabby-terminal": "*" }, "resolutions": { - "*/node-abi": "^2.20.0", - "node-gyp": "^10.0.0", - "nan": "github:jkleinsc/nan#remove_accessor_signature" + "*/node-abi": "^3", + "node-gyp": "^10.0.0" } } diff --git a/app/patches/@serialport+bindings-cpp+11.0.1.patch b/app/patches/@serialport+bindings-cpp+11.0.3.patch similarity index 100% rename from app/patches/@serialport+bindings-cpp+11.0.1.patch rename to app/patches/@serialport+bindings-cpp+11.0.3.patch diff --git a/app/webpack.config.main.mjs b/app/webpack.config.main.mjs index 920f0b11..ab8599de 100644 --- a/app/webpack.config.main.mjs +++ b/app/webpack.config.main.mjs @@ -42,6 +42,7 @@ const config = { 'electron-config': 'commonjs electron-config', 'electron-debug': 'commonjs electron-debug', 'electron-promise-ipc': 'commonjs electron-promise-ipc', + 'electron-updater': 'commonjs electron-updater', fs: 'commonjs fs', glasstron: 'commonjs glasstron', mz: 'commonjs mz', diff --git a/app/yarn.lock b/app/yarn.lock index 508f97b0..1aa949c3 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -2,10 +2,10 @@ # yarn lockfile v1 -"@electron/remote@2.0.10": - version "2.0.10" - resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-2.0.10.tgz#133e2f607b1861ac249bd78b5abd1e961feed713" - integrity sha512-3SFKKaQXcyWgwmibud+UqJl/XlHOgLcI3fwtB9pNelPSJAcTxocOJrF6FaxBIQaj1+R05Di6xuAswZpXAW7xhA== +"@electron/remote@^2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-2.1.2.tgz#52a97c8faa5b769155b649ef262f2f8c851776e6" + integrity sha512-EPwNx+nhdrTBxyCqXt/pftoQg/ybtWDW3DUWHafejvnB1ZGGfMpv6e15D8KeempocjXe78T7WreyGGb3mlZxdA== "@iarna/cli@^1.2.0": version "1.2.0" @@ -2577,9 +2577,10 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.17.0, "nan@github:jkleinsc/nan#remove_accessor_signature": - version "2.16.0" - resolved "https://codeload.github.com/jkleinsc/nan/tar.gz/6a2f95a6a2209d8aa7542fb18099fd808a802059" +nan@^2.17.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.20.0.tgz#08c5ea813dd54ed16e5bd6505bf42af4f7838ca3" + integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw== napi-build-utils@^1.0.1: version "1.0.2" @@ -2610,12 +2611,12 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-abi@^2.20.0: - version "2.30.1" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" - integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== +node-abi@^3: + version "3.65.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" + integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA== dependencies: - semver "^5.4.1" + semver "^7.3.5" node-abi@^3.3.0: version "3.8.0" @@ -3909,6 +3910,7 @@ strict-uri-encode@^2.0.0: integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + name string-width-cjs version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -3986,6 +3988,7 @@ stringify-package@^1.0.0, stringify-package@^1.0.1: integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.1: + name strip-ansi-cjs version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -4432,6 +4435,7 @@ worker-farm@^1.6.0, worker-farm@^1.7.0: errno "~0.1.7" "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + name wrap-ansi-cjs version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== diff --git a/package.json b/package.json index 3f2f049b..037bf809 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "cross-env": "7.0.3", "css-loader": "^6.7.3", "deep-equal": "2.0.5", - "electron": "^27.0.4", + "electron": "^29", "electron-builder": "^24.6.4", "electron-download": "^4.1.1", "electron-installer-snap": "^5.1.0", @@ -55,7 +55,7 @@ "lru-cache": "^6.0.0", "macos-release": "^3.1.0", "ngx-toastr": "^16.0.2", - "node-abi": "^3.51.0", + "node-abi": "^3.65.0", "npmlog": "6.0.2", "npx": "^10.2.2", "patch-package": "^6.4.7", diff --git a/patches/app-builder-lib+24.4.0.patch b/patches/app-builder-lib+24.6.4.patch similarity index 100% rename from patches/app-builder-lib+24.4.0.patch rename to patches/app-builder-lib+24.6.4.patch diff --git a/tabby-electron/src/services/electron.service.ts b/tabby-electron/src/services/electron.service.ts index a56e32ca..24e88a61 100644 --- a/tabby-electron/src/services/electron.service.ts +++ b/tabby-electron/src/services/electron.service.ts @@ -16,7 +16,6 @@ export class ElectronService { clipboard: Clipboard globalShortcut: GlobalShortcut screen: Screen - remote = remote process: any autoUpdater: AutoUpdater powerSaveBlocker: PowerSaveBlocker @@ -44,7 +43,6 @@ export class ElectronService { this.BrowserWindow = remote.BrowserWindow this.Menu = remote.Menu this.MenuItem = remote.MenuItem - this.MenuItem = remote.MenuItem this.nativeTheme = remote.nativeTheme } } diff --git a/tabby-electron/src/services/updater.service.ts b/tabby-electron/src/services/updater.service.ts index ae6132a9..141ca2fc 100644 --- a/tabby-electron/src/services/updater.service.ts +++ b/tabby-electron/src/services/updater.service.ts @@ -1,4 +1,3 @@ -import type { AppUpdater } from 'electron-updater' import { Injectable } from '@angular/core' import axios from 'axios' @@ -13,7 +12,6 @@ export class ElectronUpdaterService extends UpdaterService { private downloaded: Promise private electronUpdaterAvailable = true private updateURL: string - private autoUpdater: AppUpdater constructor ( log: LogService, @@ -30,32 +28,28 @@ export class ElectronUpdaterService extends UpdaterService { return } - this.autoUpdater = electron.remote.require('electron-updater').autoUpdater - this.autoUpdater.autoDownload = true - this.autoUpdater.autoInstallOnAppQuit = false - - this.autoUpdater.on('update-available', () => { + this.electron.ipcRenderer.on('updater:update-available', () => { this.logger.info('Update available') }) - this.autoUpdater.on('update-not-available', () => { + this.electron.ipcRenderer.on('updater:update-not-available', () => { this.logger.info('No updates') }) - this.autoUpdater.on('error', err => { + this.electron.ipcRenderer.on('updater:error', err => { this.logger.error(err) this.electronUpdaterAvailable = false }) this.downloaded = new Promise(resolve => { - this.autoUpdater.once('update-downloaded', () => resolve(true)) + this.electron.ipcRenderer.once('updater:update-downloaded', () => resolve(true)) }) config.ready$.toPromise().then(() => { if (config.store.enableAutomaticUpdates && this.electronUpdaterAvailable && !process.env.TABBY_DEV) { this.logger.debug('Checking for updates') try { - this.autoUpdater.checkForUpdates() + this.electron.ipcRenderer.send('updater:check-for-updates') } catch (e) { this.electronUpdaterAvailable = false this.logger.info('Electron updater unavailable, falling back', e) @@ -82,26 +76,26 @@ export class ElectronUpdaterService extends UpdaterService { reject(err) } cancel = () => { - this.autoUpdater.off('error', onError) - this.autoUpdater.off('update-not-available', onNoUpdate) - this.autoUpdater.off('update-available', onUpdate) + this.electron.ipcRenderer.off('updater:error', onError) + this.electron.ipcRenderer.off('updater:update-not-available', onNoUpdate) + this.electron.ipcRenderer.off('updater:update-available', onUpdate) } - this.autoUpdater.on('error', onError) - this.autoUpdater.on('update-not-available', onNoUpdate) - this.autoUpdater.on('update-available', onUpdate) + this.electron.ipcRenderer.on('updater:error', onError) + this.electron.ipcRenderer.on('updater:update-not-available', onNoUpdate) + this.electron.ipcRenderer.on('updater:update-available', onUpdate) try { - this.autoUpdater.checkForUpdates() + this.electron.ipcRenderer.send('updater:check-for-updates') } catch (e) { this.electronUpdaterAvailable = false this.logger.info('Electron updater unavailable, falling back', e) } }) - this.autoUpdater.on('update-available', () => { + this.electron.ipcRenderer.on('updater:update-available', () => { this.logger.info('Update available') }) - this.autoUpdater.once('update-not-available', () => { + this.electron.ipcRenderer.once('updater:update-not-available', () => { this.logger.info('No updates') }) @@ -138,7 +132,7 @@ export class ElectronUpdaterService extends UpdaterService { }, )).response === 0) { await this.downloaded - this.autoUpdater.quitAndInstall() + this.electron.ipcRenderer.send('updater:quit-and-install') } } } diff --git a/tabby-linkifier/yarn.lock b/tabby-linkifier/yarn.lock index 93475bf7..81339e7b 100644 --- a/tabby-linkifier/yarn.lock +++ b/tabby-linkifier/yarn.lock @@ -11,8 +11,3 @@ untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - -xterm-addon-web-links@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/xterm-addon-web-links/-/xterm-addon-web-links-0.7.0.tgz#dceac36170605f9db10a01d716bd83ee38f65c17" - integrity sha512-6PqoqzzPwaeSq22skzbvyboDvSnYk5teUYEoKBwMYvhbkwOQkemZccjWHT5FnNA8o1aInTc4PRYAl4jjPucCKA== diff --git a/tabby-ssh/yarn.lock b/tabby-ssh/yarn.lock index 75d5e470..34474ca1 100644 --- a/tabby-ssh/yarn.lock +++ b/tabby-ssh/yarn.lock @@ -9,15 +9,22 @@ dependencies: ipv6 "*" -"@types/node@*", "@types/node@20.3.1": +"@types/node@*": + version "22.1.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.1.0.tgz#6d6adc648b5e03f0e83c78dc788c2b037d0ad94b" + integrity sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw== + dependencies: + undici-types "~6.13.0" + +"@types/node@20.3.1": version "20.3.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe" integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg== "@types/ssh2-streams@*": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@types/ssh2-streams/-/ssh2-streams-0.1.8.tgz#142af404dae059931aea7fcd1511b5478964feb6" - integrity sha512-I7gixRPUvVIyJuCEvnmhr3KvA2dC0639kKswqD4H5b4/FOcnPtNU+qWLiXdKIqqX9twUvi5j0U1mwKE5CUsrfA== + version "0.1.12" + resolved "https://registry.yarnpkg.com/@types/ssh2-streams/-/ssh2-streams-0.1.12.tgz#e68795ba2bf01c76b93f9c9809e1f42f0eaaec5f" + integrity sha512-Sy8tpEmCce4Tq0oSOYdfqaBpA3hDM8SoxoFh5vzFsu2oL+znzGz8oVWW7xb4K920yYMUY+PIG31qZnFMfPWNCg== dependencies: "@types/node" "*" @@ -337,6 +344,11 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +undici-types@~6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" + integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== + winston@0.8.x: version "0.8.3" resolved "https://registry.yarnpkg.com/winston/-/winston-0.8.3.tgz#64b6abf4cd01adcaefd5009393b1d8e8bec19db0" diff --git a/yarn.lock b/yarn.lock index dcdd9f68..44dade65 100644 --- a/yarn.lock +++ b/yarn.lock @@ -863,10 +863,12 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe" integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg== -"@types/node@^18.11.18": - version "18.17.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.12.tgz#c6bd7413a13e6ad9cfb7e97dd5c4e904c1821e50" - integrity sha512-d6xjC9fJ/nSnfDeU0AMDsaJyb1iHsqCSOdi84w4u+SlN/UgQdY5tRhpMzaFYsI4mnpvgTivEaQd0yOUhAtOnEQ== +"@types/node@^20.9.0": + version "20.14.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.14.tgz#6b655d4a88623b0edb98300bb9dd2107225f885e" + integrity sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ== + dependencies: + undici-types "~5.26.4" "@types/parse5@^5": version "5.0.3" @@ -2505,13 +2507,13 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cpu-features@~0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.8.tgz#a2d464b023b8ad09004c8cdca23b33f192f63546" - integrity sha512-BbHBvtYhUhksqTjr6bhNOjGgMnhwhGTQmOoZGD+K7BCaQDCuZl/Ve1ZxUSMRwVC4D/rkCPQ2MAIeYzrWyK7eEg== +cpu-features@~0.0.9: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.10.tgz#9aae536db2710c7254d7ed67cb3cbc7d29ad79c5" + integrity sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA== dependencies: buildcheck "~0.0.6" - nan "^2.17.0" + nan "^2.19.0" crc@^3.8.0: version "3.8.0" @@ -3071,13 +3073,13 @@ electron-to-chromium@^1.4.284: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.286.tgz#0e039de59135f44ab9a8ec9025e53a9135eba11f" integrity sha512-Vp3CVhmYpgf4iXNKAucoQUDcCrBQX3XLBtwgFqP9BUXuucgvAV9zWp1kYU7LL9j4++s9O+12cb3wMtN4SJy6UQ== -electron@^27.0.4: - version "27.1.0" - resolved "https://registry.yarnpkg.com/electron/-/electron-27.1.0.tgz#d759885e552d7d926526cfc433ab312796f74a9a" - integrity sha512-XPdJiO475QJ8cx59/goWNNWnlV0vab+Ut3occymos7VDxkHV5mFrlW6tcGi+M3bW6gBfwpJocWMng8tw542vww== +electron@^29: + version "29.4.5" + resolved "https://registry.yarnpkg.com/electron/-/electron-29.4.5.tgz#b83bbeee6fc722dbbaab30d3a6bc8e982c9ab98d" + integrity sha512-DlEuzGbWBYl1Qr0qUYgNZdoixJg4YGHy2HC6fkRjSXSlb01UrQ5ORi8hNLzelzyYx8rNQyyE3zDUuk9EnZwYuA== dependencies: "@electron/get" "^2.0.0" - "@types/node" "^18.11.18" + "@types/node" "^20.9.0" extract-zip "^2.0.1" elliptic@^6.5.3: @@ -5983,7 +5985,7 @@ mute-stream@~0.0.4: resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -nan@2.17.0, nan@^2.17.0: +nan@2.17.0, nan@^2.18.0, nan@^2.19.0: version "2.17.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== @@ -6028,10 +6030,10 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-abi@^3.0.0, node-abi@^3.51.0: - version "3.51.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.51.0.tgz#970bf595ef5a26a271307f8a4befa02823d4e87d" - integrity sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA== +node-abi@^3.0.0, node-abi@^3.65.0: + version "3.65.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" + integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA== dependencies: semver "^7.3.5" @@ -8219,15 +8221,15 @@ sprintf-js@~1.0.2: integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= ssh2@^1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.14.0.tgz#8f68440e1b768b66942c9e4e4620b2725b3555bb" - integrity sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA== + version "1.15.0" + resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.15.0.tgz#2f998455036a7f89e0df5847efb5421748d9871b" + integrity sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw== dependencies: asn1 "^0.2.6" bcrypt-pbkdf "^1.0.2" optionalDependencies: - cpu-features "~0.0.8" - nan "^2.17.0" + cpu-features "~0.0.9" + nan "^2.18.0" sshpk@^1.7.0: version "1.16.1" @@ -8926,6 +8928,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unique-filename@^1.1.0, unique-filename@~1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz"