mirror of
https://github.com/Eugeny/tabby.git
synced 2025-09-12 19:34:34 +00:00
Compare commits
11 Commits
test
...
all-contri
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a7ce222041 | ||
![]() |
4c31b50da5 | ||
![]() |
ce3dbbd2b4 | ||
![]() |
afee91d04a | ||
![]() |
b976aef820 | ||
![]() |
9259ec2825 | ||
![]() |
6b2b0cc1f0 | ||
![]() |
2ee37ece6e | ||
![]() |
29532884df | ||
![]() |
0afb4e1fe7 | ||
![]() |
de1c621969 |
@@ -1130,123 +1130,6 @@
|
|||||||
"contributions": [
|
"contributions": [
|
||||||
"code"
|
"code"
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "CryptoGnome",
|
|
||||||
"name": "Crypto Gnome",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/33667144?v=4",
|
|
||||||
"profile": "https://www.gnomegarden.io/",
|
|
||||||
"contributions": [
|
|
||||||
"financial"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "rbukovansky",
|
|
||||||
"name": "Richard Bukovansky",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/1004491?v=4",
|
|
||||||
"profile": "https://github.com/rbukovansky",
|
|
||||||
"contributions": [
|
|
||||||
"financial"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "pseudocc",
|
|
||||||
"name": "catlas",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/85104110?v=4",
|
|
||||||
"profile": "https://github.com/pseudocc",
|
|
||||||
"contributions": [
|
|
||||||
"financial"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "Kapocsi",
|
|
||||||
"name": "Thomas Kapocsi",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/84490604?v=4",
|
|
||||||
"profile": "http://kapocsi.ca",
|
|
||||||
"contributions": [
|
|
||||||
"doc"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "dylhack",
|
|
||||||
"name": "Dylan Hackworth",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/27179786?v=4",
|
|
||||||
"profile": "https://dylhack.dev/",
|
|
||||||
"contributions": [
|
|
||||||
"financial"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "echo304",
|
|
||||||
"name": "Sangboak Lee",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/16456651?v=4",
|
|
||||||
"profile": "https://github.com/echo304",
|
|
||||||
"contributions": [
|
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "qyecst",
|
|
||||||
"name": "qyecst",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/13901864?v=4",
|
|
||||||
"profile": "https://github.com/qyecst",
|
|
||||||
"contributions": [
|
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "DehanLUO",
|
|
||||||
"name": "Han",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/53093688?v=4",
|
|
||||||
"profile": "https://github.com/DehanLUO",
|
|
||||||
"contributions": [
|
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "wljince007",
|
|
||||||
"name": "wljince007",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/88243938?v=4",
|
|
||||||
"profile": "https://github.com/wljince007",
|
|
||||||
"contributions": [
|
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "FeroTheFox",
|
|
||||||
"name": "fero",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/52982404?v=4",
|
|
||||||
"profile": "https://github.com/FeroTheFox",
|
|
||||||
"contributions": [
|
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "siebsie23",
|
|
||||||
"name": "Sibren",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/25083973?v=4",
|
|
||||||
"profile": "https://siebsie23.nl/",
|
|
||||||
"contributions": [
|
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "nwalser",
|
|
||||||
"name": "Nathaniel Walser",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/33339996?v=4",
|
|
||||||
"profile": "https://www.nathaniel-walser.com",
|
|
||||||
"contributions": [
|
|
||||||
"code"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"login": "aaronhuggins",
|
|
||||||
"name": "Aaron Huggins",
|
|
||||||
"avatar_url": "https://avatars.githubusercontent.com/u/16567111?v=4",
|
|
||||||
"profile": "https://github.com/aaronhuggins",
|
|
||||||
"contributions": [
|
|
||||||
"design"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"contributorsPerLine": 7,
|
"contributorsPerLine": 7,
|
||||||
@@ -1255,6 +1138,5 @@
|
|||||||
"repoType": "github",
|
"repoType": "github",
|
||||||
"repoHost": "https://github.com",
|
"repoHost": "https://github.com",
|
||||||
"commitConvention": "none",
|
"commitConvention": "none",
|
||||||
"skipCi": true,
|
"skipCi": true
|
||||||
"commitType": "docs"
|
|
||||||
}
|
}
|
||||||
|
@@ -1,13 +1,7 @@
|
|||||||
settings:
|
settings:
|
||||||
import/parsers:
|
|
||||||
'@typescript-eslint/parser': ['.ts']
|
|
||||||
import/resolver:
|
import/resolver:
|
||||||
typescript:
|
typescript: true
|
||||||
project:
|
|
||||||
- tsconfig.json
|
|
||||||
- tabby-*/tsconfig.json
|
|
||||||
node: true
|
node: true
|
||||||
|
|
||||||
env:
|
env:
|
||||||
browser: true
|
browser: true
|
||||||
es6: true
|
es6: true
|
||||||
@@ -34,7 +28,7 @@ overrides:
|
|||||||
- plugin:import/typescript
|
- plugin:import/typescript
|
||||||
plugins:
|
plugins:
|
||||||
- '@typescript-eslint'
|
- '@typescript-eslint'
|
||||||
- import
|
- 'import'
|
||||||
rules:
|
rules:
|
||||||
'@typescript-eslint/semi':
|
'@typescript-eslint/semi':
|
||||||
- error
|
- error
|
||||||
@@ -136,7 +130,6 @@ overrides:
|
|||||||
'@typescript-eslint/naming-convention': off
|
'@typescript-eslint/naming-convention': off
|
||||||
'@typescript-eslint/lines-between-class-members':
|
'@typescript-eslint/lines-between-class-members':
|
||||||
- error
|
- error
|
||||||
- always
|
|
||||||
- exceptAfterSingleLine: true
|
- exceptAfterSingleLine: true
|
||||||
'@typescript-eslint/dot-notation': off
|
'@typescript-eslint/dot-notation': off
|
||||||
'@typescript-eslint/no-implicit-any-catch': off
|
'@typescript-eslint/no-implicit-any-catch': off
|
||||||
@@ -159,6 +152,3 @@ overrides:
|
|||||||
'@typescript-eslint/consistent-generic-constructors': off
|
'@typescript-eslint/consistent-generic-constructors': off
|
||||||
'keyword-spacing': off
|
'keyword-spacing': off
|
||||||
'@typescript-eslint/keyword-spacing': off
|
'@typescript-eslint/keyword-spacing': off
|
||||||
'@typescript-eslint/class-methods-use-this': off
|
|
||||||
'@typescript-eslint/lines-around-comment': off
|
|
||||||
'@typescript-eslint/no-redundant-type-constituents': off # broken
|
|
||||||
|
225
.github/workflows/build.yml
vendored
225
.github/workflows/build.yml
vendored
@@ -2,7 +2,7 @@ name: Package-Build
|
|||||||
on: [push, pull_request]
|
on: [push, pull_request]
|
||||||
jobs:
|
jobs:
|
||||||
Lint:
|
Lint:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: macos-11
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@@ -11,7 +11,7 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Installing Node
|
- name: Installing Node
|
||||||
uses: actions/setup-node@v3.7.0
|
uses: actions/setup-node@v3.5.1
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 16
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ jobs:
|
|||||||
run: yarn run lint
|
run: yarn run lint
|
||||||
|
|
||||||
macOS-Build:
|
macOS-Build:
|
||||||
runs-on: macos-12
|
runs-on: macos-11
|
||||||
needs: Lint
|
needs: Lint
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
@@ -47,14 +47,13 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Installing Node
|
- name: Installing Node
|
||||||
uses: actions/setup-node@v3.7.0
|
uses: actions/setup-node@v3.5.1
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 16
|
||||||
|
|
||||||
- name: Install deps
|
- name: Install deps
|
||||||
run: |
|
run: |
|
||||||
sudo -H pip install setuptools
|
sudo npm i -g yarn@1.22.1
|
||||||
sudo npm i -g yarn@1.22.1 node-gyp@10
|
|
||||||
yarn --network-timeout 1000000
|
yarn --network-timeout 1000000
|
||||||
env:
|
env:
|
||||||
ARCH: ${{matrix.arch}}
|
ARCH: ${{matrix.arch}}
|
||||||
@@ -87,7 +86,6 @@ jobs:
|
|||||||
KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
||||||
CSC_LINK: ${{ secrets.CSC_LINK }}
|
CSC_LINK: ${{ secrets.CSC_LINK }}
|
||||||
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
|
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
|
||||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
|
||||||
APPSTORE_USERNAME: ${{ secrets.APPSTORE_USERNAME }}
|
APPSTORE_USERNAME: ${{ secrets.APPSTORE_USERNAME }}
|
||||||
APPSTORE_PASSWORD: ${{ secrets.APPSTORE_PASSWORD }}
|
APPSTORE_PASSWORD: ${{ secrets.APPSTORE_PASSWORD }}
|
||||||
USE_HARD_LINKS: false
|
USE_HARD_LINKS: false
|
||||||
@@ -111,16 +109,16 @@ jobs:
|
|||||||
|
|
||||||
- name: Package artifacts
|
- name: Package artifacts
|
||||||
run: |
|
run: |
|
||||||
mkdir artifact-dmg
|
mkdir artifact-pkg
|
||||||
mv dist/*.dmg artifact-dmg/
|
mv dist/*.pkg artifact-pkg/
|
||||||
mkdir artifact-zip
|
mkdir artifact-zip
|
||||||
mv dist/*.zip artifact-zip/
|
mv dist/*.zip artifact-zip/
|
||||||
|
|
||||||
- uses: actions/upload-artifact@master
|
- uses: actions/upload-artifact@master
|
||||||
name: Upload DMG
|
name: Upload PKG
|
||||||
with:
|
with:
|
||||||
name: macOS .dmg (${{matrix.arch}})
|
name: macOS .pkg (${{matrix.arch}})
|
||||||
path: artifact-dmg
|
path: artifact-pkg
|
||||||
|
|
||||||
- uses: actions/upload-artifact@master
|
- uses: actions/upload-artifact@master
|
||||||
name: Upload ZIP
|
name: Upload ZIP
|
||||||
@@ -129,25 +127,11 @@ jobs:
|
|||||||
path: artifact-zip
|
path: artifact-zip
|
||||||
|
|
||||||
Linux-Build:
|
Linux-Build:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-18.04 # build against an older glibc for compatibility
|
||||||
needs: Lint
|
needs: Lint
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
build-arch: [ x64, arm64, armv7l ]
|
||||||
- build-arch: x64
|
|
||||||
arch: amd64
|
|
||||||
- build-arch: arm64
|
|
||||||
arch: arm64
|
|
||||||
triplet: aarch64-linux-gnu-
|
|
||||||
- build-arch: arm
|
|
||||||
arch: armhf
|
|
||||||
triplet: arm-linux-gnueabihf-
|
|
||||||
env:
|
|
||||||
CC: ${{matrix.triplet}}gcc
|
|
||||||
CXX: ${{matrix.triplet}}g++
|
|
||||||
ARCH: ${{matrix.build-arch}}
|
|
||||||
npm_config_arch: ${{matrix.build-arch}}
|
|
||||||
npm_config_target_arch: ${{matrix.build-arch}}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@@ -155,66 +139,35 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Install Node
|
- name: Set up multiarch/qemu-user-static
|
||||||
uses: actions/setup-node@v3.7.0
|
run: docker run --rm --privileged multiarch/qemu-user-static:register --reset
|
||||||
with:
|
if: matrix.build-arch != 'x64'
|
||||||
node-version: 18
|
|
||||||
|
|
||||||
- name: Install deps (amd64)
|
- name: Install Node (x64)
|
||||||
|
uses: actions/setup-node@v3.5.1
|
||||||
|
with:
|
||||||
|
node-version: 16
|
||||||
|
if: matrix.build-arch == 'x64'
|
||||||
|
|
||||||
|
- name: Install deps (x64)
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install libarchive-tools zsh python3-distutils
|
sudo apt-get install libarchive-tools zsh
|
||||||
|
|
||||||
- name: Install npm_modules (amd64)
|
|
||||||
run: |
|
|
||||||
npm i -g yarn
|
npm i -g yarn
|
||||||
yarn --network-timeout 1000000
|
yarn --network-timeout 1000000
|
||||||
if: matrix.build-arch == 'x64'
|
if: matrix.build-arch == 'x64'
|
||||||
|
|
||||||
- name: Setup Crossbuild (${{matrix.arch}})
|
- name: Webpack (x64)
|
||||||
run: |
|
run: yarn run build
|
||||||
sudo apt-get update -y && sudo apt-get install schroot sbuild debootstrap -y
|
if: matrix.build-arch == 'x64'
|
||||||
sudo debootstrap --include=git,curl,gnupg,ca-certificates,crossbuild-essential-${{matrix.arch}},python-dev,python3-dev,libarchive-tools,cmake --variant=buildd --exclude=snapd --components=main,restricted,universe,multiverse --extractor=dpkg-deb bionic /build-chroot/
|
|
||||||
echo 'deb [arch=amd64,i386] http://archive.ubuntu.com/ubuntu bionic main restricted universe multiverse' | sudo tee /build-chroot/etc/apt/sources.list >/dev/null
|
|
||||||
echo 'deb [arch=arm64,armhf] http://ports.ubuntu.com/ubuntu-ports bionic main restricted universe multiverse' | sudo tee -a /build-chroot/etc/apt/sources.list >/dev/null
|
|
||||||
curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor | sudo tee /build-chroot/etc/apt/trusted.gpg.d/nodesource.gpg >/dev/null
|
|
||||||
echo 'deb http://deb.nodesource.com/node_16.x bionic main' | sudo tee /build-chroot/etc/apt/sources.list.d/nodesource.list >/dev/null
|
|
||||||
echo "[build-chroot]
|
|
||||||
description=Ubuntu 18.04 Build chroot
|
|
||||||
type=directory
|
|
||||||
directory=/build-chroot
|
|
||||||
root-groups=root,sudo
|
|
||||||
profile=buildd
|
|
||||||
personality=linux
|
|
||||||
union-type=overlay" | sudo tee /etc/schroot/chroot.d/build-chroot.pref >/dev/null
|
|
||||||
echo "/home /home none rw,bind 0 0" | sudo tee -a /etc/schroot/buildd/fstab >/dev/null
|
|
||||||
|
|
||||||
if: matrix.build-arch != 'x64'
|
- name: Prepackage plugins (x64)
|
||||||
|
|
||||||
- name: Install node_modules & CrossBuild native modules for ${{matrix.arch}}
|
|
||||||
run: |
|
|
||||||
sudo schroot -c build-chroot -u root -- bash -c "apt-get update -y
|
|
||||||
dpkg --add-architecture ${{matrix.arch}}
|
|
||||||
apt-get install -y nodejs libfontconfig-dev:${{matrix.arch}} libsecret-1-dev:${{matrix.arch}} libnss3:${{matrix.arch}} libatk1.0-0:${{matrix.arch}} libatk-bridge2.0-0:${{matrix.arch}} libgdk-pixbuf2.0-0:${{matrix.arch}} libgtk-3-0:${{matrix.arch}} libgbm1:${{matrix.arch}}
|
|
||||||
export CC=${{matrix.triplet}}gcc CXX=${{matrix.triplet}}g++ LD=${{matrix.triplet}}ld
|
|
||||||
if [[ ${{matrix.arch}} == 'arm64' ]]; then
|
|
||||||
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/aarch64-linux-gnu/pkgconfig/
|
|
||||||
elif [[ ${{matrix.arch}} == 'armhf' ]]; then
|
|
||||||
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/arm-linux-gnueabihf/pkgconfig/
|
|
||||||
fi
|
|
||||||
export ARCH=${{matrix.build-arch}} npm_config_arch=${{matrix.build-arch}} npm_config_target_arch=${{matrix.build-arch}}
|
|
||||||
npm i -g yarn
|
|
||||||
yarn --network-timeout 1000000 --arch=${{matrix.build-arch}} --target_arch=${{matrix.build-arch}}"
|
|
||||||
if: matrix.build-arch != 'x64'
|
|
||||||
|
|
||||||
- name: Webpack (${{matrix.arch}})
|
|
||||||
run: yarn run build --arch=${{matrix.build-arch}} --target_arch=${{matrix.build-arch}}
|
|
||||||
|
|
||||||
- name: Prepackage plugins (${{matrix.arch}})
|
|
||||||
run: scripts/prepackage-plugins.mjs
|
run: scripts/prepackage-plugins.mjs
|
||||||
|
if: ${{matrix.build-arch == 'x64'}}
|
||||||
|
|
||||||
- name: Build packages (${{matrix.arch}})
|
- name: Build packages (x64)
|
||||||
run: scripts/build-linux.mjs
|
run: scripts/build-linux.mjs
|
||||||
|
if: ${{matrix.build-arch == 'x64'}}
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
||||||
@@ -225,54 +178,54 @@ jobs:
|
|||||||
run: zsh -c 'tar czf tabby-web.tar.gz (tabby-*|web)/dist'
|
run: zsh -c 'tar czf tabby-web.tar.gz (tabby-*|web)/dist'
|
||||||
if: matrix.build-arch == 'x64'
|
if: matrix.build-arch == 'x64'
|
||||||
|
|
||||||
# - name: Install deps and Build (arm64)
|
- name: Install deps and Build (arm64)
|
||||||
# uses: docker://multiarch/ubuntu-core:arm64-bionic
|
uses: docker://multiarch/ubuntu-core:arm64-bionic
|
||||||
# with:
|
with:
|
||||||
# args: >
|
args: >
|
||||||
# bash -c
|
bash -c
|
||||||
# "apt update && apt install curl lsb-release gnupg -y &&
|
"apt update && apt install curl lsb-release gnupg -y &&
|
||||||
# curl -fsSL https://deb.nodesource.com/setup_16.x | bash - &&
|
curl -fsSL https://deb.nodesource.com/setup_16.x | bash - &&
|
||||||
# apt install make build-essential git ruby libarchive-tools nodejs rpm libsecret-1-dev libfontconfig1-dev -y &&
|
apt install make build-essential git ruby libarchive-tools nodejs rpm libsecret-1-dev libfontconfig1-dev -y &&
|
||||||
# git config --global --add safe.directory /github/workspace &&
|
git config --global --add safe.directory /github/workspace &&
|
||||||
# gem install public_suffix -v 4.0.7 &&
|
gem install public_suffix -v 4.0.7 &&
|
||||||
# gem install fpm --no-document &&
|
gem install fpm --no-document &&
|
||||||
# npm i -g yarn &&
|
npm i -g yarn &&
|
||||||
# cd /github/workspace &&
|
cd /github/workspace &&
|
||||||
# yarn --network-timeout 1000000 &&
|
yarn --network-timeout 1000000 &&
|
||||||
# yarn run build &&
|
yarn run build &&
|
||||||
# scripts/prepackage-plugins.mjs &&
|
scripts/prepackage-plugins.mjs &&
|
||||||
# USE_SYSTEM_FPM=true scripts/build-linux.mjs"
|
USE_SYSTEM_FPM=true scripts/build-linux.mjs"
|
||||||
# env:
|
env:
|
||||||
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
# KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
||||||
# USE_HARD_LINKS: false
|
USE_HARD_LINKS: false
|
||||||
# if: matrix.build-arch == 'arm64' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags')
|
if: matrix.build-arch == 'arm64' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags')
|
||||||
|
|
||||||
# - name: Install deps and Build (armv7l)
|
- name: Install deps and Build (armv7l)
|
||||||
# uses: docker://multiarch/ubuntu-core:armhf-bionic
|
uses: docker://multiarch/ubuntu-core:armhf-bionic
|
||||||
# with:
|
with:
|
||||||
# args: >
|
args: >
|
||||||
# bash -c
|
bash -c
|
||||||
# "apt update && apt install curl lsb-release gnupg -y &&
|
"apt update && apt install curl lsb-release gnupg -y &&
|
||||||
# curl -fsSL https://deb.nodesource.com/setup_16.x | bash - &&
|
curl -fsSL https://deb.nodesource.com/setup_16.x | bash - &&
|
||||||
# apt install make build-essential git ruby libarchive-tools nodejs rpm libsecret-1-dev libfontconfig1-dev -y &&
|
apt install make build-essential git ruby libarchive-tools nodejs rpm libsecret-1-dev libfontconfig1-dev -y &&
|
||||||
# git config --global --add safe.directory /github/workspace &&
|
git config --global --add safe.directory /github/workspace &&
|
||||||
# gem install public_suffix -v 4.0.7 &&
|
gem install public_suffix -v 4.0.7 &&
|
||||||
# gem install fpm --no-document &&
|
gem install fpm --no-document &&
|
||||||
# npm i -g yarn &&
|
npm i -g yarn &&
|
||||||
# cd /github/workspace &&
|
cd /github/workspace &&
|
||||||
# sed -i '/ \"electron\":/c\ \"electron\": \"17.0.0\",' package.json &&
|
sed -i '/ \"electron\":/c\ \"electron\": \"17.0.0\",' package.json &&
|
||||||
# yarn --network-timeout 1000000 &&
|
yarn --network-timeout 1000000 &&
|
||||||
# yarn run build &&
|
yarn run build &&
|
||||||
# scripts/prepackage-plugins.mjs &&
|
scripts/prepackage-plugins.mjs &&
|
||||||
# USE_SYSTEM_FPM=true scripts/build-linux.mjs"
|
USE_SYSTEM_FPM=true scripts/build-linux.mjs"
|
||||||
# env:
|
env:
|
||||||
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
# KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
KEYGEN_TOKEN: ${{ secrets.KEYGEN_TOKEN }}
|
||||||
# USE_HARD_LINKS: false
|
USE_HARD_LINKS: false
|
||||||
# if: matrix.build-arch == 'arm' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags')
|
if: matrix.build-arch == 'armv7l' && github.repository == 'Eugeny/tabby' && startsWith(github.ref, 'refs/tags')
|
||||||
|
|
||||||
- name: Upload symbols (amd64 only)
|
- name: Upload symbols
|
||||||
run: |
|
run: |
|
||||||
sudo npm install -g @sentry/cli --unsafe-perm
|
sudo npm install -g @sentry/cli --unsafe-perm
|
||||||
./scripts/sentry-upload.mjs
|
./scripts/sentry-upload.mjs
|
||||||
@@ -292,37 +245,31 @@ jobs:
|
|||||||
dir: 'dist'
|
dir: 'dist'
|
||||||
|
|
||||||
- uses: actions/upload-artifact@master
|
- uses: actions/upload-artifact@master
|
||||||
name: Upload AppImage (${{matrix.arch}})
|
name: Upload DEB
|
||||||
with:
|
with:
|
||||||
name: Linux AppImage (${{matrix.arch}})
|
name: Linux DEB (${{matrix.build-arch}})
|
||||||
path: dist/*.AppImage
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@master
|
|
||||||
name: Upload DEB (${{matrix.arch}})
|
|
||||||
with:
|
|
||||||
name: Linux DEB (${{matrix.arch}})
|
|
||||||
path: dist/*.deb
|
path: dist/*.deb
|
||||||
|
|
||||||
- uses: actions/upload-artifact@master
|
- uses: actions/upload-artifact@master
|
||||||
name: Upload RPM (${{matrix.arch}})
|
name: Upload RPM
|
||||||
with:
|
with:
|
||||||
name: Linux RPM (${{matrix.arch}})
|
name: Linux RPM (${{matrix.build-arch}})
|
||||||
path: dist/*.rpm
|
path: dist/*.rpm
|
||||||
|
|
||||||
- uses: actions/upload-artifact@master
|
- uses: actions/upload-artifact@master
|
||||||
name: Upload Pacman Package (${{matrix.arch}})
|
name: Upload Pacman Package
|
||||||
with:
|
with:
|
||||||
name: Linux Pacman (${{matrix.arch}})
|
name: Linux Pacman (${{matrix.build-arch}})
|
||||||
path: dist/*.pacman
|
path: dist/*.pacman
|
||||||
|
|
||||||
- uses: actions/upload-artifact@master
|
- uses: actions/upload-artifact@master
|
||||||
name: Upload Linux tarball (${{matrix.arch}})
|
name: Upload Linux tarball
|
||||||
with:
|
with:
|
||||||
name: Linux tarball (${{matrix.arch}})
|
name: Linux tarball (${{matrix.build-arch}})
|
||||||
path: dist/*.tar.gz
|
path: dist/*.tar.gz
|
||||||
|
|
||||||
- uses: actions/upload-artifact@master
|
- uses: actions/upload-artifact@master
|
||||||
name: Upload web tarball (amd64 only)
|
name: Upload web tarball
|
||||||
with:
|
with:
|
||||||
name: Web tarball
|
name: Web tarball
|
||||||
path: tabby-web.tar.gz
|
path: tabby-web.tar.gz
|
||||||
@@ -346,7 +293,7 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Installing Node
|
- name: Installing Node
|
||||||
uses: actions/setup-node@v3.7.0
|
uses: actions/setup-node@v3.5.1
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 16
|
||||||
|
|
||||||
|
2
.github/workflows/docs.yml
vendored
2
.github/workflows/docs.yml
vendored
@@ -12,7 +12,7 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Installing Node
|
- name: Installing Node
|
||||||
uses: actions/setup-node@v3.7.0
|
uses: actions/setup-node@v3.5.1
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 16
|
||||||
|
|
||||||
|
10
HACKING.md
10
HACKING.md
@@ -17,6 +17,8 @@ First, from within the `tabby` directory install the dependencies via yarn:
|
|||||||
yarn
|
yarn
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Note: For compiling for Linux armv7l, you need to downgrade electron to 17.0.0 in package.json present in root directory of tabby source**
|
||||||
|
|
||||||
```
|
```
|
||||||
# Linux (Debian/Ubuntu here as an example)
|
# Linux (Debian/Ubuntu here as an example)
|
||||||
sudo apt install libfontconfig-dev libsecret-1-dev libarchive-tools libnss3 libatk1.0-0 libatk-bridge2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm1 cmake
|
sudo apt install libfontconfig-dev libsecret-1-dev libarchive-tools libnss3 libatk1.0-0 libatk-bridge2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm1 cmake
|
||||||
@@ -40,13 +42,13 @@ yarn start
|
|||||||
To build an installer, first complete a "normal" build as described above and then run:
|
To build an installer, first complete a "normal" build as described above and then run:
|
||||||
|
|
||||||
```
|
```
|
||||||
node scripts/prepackage-plugins.mjs
|
node scripts/prepackage-plugins.js
|
||||||
|
|
||||||
node scripts/build-windows.mjs
|
node scripts/build-windows.js
|
||||||
# or
|
# or
|
||||||
node scripts/build-linux.mjs
|
node scripts/build-linux.js
|
||||||
# or
|
# or
|
||||||
node scripts/build-macos.mjs
|
node scripts/build-macos.js
|
||||||
```
|
```
|
||||||
|
|
||||||
The artifacts will be produced in the `dist` folder.
|
The artifacts will be produced in the `dist` folder.
|
||||||
|
@@ -119,7 +119,6 @@ Plugins und Themen können direkt aus der Ansicht "Einstellungen" in Tabby insta
|
|||||||
* [clippy](https://github.com/Eugeny/tabby-clippy) - ein Beispiel-Plugin, das einen die ganze Zeit nervt
|
* [clippy](https://github.com/Eugeny/tabby-clippy) - ein Beispiel-Plugin, das einen die ganze Zeit nervt
|
||||||
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - ermöglicht das Erstellen eigener Workspace-Profile auf Basis der angegebenen Konfiguration
|
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - ermöglicht das Erstellen eigener Workspace-Profile auf Basis der angegebenen Konfiguration
|
||||||
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - öffnet den Standard-Systembrowser mit einem Text, der aus dem Tabby Tab ausgewählt wurde
|
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - öffnet den Standard-Systembrowser mit einem Text, der aus dem Tabby Tab ausgewählt wurde
|
||||||
* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - open sftp tab for ssh connection like SecureCRT
|
|
||||||
|
|
||||||
<a name="themes"></a>
|
<a name="themes"></a>
|
||||||
|
|
||||||
@@ -314,23 +313,6 @@ Dank geht an diese wunderbaren Menschen ([emoji key](https://allcontributors.org
|
|||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://siebsie23.nl/"><img src="https://avatars.githubusercontent.com/u/25083973?v=4?s=100" width="100px;" alt="Sibren"/><br /><sub><b>Sibren</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siebsie23" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.nathaniel-walser.com"><img src="https://avatars.githubusercontent.com/u/33339996?v=4?s=100" width="100px;" alt="Nathaniel Walser"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=nwalser" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/aaronhuggins"><img src="https://avatars.githubusercontent.com/u/16567111?v=4?s=100" width="100px;" alt="Aaron Huggins"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href="#design-aaronhuggins" title="Design">🎨</a></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@@ -120,7 +120,6 @@ Los plugins y los temas se pueden instalar directamente desde la vista de Config
|
|||||||
* [clippy](https://github.com/Eugeny/tabby-clippy) - un ejemplo de plugin que te molesta todo el tiempo
|
* [clippy](https://github.com/Eugeny/tabby-clippy) - un ejemplo de plugin que te molesta todo el tiempo
|
||||||
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - permite crear perfiles de espacio de trabajo personalizados basados en la configuración dada
|
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - permite crear perfiles de espacio de trabajo personalizados basados en la configuración dada
|
||||||
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - abre el navegador del sistema por defecto con un texto seleccionado en la pestaña de Tabby's
|
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - abre el navegador del sistema por defecto con un texto seleccionado en la pestaña de Tabby's
|
||||||
* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - open sftp tab for ssh connection like SecureCRT
|
|
||||||
<a name="themes"></a>
|
<a name="themes"></a>
|
||||||
|
|
||||||
# Temas
|
# Temas
|
||||||
@@ -316,23 +315,6 @@ Gracias a estas maravillosas personas ([emoji key](https://allcontributors.org/d
|
|||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://siebsie23.nl/"><img src="https://avatars.githubusercontent.com/u/25083973?v=4?s=100" width="100px;" alt="Sibren"/><br /><sub><b>Sibren</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siebsie23" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.nathaniel-walser.com"><img src="https://avatars.githubusercontent.com/u/33339996?v=4?s=100" width="100px;" alt="Nathaniel Walser"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=nwalser" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/aaronhuggins"><img src="https://avatars.githubusercontent.com/u/16567111?v=4?s=100" width="100px;" alt="Aaron Huggins"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href="#design-aaronhuggins" title="Design">🎨</a></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@@ -120,7 +120,6 @@ Tema dan Plugin bisa langsung di install dari Pengaturan di dalam Tabby.
|
|||||||
* [clippy](https://github.com/Eugeny/tabby-clippy) - suatu contoh plugin yang akan mengganggu anda setiap saat
|
* [clippy](https://github.com/Eugeny/tabby-clippy) - suatu contoh plugin yang akan mengganggu anda setiap saat
|
||||||
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - memperbolehkan membuat kustom profil workspace dari konfigurasi yang diberikan
|
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - memperbolehkan membuat kustom profil workspace dari konfigurasi yang diberikan
|
||||||
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - membuka browser default dengan text yang dipilih dari Tab Tabby
|
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - membuka browser default dengan text yang dipilih dari Tab Tabby
|
||||||
* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - open sftp tab for ssh connection like SecureCRT
|
|
||||||
|
|
||||||
<a name="themes"></a>
|
<a name="themes"></a>
|
||||||
|
|
||||||
@@ -313,23 +312,6 @@ Terima kasih kepada mereka yang telah membantu ([emoji key](https://allcontribut
|
|||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://siebsie23.nl/"><img src="https://avatars.githubusercontent.com/u/25083973?v=4?s=100" width="100px;" alt="Sibren"/><br /><sub><b>Sibren</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siebsie23" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.nathaniel-walser.com"><img src="https://avatars.githubusercontent.com/u/33339996?v=4?s=100" width="100px;" alt="Nathaniel Walser"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=nwalser" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/aaronhuggins"><img src="https://avatars.githubusercontent.com/u/16567111?v=4?s=100" width="100px;" alt="Aaron Huggins"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href="#design-aaronhuggins" title="Design">🎨</a></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@@ -117,7 +117,6 @@ Plugins and themes can be installed directly from the Settings view inside Tabby
|
|||||||
* [clippy](https://github.com/Eugeny/tabby-clippy) - an example plugin which annoys you all the time
|
* [clippy](https://github.com/Eugeny/tabby-clippy) - an example plugin which annoys you all the time
|
||||||
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - allows creating custom workspace profiles based on the given config
|
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - allows creating custom workspace profiles based on the given config
|
||||||
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - opens default system browser with a text selected from the Tabby's tab
|
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - opens default system browser with a text selected from the Tabby's tab
|
||||||
* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - open sftp tab for ssh connection like SecureCRT
|
|
||||||
|
|
||||||
<a name="themes"></a>
|
<a name="themes"></a>
|
||||||
# Temi
|
# Temi
|
||||||
@@ -309,23 +308,6 @@ Grazie a queste persone meravigliose ([emoji key](https://allcontributors.org/do
|
|||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://siebsie23.nl/"><img src="https://avatars.githubusercontent.com/u/25083973?v=4?s=100" width="100px;" alt="Sibren"/><br /><sub><b>Sibren</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siebsie23" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.nathaniel-walser.com"><img src="https://avatars.githubusercontent.com/u/33339996?v=4?s=100" width="100px;" alt="Nathaniel Walser"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=nwalser" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/aaronhuggins"><img src="https://avatars.githubusercontent.com/u/16567111?v=4?s=100" width="100px;" alt="Aaron Huggins"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href="#design-aaronhuggins" title="Design">🎨</a></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@@ -11,24 +11,17 @@
|
|||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
> 👋 リモート環境の管理に困ってませんか? [WarpgateというSSH/HTTP/MySQL向けの便利な踏み台サーバー](https://github.com/warp-tech/warpgate)も作ってます。Tabbyとも相性ばっちりなので良かったらお試しください。
|
|
||||||
|
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
### ダウンロード:
|
### ダウンロード:
|
||||||
|
|
||||||
* [最新のリリース](https://github.com/Eugeny/tabby/releases/latest)
|
* [Latest release](https://github.com/Eugeny/tabby/releases/latest)
|
||||||
* [リポジトリ](https://packagecloud.io/eugeny/tabby): [Debian/Ubuntu向け](https://packagecloud.io/eugeny/tabby/install#bash-deb), [RPM向け](https://packagecloud.io/eugeny/tabby/install#bash-rpm)
|
* [Repositories](https://packagecloud.io/eugeny/tabby): [Debian/Ubuntu-based](https://packagecloud.io/eugeny/tabby/install#bash-deb), [RPM-based](https://packagecloud.io/eugeny/tabby/install#bash-rpm)
|
||||||
* [最新の開発ビルド版](https://nightly.link/Eugeny/tabby/workflows/build/master)
|
* [Latest nightly build](https://nightly.link/Eugeny/tabby/workflows/build/master)
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
このREADMEは次の言語でもご覧いただけます: <a href="./README.md">:gb: English</a> · <a href="./README.es-ES.md">:es: Spanish</a> · <a href="./README.ru-RU.md">:ru: Русский</a> · <a href="./README.ko-KR.md">:kr: 한국어</a> · <a href="./README.zh-CN.md">:cn: 简体中文</a> · <a href="./README.it-IT.md">:it: Italiano</a> · <a href="./README.de-DE.md">:de: Deutsch</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a> · <a href="./README.pt-BR.md">:br: Português</a>
|
このREADMEは次の言語にも対応: <a href="./README.md">:gb: English</a> · <a href="./README.es-ES.md">:es: Spanish</a> · <a href="./README.ru-RU.md">:ru: Русский</a> · <a href="./README.ko-KR.md">:kr: 한국어</a> · <a href="./README.zh-CN.md">:cn: 简体中文</a> · <a href="./README.it-IT.md">:it: Italiano</a> · <a href="./README.de-DE.md">:de: Deutsch</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a> · <a href="./README.pt-BR.md">:br: Português</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
----
|
----
|
||||||
@@ -47,7 +40,7 @@
|
|||||||
* 大量の出力にも止まることはありません
|
* 大量の出力にも止まることはありません
|
||||||
* タブキーによる補完機能にも対応したWindows上での快適なシェル (Clink使用)
|
* タブキーによる補完機能にも対応したWindows上での快適なシェル (Clink使用)
|
||||||
* SSHの機密性の高い情報と設定を保存する暗号化コンテナの搭載
|
* SSHの機密性の高い情報と設定を保存する暗号化コンテナの搭載
|
||||||
* SSH、SFTP、Telnetクライアントが[Webアプリ](https://tabby.sh/app)としても利用できます ([セルフホスティング](https://github.com/Eugeny/tabby-web)も可能)
|
* SSH、SFTP、Telnetクライアントが[Webアプリ](https://tabby.sh/app)として利用可能 ([セルフホスティング](https://github.com/Eugeny/tabby-web)も可能)
|
||||||
|
|
||||||
# コンテンツ <!-- omit in toc -->
|
# コンテンツ <!-- omit in toc -->
|
||||||
|
|
||||||
@@ -94,7 +87,7 @@
|
|||||||
* SSH2クライアントと接続マネージャー
|
* SSH2クライアントと接続マネージャー
|
||||||
* X11とポートフォワーディング
|
* X11とポートフォワーディング
|
||||||
* 自動ジャンプサーバー管理
|
* 自動ジャンプサーバー管理
|
||||||
* エージェント転送(PageantとWindows標準OpenSSHエージェントを含む)
|
* エージェント転送(PageantとWindows標準OpenSSHエージェントを含む)
|
||||||
* ログインスクリプト
|
* ログインスクリプト
|
||||||
|
|
||||||
<a name="serial"></a>
|
<a name="serial"></a>
|
||||||
@@ -111,7 +104,7 @@
|
|||||||
|
|
||||||
# ポータブル機能
|
# ポータブル機能
|
||||||
|
|
||||||
Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォルダを作成すれば、ポータブルアプリとして実行することができます。
|
Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォルダを作成すれば、ポータブルアプリケーションとして実行することができます。
|
||||||
|
|
||||||
<a name="plugins"></a>
|
<a name="plugins"></a>
|
||||||
|
|
||||||
@@ -123,11 +116,10 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
|
|||||||
* [title-control](https://github.com/kbjr/terminus-title-control) - タブ名の前後に文字を入れたり指定した文字の削除をすることができます
|
* [title-control](https://github.com/kbjr/terminus-title-control) - タブ名の前後に文字を入れたり指定した文字の削除をすることができます
|
||||||
* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - 一つもしくは複数のタブに手軽にコマンド送信することができます
|
* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - 一つもしくは複数のタブに手軽にコマンド送信することができます
|
||||||
* [save-output](https://github.com/Eugeny/tabby-save-output) - ターミナルの出力をファイルに保存することができます
|
* [save-output](https://github.com/Eugeny/tabby-save-output) - ターミナルの出力をファイルに保存することができます
|
||||||
* [sync-config](https://github.com/starxg/terminus-sync-config) - GistやGiteeで設定ファイルを同期することができます
|
* [sync-config](https://github.com/starxg/terminus-sync-config) - GistやGiteeに設定ファイルを同期することができます
|
||||||
* [clippy](https://github.com/Eugeny/tabby-clippy) - プラグインの作例として、いつも厄介なあいつが出てくるプラグイン
|
* [clippy](https://github.com/Eugeny/tabby-clippy) - いつもあなたを悩ますプラグインの作例
|
||||||
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - 指定された設定からカスタマイズされたワークスペースを作成することができます
|
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - 指定された設定からカスタマイズされたワークスペースを作成することができます
|
||||||
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - Tabby内の端末で選択したテキストを既定ブラウザで開くことができます。
|
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - Tabby内の端末で選択したテキストを標準の既定ブラウザで開くことができます。
|
||||||
* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - open sftp tab for ssh connection like SecureCRT
|
|
||||||
|
|
||||||
<a name="themes"></a>
|
<a name="themes"></a>
|
||||||
|
|
||||||
@@ -145,21 +137,17 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
|
|||||||
|
|
||||||
[**packagecloud**](https://packagecloud.io)は、Debian/RPMリポジトリのホスティングを無償で提供しています
|
[**packagecloud**](https://packagecloud.io)は、Debian/RPMリポジトリのホスティングを無償で提供しています
|
||||||
|
|
||||||
[](https://keygen.sh/?via=eugene)
|
|
||||||
|
|
||||||
[**keygen**](https://keygen.sh/?via=eugene)は、自動リリース機能および自動更新機能のホスティングを無償で提供しています
|
|
||||||
|
|
||||||
<a name="contributing"></a>
|
<a name="contributing"></a>
|
||||||
# コントリビュート
|
# コントリビュート
|
||||||
|
|
||||||
プルリクエストやプラグインは大歓迎です!
|
プルリクエストやプラグインは大歓迎です!
|
||||||
|
|
||||||
プロジェクトの構成や、非常に簡単なプラグイン開発のチュートリアルについては、[HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md)および、[API docs](https://docs.tabby.sh/)を参照してください。
|
プロジェクトの構成や、ごく簡単なプラグイン開発のチュートリアルについては、[HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md)及び、[API docs](https://docs.tabby.sh/)を参照してください。
|
||||||
|
|
||||||
---
|
---
|
||||||
<a name="contributors"></a>
|
<a name="contributors"></a>
|
||||||
|
|
||||||
以下の素晴らしい方々([emoji key](https://allcontributors.org/docs/en/emoji-key))に感謝いたします:
|
この素晴らしい人たち([emoji key](https://allcontributors.org/docs/en/emoji-key))に感謝します:
|
||||||
|
|
||||||
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
||||||
<!-- prettier-ignore-start -->
|
<!-- prettier-ignore-start -->
|
||||||
@@ -324,23 +312,6 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
|
|||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://siebsie23.nl/"><img src="https://avatars.githubusercontent.com/u/25083973?v=4?s=100" width="100px;" alt="Sibren"/><br /><sub><b>Sibren</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siebsie23" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.nathaniel-walser.com"><img src="https://avatars.githubusercontent.com/u/33339996?v=4?s=100" width="100px;" alt="Nathaniel Walser"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=nwalser" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/aaronhuggins"><img src="https://avatars.githubusercontent.com/u/16567111?v=4?s=100" width="100px;" alt="Aaron Huggins"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href="#design-aaronhuggins" title="Design">🎨</a></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@@ -350,4 +321,4 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
|
|||||||
|
|
||||||
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
||||||
|
|
||||||
このプロジェクトは[all-contributors](https://github.com/all-contributors/all-contributors)の仕様に準拠しています。どのような形の貢献でも歓迎いたします!
|
このプロジェクトは[all-contributors](https://github.com/all-contributors/all-contributors)の仕様に準拠しています。どのような形の貢献でも歓迎します!
|
||||||
|
@@ -111,7 +111,6 @@
|
|||||||
* [clippy](https://github.com/Eugeny/tabby-clippy) - 항상 당신을 귀찮게 하는 예제 플러그인
|
* [clippy](https://github.com/Eugeny/tabby-clippy) - 항상 당신을 귀찮게 하는 예제 플러그인
|
||||||
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - 주어진 구성을 기반으로 사용자 정의 작업 공간 프로필을 생성할 수 있습니다
|
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - 주어진 구성을 기반으로 사용자 정의 작업 공간 프로필을 생성할 수 있습니다
|
||||||
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - Tabby의 탭에서 선택한 텍스트로 기본 시스템 브라우저를 엽니다
|
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - Tabby의 탭에서 선택한 텍스트로 기본 시스템 브라우저를 엽니다
|
||||||
* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - open sftp tab for ssh connection like SecureCRT
|
|
||||||
|
|
||||||
<a name="themes"></a>
|
<a name="themes"></a>
|
||||||
# 테마
|
# 테마
|
||||||
@@ -303,23 +302,6 @@ Pull requests and plugins are welcome!
|
|||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://siebsie23.nl/"><img src="https://avatars.githubusercontent.com/u/25083973?v=4?s=100" width="100px;" alt="Sibren"/><br /><sub><b>Sibren</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siebsie23" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.nathaniel-walser.com"><img src="https://avatars.githubusercontent.com/u/33339996?v=4?s=100" width="100px;" alt="Nathaniel Walser"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=nwalser" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/aaronhuggins"><img src="https://avatars.githubusercontent.com/u/16567111?v=4?s=100" width="100px;" alt="Aaron Huggins"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href="#design-aaronhuggins" title="Design">🎨</a></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
24
README.md
24
README.md
@@ -16,8 +16,6 @@
|
|||||||
|
|
||||||
> 👋 Managing remote environments? Check out [Warpgate, my smart SSH/HTTP/MySQL bastion server](https://github.com/warp-tech/warpgate), it works great with Tabby, you'll love it.
|
> 👋 Managing remote environments? Check out [Warpgate, my smart SSH/HTTP/MySQL bastion server](https://github.com/warp-tech/warpgate), it works great with Tabby, you'll love it.
|
||||||
|
|
||||||
> 👋 [Tabby-web](https://github.com/Eugeny/tabby-web) is looking for sponsors. As I can't afford to host it myself any longer, I'm looking for a sponsor to cover the hosting costs. If you're interested, please [get in touch](https://twitter.com/eugeeeeny)!
|
|
||||||
|
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
@@ -34,7 +32,7 @@ This README is also available in: <a href="./README.es-ES.md">:es: Spanish</a>
|
|||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
[**Tabby**](https://tabby.sh) (formerly **Terminus**) is a highly configurable terminal emulator, SSH and serial client for Windows 10, macOS and Linux
|
[**Tabby**](https://tabby.sh) (formerly **Terminus**) is a highly configurable terminal emulator, SSH and serial client for Windows, macOS and Linux
|
||||||
|
|
||||||
* Integrated SSH and Telnet client and connection manager
|
* Integrated SSH and Telnet client and connection manager
|
||||||
* Integrated serial terminal
|
* Integrated serial terminal
|
||||||
@@ -128,7 +126,6 @@ Plugins and themes can be installed directly from the Settings view inside Tabby
|
|||||||
* [clippy](https://github.com/Eugeny/tabby-clippy) - an example plugin which annoys you all the time
|
* [clippy](https://github.com/Eugeny/tabby-clippy) - an example plugin which annoys you all the time
|
||||||
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - allows creating custom workspace profiles based on the given config
|
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - allows creating custom workspace profiles based on the given config
|
||||||
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - opens default system browser with a text selected from the Tabby's tab
|
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - opens default system browser with a text selected from the Tabby's tab
|
||||||
* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - open sftp tab for ssh connection like SecureCRT
|
|
||||||
|
|
||||||
<a name="themes"></a>
|
<a name="themes"></a>
|
||||||
|
|
||||||
@@ -139,8 +136,6 @@ Plugins and themes can be installed directly from the Settings view inside Tabby
|
|||||||
* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox)
|
* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox)
|
||||||
* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)
|
* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)
|
||||||
* [altair](https://github.com/yxuko/terminus-altair)
|
* [altair](https://github.com/yxuko/terminus-altair)
|
||||||
* [catppuccin](https://github.com/catppuccin/tabby) - Soothing pastel theme for Tabby
|
|
||||||
* [noctis](https://github.com/aaronhuggins/tabby-colors-noctis) - color themes inspired by Noctis VS Code theme
|
|
||||||
|
|
||||||
# Sponsors <!-- omit in toc -->
|
# Sponsors <!-- omit in toc -->
|
||||||
|
|
||||||
@@ -327,23 +322,6 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
|
|||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://siebsie23.nl/"><img src="https://avatars.githubusercontent.com/u/25083973?v=4?s=100" width="100px;" alt="Sibren"/><br /><sub><b>Sibren</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siebsie23" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.nathaniel-walser.com"><img src="https://avatars.githubusercontent.com/u/33339996?v=4?s=100" width="100px;" alt="Nathaniel Walser"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=nwalser" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/aaronhuggins"><img src="https://avatars.githubusercontent.com/u/16567111?v=4?s=100" width="100px;" alt="Aaron Huggins"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href="#design-aaronhuggins" title="Design">🎨</a></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@@ -120,7 +120,6 @@ Plugins e temas podem ser instalados durante a execução na pagina de configura
|
|||||||
* [clippy](https://github.com/Eugeny/tabby-clippy) - um plugin de exemplo que te incomoda o tempo todo
|
* [clippy](https://github.com/Eugeny/tabby-clippy) - um plugin de exemplo que te incomoda o tempo todo
|
||||||
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - permite criar perfis de espaço de trabalho personalizados com base na configuração fornecida
|
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - permite criar perfis de espaço de trabalho personalizados com base na configuração fornecida
|
||||||
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - abre o navegador padrão do sistema com um texto selecionado na guia do Tabby
|
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - abre o navegador padrão do sistema com um texto selecionado na guia do Tabby
|
||||||
* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - open sftp tab for ssh connection like SecureCRT
|
|
||||||
|
|
||||||
<a name="themes"></a>
|
<a name="themes"></a>
|
||||||
|
|
||||||
@@ -317,23 +316,6 @@ Obrigado vai para essas pessoas maravilhosas ([emoji key](https://allcontributor
|
|||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://siebsie23.nl/"><img src="https://avatars.githubusercontent.com/u/25083973?v=4?s=100" width="100px;" alt="Sibren"/><br /><sub><b>Sibren</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siebsie23" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.nathaniel-walser.com"><img src="https://avatars.githubusercontent.com/u/33339996?v=4?s=100" width="100px;" alt="Nathaniel Walser"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=nwalser" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/aaronhuggins"><img src="https://avatars.githubusercontent.com/u/16567111?v=4?s=100" width="100px;" alt="Aaron Huggins"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href="#design-aaronhuggins" title="Design">🎨</a></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@@ -117,7 +117,6 @@
|
|||||||
* [clippy](https://github.com/Eugeny/tabby-clippy) — плагин-пример, который постоянно будет вас бесить;
|
* [clippy](https://github.com/Eugeny/tabby-clippy) — плагин-пример, который постоянно будет вас бесить;
|
||||||
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) — позволяет создавать пользовательские провили рабочего окружеиня на основе конфига;
|
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) — позволяет создавать пользовательские провили рабочего окружеиня на основе конфига;
|
||||||
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) — открывает браузер по умолчанию с текстом, выделенном во вкладке Tabby.
|
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) — открывает браузер по умолчанию с текстом, выделенном во вкладке Tabby.
|
||||||
* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - open sftp tab for ssh connection like SecureCRT
|
|
||||||
|
|
||||||
<a name="themes"></a>
|
<a name="themes"></a>
|
||||||
# Темы
|
# Темы
|
||||||
@@ -309,23 +308,6 @@ Pull-запросы и плагины приветствуются!
|
|||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://siebsie23.nl/"><img src="https://avatars.githubusercontent.com/u/25083973?v=4?s=100" width="100px;" alt="Sibren"/><br /><sub><b>Sibren</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siebsie23" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.nathaniel-walser.com"><img src="https://avatars.githubusercontent.com/u/33339996?v=4?s=100" width="100px;" alt="Nathaniel Walser"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=nwalser" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/aaronhuggins"><img src="https://avatars.githubusercontent.com/u/16567111?v=4?s=100" width="100px;" alt="Aaron Huggins"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href="#design-aaronhuggins" title="Design">🎨</a></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@@ -116,7 +116,6 @@
|
|||||||
* [clippy](https://github.com/Eugeny/tabby-clippy) - 一个可以一直烦你的示例插件
|
* [clippy](https://github.com/Eugeny/tabby-clippy) - 一个可以一直烦你的示例插件
|
||||||
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - 允许根据给定的配置创建自定义工作区配置文件
|
* [workspace-manager](https://github.com/composer404/tabby-workspace-manager) - 允许根据给定的配置创建自定义工作区配置文件
|
||||||
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - 从 Tabby 标签页带有选中的文本来打开系统默认浏览器
|
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - 从 Tabby 标签页带有选中的文本来打开系统默认浏览器
|
||||||
* [sftp-tab](https://github.com/wljince007/tabby-sftp-tab) - 为ssh连接打开类似SecureCRT的sftp标签页
|
|
||||||
|
|
||||||
<a name="themes"></a>
|
<a name="themes"></a>
|
||||||
# 主题
|
# 主题
|
||||||
@@ -308,23 +307,6 @@
|
|||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/elizabeth-dev"><img src="https://avatars.githubusercontent.com/u/13015727?v=4?s=100" width="100px;" alt="Elizabeth Martín Campos"/><br /><sub><b>Elizabeth Martín Campos</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=elizabeth-dev" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/siccous"><img src="https://avatars.githubusercontent.com/u/7812885?v=4?s=100" width="100px;" alt="Tomáš Hruška"/><br /><sub><b>Tomáš Hruška</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siccous" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
<td align="center" valign="top" width="14.28%"><a href="https://github.com/karaketir16"><img src="https://avatars.githubusercontent.com/u/27349806?v=4?s=100" width="100px;" alt="Osman Karaketir"/><br /><sub><b>Osman Karaketir</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=karaketir16" title="Code">💻</a></td>
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.gnomegarden.io/"><img src="https://avatars.githubusercontent.com/u/33667144?v=4?s=100" width="100px;" alt="Crypto Gnome"/><br /><sub><b>Crypto Gnome</b></sub></a><br /><a href="#financial-CryptoGnome" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/rbukovansky"><img src="https://avatars.githubusercontent.com/u/1004491?v=4?s=100" width="100px;" alt="Richard Bukovansky"/><br /><sub><b>Richard Bukovansky</b></sub></a><br /><a href="#financial-rbukovansky" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/pseudocc"><img src="https://avatars.githubusercontent.com/u/85104110?v=4?s=100" width="100px;" alt="catlas"/><br /><sub><b>catlas</b></sub></a><br /><a href="#financial-pseudocc" title="Financial">💵</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="http://kapocsi.ca"><img src="https://avatars.githubusercontent.com/u/84490604?v=4?s=100" width="100px;" alt="Thomas Kapocsi"/><br /><sub><b>Thomas Kapocsi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Kapocsi" title="Documentation">📖</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://dylhack.dev/"><img src="https://avatars.githubusercontent.com/u/27179786?v=4?s=100" width="100px;" alt="Dylan Hackworth"/><br /><sub><b>Dylan Hackworth</b></sub></a><br /><a href="#financial-dylhack" title="Financial">💵</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/echo304"><img src="https://avatars.githubusercontent.com/u/16456651?v=4?s=100" width="100px;" alt="Sangboak Lee"/><br /><sub><b>Sangboak Lee</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=echo304" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/qyecst"><img src="https://avatars.githubusercontent.com/u/13901864?v=4?s=100" width="100px;" alt="qyecst"/><br /><sub><b>qyecst</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=qyecst" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DehanLUO"><img src="https://avatars.githubusercontent.com/u/53093688?v=4?s=100" width="100px;" alt="Han"/><br /><sub><b>Han</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=DehanLUO" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/wljince007"><img src="https://avatars.githubusercontent.com/u/88243938?v=4?s=100" width="100px;" alt="wljince007"/><br /><sub><b>wljince007</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=wljince007" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/FeroTheFox"><img src="https://avatars.githubusercontent.com/u/52982404?v=4?s=100" width="100px;" alt="fero"/><br /><sub><b>fero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=FeroTheFox" title="Code">💻</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://siebsie23.nl/"><img src="https://avatars.githubusercontent.com/u/25083973?v=4?s=100" width="100px;" alt="Sibren"/><br /><sub><b>Sibren</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=siebsie23" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://www.nathaniel-walser.com"><img src="https://avatars.githubusercontent.com/u/33339996?v=4?s=100" width="100px;" alt="Nathaniel Walser"/><br /><sub><b>Nathaniel Walser</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=nwalser" title="Code">💻</a></td>
|
|
||||||
<td align="center" valign="top" width="14.28%"><a href="https://github.com/aaronhuggins"><img src="https://avatars.githubusercontent.com/u/16567111?v=4?s=100" width="100px;" alt="Aaron Huggins"/><br /><sub><b>Aaron Huggins</b></sub></a><br /><a href="#design-aaronhuggins" title="Design">🎨</a></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@@ -183,7 +183,7 @@ export class Application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
enableTray (): void {
|
enableTray (): void {
|
||||||
if (!!this.tray || process.platform === 'linux') {
|
if (this.tray || process.platform === 'linux') {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (process.platform === 'darwin') {
|
if (process.platform === 'darwin') {
|
||||||
|
@@ -1,14 +1,13 @@
|
|||||||
import * as fs from 'fs'
|
import * as fs from 'fs'
|
||||||
import * as path from 'path'
|
import * as path from 'path'
|
||||||
import * as yaml from 'js-yaml'
|
import * as yaml from 'js-yaml'
|
||||||
|
import { app } from 'electron'
|
||||||
import { writeFile } from 'atomically'
|
import { writeFile } from 'atomically'
|
||||||
|
|
||||||
|
|
||||||
export const configPath = path.join(process.env.TABBY_CONFIG_DIRECTORY!, 'config.yaml')
|
|
||||||
const legacyConfigPath = path.join(process.env.TABBY_CONFIG_DIRECTORY!, '../terminus', 'config.yaml')
|
|
||||||
|
|
||||||
|
|
||||||
export function migrateConfig (): void {
|
export function migrateConfig (): void {
|
||||||
|
const configPath = path.join(app.getPath('userData'), 'config.yaml')
|
||||||
|
const legacyConfigPath = path.join(app.getPath('userData'), '../terminus', 'config.yaml')
|
||||||
if (fs.existsSync(legacyConfigPath) && (
|
if (fs.existsSync(legacyConfigPath) && (
|
||||||
!fs.existsSync(configPath) ||
|
!fs.existsSync(configPath) ||
|
||||||
fs.statSync(configPath).mtime < fs.statSync(legacyConfigPath).mtime
|
fs.statSync(configPath).mtime < fs.statSync(legacyConfigPath).mtime
|
||||||
@@ -20,6 +19,7 @@ export function migrateConfig (): void {
|
|||||||
export function loadConfig (): any {
|
export function loadConfig (): any {
|
||||||
migrateConfig()
|
migrateConfig()
|
||||||
|
|
||||||
|
const configPath = path.join(app.getPath('userData'), 'config.yaml')
|
||||||
if (fs.existsSync(configPath)) {
|
if (fs.existsSync(configPath)) {
|
||||||
return yaml.load(fs.readFileSync(configPath, 'utf8'))
|
return yaml.load(fs.readFileSync(configPath, 'utf8'))
|
||||||
} else {
|
} else {
|
||||||
@@ -27,6 +27,8 @@ export function loadConfig (): any {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const configPath = path.join(app.getPath('userData'), 'config.yaml')
|
||||||
|
|
||||||
export async function saveConfig (content: string): Promise<void> {
|
export async function saveConfig (content: string): Promise<void> {
|
||||||
await writeFile(configPath, content, { encoding: 'utf8' })
|
await writeFile(configPath, content, { encoding: 'utf8' })
|
||||||
await writeFile(configPath + '.backup', content, { encoding: 'utf8' })
|
await writeFile(configPath + '.backup', content, { encoding: 'utf8' })
|
||||||
|
@@ -1,21 +1,17 @@
|
|||||||
import { app, ipcMain, Menu, dialog } from 'electron'
|
|
||||||
|
|
||||||
// set defaults of environment variables
|
|
||||||
import 'dotenv/config'
|
|
||||||
process.env.TABBY_PLUGINS ??= ''
|
|
||||||
process.env.TABBY_CONFIG_DIRECTORY ??= app.getPath('userData')
|
|
||||||
|
|
||||||
|
|
||||||
import 'v8-compile-cache'
|
import 'v8-compile-cache'
|
||||||
import './portable'
|
import './portable'
|
||||||
import 'source-map-support/register'
|
import 'source-map-support/register'
|
||||||
import './sentry'
|
import './sentry'
|
||||||
import './lru'
|
import './lru'
|
||||||
|
import { app, ipcMain, Menu, dialog } from 'electron'
|
||||||
import { parseArgs } from './cli'
|
import { parseArgs } from './cli'
|
||||||
import { Application } from './app'
|
import { Application } from './app'
|
||||||
import electronDebug = require('electron-debug')
|
import electronDebug = require('electron-debug')
|
||||||
import { loadConfig } from './config'
|
import { loadConfig } from './config'
|
||||||
|
|
||||||
|
if (!process.env.TABBY_PLUGINS) {
|
||||||
|
process.env.TABBY_PLUGINS = ''
|
||||||
|
}
|
||||||
|
|
||||||
const argv = parseArgs(process.argv, process.cwd())
|
const argv = parseArgs(process.argv, process.cwd())
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import * as nodePTY from 'node-pty'
|
import * as nodePTY from '@tabby-gang/node-pty'
|
||||||
import { v4 as uuidv4 } from 'uuid'
|
import { v4 as uuidv4 } from 'uuid'
|
||||||
import { ipcMain } from 'electron'
|
import { ipcMain } from 'electron'
|
||||||
import { Application } from './app'
|
import { Application } from './app'
|
||||||
|
@@ -26,7 +26,7 @@ abstract class GlasstronWindow extends BrowserWindow {
|
|||||||
abstract setBlur (_: boolean)
|
abstract setBlur (_: boolean)
|
||||||
}
|
}
|
||||||
|
|
||||||
const macOSVibrancyType: any = process.platform === 'darwin' ? compareVersions(macOSRelease().version || '0.0', '10.14', '>=') ? 'under-window' : 'dark' : null
|
const macOSVibrancyType = process.platform === 'darwin' ? compareVersions(macOSRelease().version || '0.0', '10.14', '>=') ? 'under-window' : 'dark' : null
|
||||||
|
|
||||||
const activityIcon = nativeImage.createFromPath(`${app.getAppPath()}/assets/activity.png`)
|
const activityIcon = nativeImage.createFromPath(`${app.getAppPath()}/assets/activity.png`)
|
||||||
|
|
||||||
@@ -92,11 +92,8 @@ export class Window {
|
|||||||
if (this.configStore.appearance?.frame === 'native') {
|
if (this.configStore.appearance?.frame === 'native') {
|
||||||
bwOptions.frame = true
|
bwOptions.frame = true
|
||||||
} else {
|
} else {
|
||||||
bwOptions.titleBarStyle = 'hidden'
|
if (process.platform === 'darwin') {
|
||||||
if (process.platform === 'win32') {
|
bwOptions.titleBarStyle = 'hidden'
|
||||||
bwOptions.titleBarOverlay = {
|
|
||||||
color: '#00000000',
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,11 +125,7 @@ export class Window {
|
|||||||
})
|
})
|
||||||
|
|
||||||
this.window.on('blur', () => {
|
this.window.on('blur', () => {
|
||||||
if (
|
if ((this.configStore.appearance?.dock ?? 'off') !== 'off' && this.configStore.appearance?.dockHideOnBlur) {
|
||||||
(this.configStore.appearance?.dock ?? 'off') !== 'off' &&
|
|
||||||
this.configStore.appearance?.dockHideOnBlur &&
|
|
||||||
!BrowserWindow.getFocusedWindow()
|
|
||||||
) {
|
|
||||||
this.hide()
|
this.hide()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -387,22 +380,6 @@ export class Window {
|
|||||||
this.setVibrancy(enabled, type)
|
this.setVibrancy(enabled, type)
|
||||||
})
|
})
|
||||||
|
|
||||||
ipcMain.on('window-set-window-controls-color', (event, theme) => {
|
|
||||||
if (!this.window || event.sender !== this.window.webContents) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (process.platform === 'win32') {
|
|
||||||
const symbolColor: string = theme.foreground
|
|
||||||
this.window.setTitleBarOverlay(
|
|
||||||
{
|
|
||||||
symbolColor: symbolColor,
|
|
||||||
height: 32,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
ipcMain.on('window-set-title', (event, title) => {
|
ipcMain.on('window-set-title', (event, title) => {
|
||||||
if (!this.window || event.sender !== this.window.webContents) {
|
if (!this.window || event.sender !== this.window.webContents) {
|
||||||
return
|
return
|
||||||
@@ -461,7 +438,7 @@ export class Window {
|
|||||||
this.window.on('resize', onBoundsChange)
|
this.window.on('resize', onBoundsChange)
|
||||||
|
|
||||||
ipcMain.on('window-set-traffic-light-position', (_event, x, y) => {
|
ipcMain.on('window-set-traffic-light-position', (_event, x, y) => {
|
||||||
this.window.setWindowButtonPosition({ x, y })
|
this.window.setTrafficLightPosition({ x, y })
|
||||||
})
|
})
|
||||||
|
|
||||||
ipcMain.on('window-set-opacity', (_event, opacity) => {
|
ipcMain.on('window-set-opacity', (_event, opacity) => {
|
||||||
|
@@ -15,8 +15,8 @@
|
|||||||
"watch": "webpack --progress --color --watch"
|
"watch": "webpack --progress --color --watch"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@electron/remote": "2.0.10",
|
"@electron/remote": "2.0.8",
|
||||||
"node-pty": "^1.0",
|
"@tabby-gang/node-pty": "^0.11.0-beta.203",
|
||||||
"any-promise": "^1.3.0",
|
"any-promise": "^1.3.0",
|
||||||
"electron-config": "2.0.0",
|
"electron-config": "2.0.0",
|
||||||
"electron-debug": "^3.2.0",
|
"electron-debug": "^3.2.0",
|
||||||
@@ -32,24 +32,24 @@
|
|||||||
"rxjs": "^7.5.7",
|
"rxjs": "^7.5.7",
|
||||||
"source-map-support": "^0.5.20",
|
"source-map-support": "^0.5.20",
|
||||||
"v8-compile-cache": "^2.3.0",
|
"v8-compile-cache": "^2.3.0",
|
||||||
"yargs": "^17.7.2"
|
"yargs": "^17.3.1"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@tabby-gang/windows-blurbehind": "^3.0.0",
|
"@tabby-gang/windows-blurbehind": "^3.0.0",
|
||||||
"macos-native-processlist": "^2.1.0",
|
"macos-native-processlist": "^2.1.0",
|
||||||
"patch-package": "^6.5.0",
|
"patch-package": "^6.5.0",
|
||||||
"serialport": "11.0.1",
|
"serialport": "10.5.0",
|
||||||
"serialport-binding-webserialapi": "^1.0.3",
|
"serialport-binding-webserialapi": "^1.0.3",
|
||||||
"windows-native-registry": "^3.2.1",
|
"windows-native-registry": "^3.2.1",
|
||||||
"windows-process-tree": "^0.4.0"
|
"windows-process-tree": "^0.3.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@ngx-translate/core": "^14.0.0",
|
"@ngx-translate/core": "^14.0.0",
|
||||||
"@types/mz": "2.7.4",
|
"@types/mz": "2.7.4",
|
||||||
"@types/node": "20.3.1",
|
"@types/node": "18.11.19",
|
||||||
"atomically": "^2.0.2",
|
"atomically": "^1.7.0",
|
||||||
"filesize": "^9",
|
"filesize": "^9",
|
||||||
"ngx-filesize": "^3.0.2"
|
"ngx-filesize": "^3.0.1"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"tabby-community-color-schemes": "*",
|
"tabby-community-color-schemes": "*",
|
||||||
@@ -64,7 +64,6 @@
|
|||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"*/node-abi": "^2.20.0",
|
"*/node-abi": "^2.20.0",
|
||||||
"node-gyp": "10.0.0",
|
|
||||||
"nan": "github:jkleinsc/nan#remove_accessor_signature"
|
"nan": "github:jkleinsc/nan#remove_accessor_signature"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,3 @@
|
|||||||
html {
|
|
||||||
--spaciness: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
body {
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@@ -25,8 +21,8 @@ a, button {
|
|||||||
|
|
||||||
& > svg {
|
& > svg {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
// width: 16px;
|
width: 16px;
|
||||||
// height: 16px;
|
height: 16px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -4,6 +4,4 @@ export const PLUGIN_BLACKLIST = [
|
|||||||
'terminus-clickable-links', // now bundled with Tabby
|
'terminus-clickable-links', // now bundled with Tabby
|
||||||
'tabby-clickable-links', // now bundled with Tabby
|
'tabby-clickable-links', // now bundled with Tabby
|
||||||
'terminus-clickable-ips', // broken, functionality now bundled with Tabby
|
'terminus-clickable-ips', // broken, functionality now bundled with Tabby
|
||||||
'terminus-elastic-quick-commands', // broken and abandoned, fork of quick-commands
|
|
||||||
'terminus-elastic-quick-cmds', // broken and abandoned, fork of quick-commands
|
|
||||||
]
|
]
|
||||||
|
@@ -27,8 +27,6 @@ const cachedBuiltinModules = {
|
|||||||
'@angular/compiler': require('@angular/compiler'),
|
'@angular/compiler': require('@angular/compiler'),
|
||||||
'@angular/core': require('@angular/core'),
|
'@angular/core': require('@angular/core'),
|
||||||
'@angular/forms': require('@angular/forms'),
|
'@angular/forms': require('@angular/forms'),
|
||||||
'@angular/localize': require('@angular/localize'),
|
|
||||||
'@angular/localize/init': require('@angular/localize/init'),
|
|
||||||
'@angular/platform-browser': require('@angular/platform-browser'),
|
'@angular/platform-browser': require('@angular/platform-browser'),
|
||||||
'@angular/platform-browser/animations': require('@angular/platform-browser/animations'),
|
'@angular/platform-browser/animations': require('@angular/platform-browser/animations'),
|
||||||
'@angular/platform-browser-dynamic': require('@angular/platform-browser-dynamic'),
|
'@angular/platform-browser-dynamic': require('@angular/platform-browser-dynamic'),
|
||||||
@@ -92,43 +90,12 @@ export function initModuleLookup (userPluginsPath: string): void {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const PLUGIN_PREFIX = 'tabby-'
|
export async function findPlugins (): Promise<PluginInfo[]> {
|
||||||
const LEGACY_PLUGIN_PREFIX = 'terminus-'
|
const paths = nodeModule.globalPaths
|
||||||
|
let foundPlugins: PluginInfo[] = []
|
||||||
async function getCandidateLocationsInPluginDir (pluginDir: any): Promise<{ pluginDir: string, packageName: string }[]> {
|
|
||||||
const candidateLocations: { pluginDir: string, packageName: string }[] = []
|
const candidateLocations: { pluginDir: string, packageName: string }[] = []
|
||||||
|
const PREFIX = 'tabby-'
|
||||||
if (await fs.exists(pluginDir)) {
|
const LEGACY_PREFIX = 'terminus-'
|
||||||
const pluginNames = await fs.readdir(pluginDir)
|
|
||||||
if (await fs.exists(path.join(pluginDir, 'package.json'))) {
|
|
||||||
candidateLocations.push({
|
|
||||||
pluginDir: path.dirname(pluginDir),
|
|
||||||
packageName: path.basename(pluginDir),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const promises = []
|
|
||||||
|
|
||||||
for (const packageName of pluginNames) {
|
|
||||||
if ((packageName.startsWith(PLUGIN_PREFIX) || packageName.startsWith(LEGACY_PLUGIN_PREFIX)) && !PLUGIN_BLACKLIST.includes(packageName)) {
|
|
||||||
const pluginPath = path.join(pluginDir, packageName)
|
|
||||||
const infoPath = path.join(pluginPath, 'package.json')
|
|
||||||
promises.push(fs.exists(infoPath).then(result => {
|
|
||||||
if (result) {
|
|
||||||
candidateLocations.push({ pluginDir, packageName })
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await Promise.all(promises)
|
|
||||||
}
|
|
||||||
|
|
||||||
return candidateLocations
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getPluginCandidateLocation (paths: any): Promise<{ pluginDir: string, packageName: string }[]> {
|
|
||||||
const candidateLocationsPromises: Promise<{ pluginDir: string, packageName: string }[]>[] = []
|
|
||||||
|
|
||||||
const processedPaths = []
|
const processedPaths = []
|
||||||
|
|
||||||
@@ -139,84 +106,69 @@ async function getPluginCandidateLocation (paths: any): Promise<{ pluginDir: str
|
|||||||
processedPaths.push(pluginDir)
|
processedPaths.push(pluginDir)
|
||||||
|
|
||||||
pluginDir = normalizePath(pluginDir)
|
pluginDir = normalizePath(pluginDir)
|
||||||
|
if (!await fs.exists(pluginDir)) {
|
||||||
candidateLocationsPromises.push(getCandidateLocationsInPluginDir(pluginDir))
|
continue
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
const candidateLocations: { pluginDir: string, packageName: string }[] = []
|
|
||||||
for (const pluginCandidateLocations of await Promise.all(candidateLocationsPromises)) {
|
|
||||||
candidateLocations.push(...pluginCandidateLocations)
|
|
||||||
}
|
|
||||||
|
|
||||||
return candidateLocations
|
|
||||||
}
|
|
||||||
|
|
||||||
async function parsePluginInfo (pluginDir: string, packageName: string): Promise<PluginInfo|null> {
|
|
||||||
const pluginPath = path.join(pluginDir, packageName)
|
|
||||||
const infoPath = path.join(pluginPath, 'package.json')
|
|
||||||
|
|
||||||
const name = packageName.startsWith(PLUGIN_PREFIX) ? packageName.substring(PLUGIN_PREFIX.length) : packageName.substring(LEGACY_PLUGIN_PREFIX.length)
|
|
||||||
|
|
||||||
try {
|
|
||||||
const info = JSON.parse(await fs.readFile(infoPath, { encoding: 'utf-8' }))
|
|
||||||
|
|
||||||
if (!info.keywords || !(info.keywords.includes('terminus-plugin') || info.keywords.includes('terminus-builtin-plugin') || info.keywords.includes('tabby-plugin') || info.keywords.includes('tabby-builtin-plugin'))) {
|
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
|
const pluginNames = await fs.readdir(pluginDir)
|
||||||
let author = info.author
|
if (await fs.exists(path.join(pluginDir, 'package.json'))) {
|
||||||
author = author.name || author
|
candidateLocations.push({
|
||||||
|
pluginDir: path.dirname(pluginDir),
|
||||||
console.log(`Found ${name} in ${pluginDir}`)
|
packageName: path.basename(pluginDir),
|
||||||
|
})
|
||||||
return {
|
}
|
||||||
name: name,
|
for (const packageName of pluginNames) {
|
||||||
packageName: packageName,
|
if ((packageName.startsWith(PREFIX) || packageName.startsWith(LEGACY_PREFIX)) && !PLUGIN_BLACKLIST.includes(packageName)) {
|
||||||
isBuiltin: pluginDir === builtinPluginsPath,
|
candidateLocations.push({ pluginDir, packageName })
|
||||||
isLegacy: info.keywords.includes('terminus-plugin') || info.keywords.includes('terminus-builtin-plugin'),
|
}
|
||||||
version: info.version,
|
|
||||||
description: info.description,
|
|
||||||
author,
|
|
||||||
path: pluginPath,
|
|
||||||
info,
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
|
||||||
console.error('Cannot load package info for', packageName)
|
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
export async function findPlugins (): Promise<PluginInfo[]> {
|
|
||||||
const paths = nodeModule.globalPaths
|
|
||||||
let foundPlugins: PluginInfo[] = []
|
|
||||||
|
|
||||||
const candidateLocations: { pluginDir: string, packageName: string }[] = await getPluginCandidateLocation(paths)
|
|
||||||
|
|
||||||
const foundPluginsPromises: Promise<PluginInfo|null>[] = []
|
|
||||||
for (const { pluginDir, packageName } of candidateLocations) {
|
for (const { pluginDir, packageName } of candidateLocations) {
|
||||||
|
const pluginPath = path.join(pluginDir, packageName)
|
||||||
|
const infoPath = path.join(pluginPath, 'package.json')
|
||||||
|
if (!await fs.exists(infoPath)) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
const name = packageName.startsWith(PREFIX) ? packageName.substring(PREFIX.length) : packageName.substring(LEGACY_PREFIX.length)
|
||||||
|
|
||||||
if (builtinModules.includes(packageName) && pluginDir !== builtinPluginsPath) {
|
if (builtinModules.includes(packageName) && pluginDir !== builtinPluginsPath) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
foundPluginsPromises.push(parsePluginInfo(pluginDir, packageName))
|
console.log(`Found ${name} in ${pluginDir}`)
|
||||||
}
|
|
||||||
|
|
||||||
for (const pluginInfo of await Promise.all(foundPluginsPromises)) {
|
const existing = foundPlugins.find(x => x.name === name)
|
||||||
if (pluginInfo) {
|
if (existing) {
|
||||||
const existing = foundPlugins.find(x => x.name === pluginInfo.name)
|
if (existing.isLegacy) {
|
||||||
if (existing) {
|
console.info(`Plugin ${packageName} already exists, overriding`)
|
||||||
if (existing.isLegacy) {
|
foundPlugins = foundPlugins.filter(x => x.name !== name)
|
||||||
console.info(`Plugin ${pluginInfo.packageName} already exists, overriding`)
|
} else {
|
||||||
foundPlugins = foundPlugins.filter(x => x.name !== pluginInfo.name)
|
console.info(`Plugin ${packageName} already exists, skipping`)
|
||||||
} else {
|
continue
|
||||||
console.info(`Plugin ${pluginInfo.packageName} already exists, skipping`)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
foundPlugins.push(pluginInfo)
|
try {
|
||||||
|
const info = JSON.parse(await fs.readFile(infoPath, { encoding: 'utf-8' }))
|
||||||
|
if (!info.keywords || !(info.keywords.includes('terminus-plugin') || info.keywords.includes('terminus-builtin-plugin') || info.keywords.includes('tabby-plugin') || info.keywords.includes('tabby-builtin-plugin'))) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
let author = info.author
|
||||||
|
author = author.name || author
|
||||||
|
foundPlugins.push({
|
||||||
|
name: name,
|
||||||
|
packageName: packageName,
|
||||||
|
isBuiltin: pluginDir === builtinPluginsPath,
|
||||||
|
isLegacy: info.keywords.includes('terminus-plugin') || info.keywords.includes('terminus-builtin-plugin'),
|
||||||
|
version: info.version,
|
||||||
|
description: info.description,
|
||||||
|
author,
|
||||||
|
path: pluginPath,
|
||||||
|
info,
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Cannot load package info for', packageName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -227,36 +179,26 @@ export async function findPlugins (): Promise<PluginInfo[]> {
|
|||||||
|
|
||||||
export async function loadPlugins (foundPlugins: PluginInfo[], progress: ProgressCallback): Promise<any[]> {
|
export async function loadPlugins (foundPlugins: PluginInfo[], progress: ProgressCallback): Promise<any[]> {
|
||||||
const plugins: any[] = []
|
const plugins: any[] = []
|
||||||
const pluginsPromises: Promise<any>[] = []
|
|
||||||
|
|
||||||
let index = 0
|
|
||||||
const setProgress = function () {
|
|
||||||
index++
|
|
||||||
progress(index, foundPlugins.length)
|
|
||||||
}
|
|
||||||
|
|
||||||
progress(0, 1)
|
progress(0, 1)
|
||||||
|
let index = 0
|
||||||
for (const foundPlugin of foundPlugins) {
|
for (const foundPlugin of foundPlugins) {
|
||||||
pluginsPromises.push(new Promise(x => {
|
console.info(`Loading ${foundPlugin.name}: ${nodeRequire.resolve(foundPlugin.path)}`)
|
||||||
console.info(`Loading ${foundPlugin.name}: ${nodeRequire.resolve(foundPlugin.path)}`)
|
progress(index, foundPlugins.length)
|
||||||
try {
|
try {
|
||||||
const packageModule = nodeRequire(foundPlugin.path)
|
const packageModule = nodeRequire(foundPlugin.path)
|
||||||
if (foundPlugin.packageName.startsWith('tabby-')) {
|
if (foundPlugin.packageName.startsWith('tabby-')) {
|
||||||
cachedBuiltinModules[foundPlugin.packageName.replace('tabby-', 'terminus-')] = packageModule
|
cachedBuiltinModules[foundPlugin.packageName.replace('tabby-', 'terminus-')] = packageModule
|
||||||
}
|
|
||||||
const pluginModule = packageModule.default.forRoot ? packageModule.default.forRoot() : packageModule.default
|
|
||||||
pluginModule.pluginName = foundPlugin.name
|
|
||||||
pluginModule.bootstrap = packageModule.bootstrap
|
|
||||||
plugins.push(pluginModule)
|
|
||||||
} catch (error) {
|
|
||||||
console.error(`Could not load ${foundPlugin.name}:`, error)
|
|
||||||
}
|
}
|
||||||
setProgress()
|
const pluginModule = packageModule.default.forRoot ? packageModule.default.forRoot() : packageModule.default
|
||||||
setTimeout(x, 50)
|
pluginModule.pluginName = foundPlugin.name
|
||||||
}))
|
pluginModule.bootstrap = packageModule.bootstrap
|
||||||
|
plugins.push(pluginModule)
|
||||||
|
await new Promise(x => setTimeout(x, 50))
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Could not load ${foundPlugin.name}:`, error)
|
||||||
|
}
|
||||||
|
index++
|
||||||
}
|
}
|
||||||
await Promise.all(pluginsPromises)
|
|
||||||
|
|
||||||
progress(1, 1)
|
progress(1, 1)
|
||||||
return plugins
|
return plugins
|
||||||
}
|
}
|
||||||
|
@@ -47,7 +47,7 @@ const config = {
|
|||||||
mz: 'commonjs mz',
|
mz: 'commonjs mz',
|
||||||
npm: 'commonjs npm',
|
npm: 'commonjs npm',
|
||||||
'node:os': 'commonjs os',
|
'node:os': 'commonjs os',
|
||||||
'node-pty': 'commonjs node-pty',
|
'@tabby-gang/node-pty': 'commonjs @tabby-gang/node-pty',
|
||||||
path: 'commonjs path',
|
path: 'commonjs path',
|
||||||
util: 'commonjs util',
|
util: 'commonjs util',
|
||||||
'source-map-support': 'commonjs source-map-support',
|
'source-map-support': 'commonjs source-map-support',
|
||||||
|
858
app/yarn.lock
858
app/yarn.lock
File diff suppressed because it is too large
Load Diff
16
build/mac/afterBuildHook.cjs
Normal file
16
build/mac/afterBuildHook.cjs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
const fs = require('fs')
|
||||||
|
const signHook = require('./afterSignHook.cjs')
|
||||||
|
|
||||||
|
module.exports = async function (params) {
|
||||||
|
// notarize the app on Mac OS only.
|
||||||
|
if (process.platform !== 'darwin' || !process.env.GITHUB_REF || !process.env.GITHUB_REF.startsWith('refs/tags/')) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
console.log('afterBuild hook triggered')
|
||||||
|
|
||||||
|
let pkgName = fs.readdirSync('dist').find(x => x.endsWith('.pkg'))
|
||||||
|
signHook({
|
||||||
|
appOutDir: 'dist',
|
||||||
|
_pathOverride: pkgName,
|
||||||
|
})
|
||||||
|
}
|
35
build/mac/afterSignHook.cjs
Normal file
35
build/mac/afterSignHook.cjs
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
// See: https://medium.com/@TwitterArchiveEraser/notarize-electron-apps-7a5f988406db
|
||||||
|
|
||||||
|
const fs = require('fs')
|
||||||
|
const path = require('path')
|
||||||
|
const notarizer = require('electron-notarize')
|
||||||
|
|
||||||
|
module.exports = async function (params) {
|
||||||
|
// notarize the app on Mac OS only.
|
||||||
|
if (process.platform !== 'darwin' || !process.env.GITHUB_REF || !process.env.GITHUB_REF.startsWith('refs/tags/')) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
console.log('afterSign hook triggered', params)
|
||||||
|
|
||||||
|
let appId = 'org.tabby'
|
||||||
|
|
||||||
|
let appPath = path.join(params.appOutDir, params._pathOverride || `${params.packager.appInfo.productFilename}.app`)
|
||||||
|
if (!fs.existsSync(appPath)) {
|
||||||
|
throw new Error(`Cannot find application at: ${appPath}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Notarizing ${appId} found at ${appPath}`)
|
||||||
|
|
||||||
|
try {
|
||||||
|
await notarizer.notarize({
|
||||||
|
appBundleId: appId,
|
||||||
|
appPath: appPath,
|
||||||
|
appleId: process.env.APPSTORE_USERNAME,
|
||||||
|
appleIdPassword: process.env.APPSTORE_PASSWORD,
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error)
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Done notarizing ${appId}`)
|
||||||
|
}
|
@@ -2,6 +2,9 @@
|
|||||||
appId: org.tabby
|
appId: org.tabby
|
||||||
productName: Tabby
|
productName: Tabby
|
||||||
compression: normal
|
compression: normal
|
||||||
|
npmRebuild: false
|
||||||
|
afterSign: "./build/mac/afterSignHook.cjs"
|
||||||
|
afterAllArtifactBuild: "./build/mac/afterBuildHook.cjs"
|
||||||
files:
|
files:
|
||||||
- '**/*'
|
- '**/*'
|
||||||
- dist
|
- dist
|
||||||
|
890
locale/af-ZA.po
890
locale/af-ZA.po
File diff suppressed because it is too large
Load Diff
729
locale/app.pot
729
locale/app.pot
File diff suppressed because it is too large
Load Diff
886
locale/bg-BG.po
886
locale/bg-BG.po
File diff suppressed because it is too large
Load Diff
2574
locale/cs-CZ.po
2574
locale/cs-CZ.po
File diff suppressed because it is too large
Load Diff
886
locale/da-DK.po
886
locale/da-DK.po
File diff suppressed because it is too large
Load Diff
888
locale/de-DE.po
888
locale/de-DE.po
File diff suppressed because it is too large
Load Diff
884
locale/en-GB.po
884
locale/en-GB.po
File diff suppressed because it is too large
Load Diff
896
locale/es-ES.po
896
locale/es-ES.po
File diff suppressed because it is too large
Load Diff
912
locale/fr-FR.po
912
locale/fr-FR.po
File diff suppressed because it is too large
Load Diff
900
locale/hr-HR.po
900
locale/hr-HR.po
File diff suppressed because it is too large
Load Diff
902
locale/id-ID.po
902
locale/id-ID.po
File diff suppressed because it is too large
Load Diff
890
locale/it-IT.po
890
locale/it-IT.po
File diff suppressed because it is too large
Load Diff
974
locale/ja-JP.po
974
locale/ja-JP.po
File diff suppressed because it is too large
Load Diff
950
locale/ko-KR.po
950
locale/ko-KR.po
File diff suppressed because it is too large
Load Diff
970
locale/pl-PL.po
970
locale/pl-PL.po
File diff suppressed because it is too large
Load Diff
928
locale/pt-BR.po
928
locale/pt-BR.po
File diff suppressed because it is too large
Load Diff
886
locale/pt-PT.po
886
locale/pt-PT.po
File diff suppressed because it is too large
Load Diff
906
locale/ru-RU.po
906
locale/ru-RU.po
File diff suppressed because it is too large
Load Diff
888
locale/sv-SE.po
888
locale/sv-SE.po
File diff suppressed because it is too large
Load Diff
892
locale/uk-UA.po
892
locale/uk-UA.po
File diff suppressed because it is too large
Load Diff
896
locale/zh-CN.po
896
locale/zh-CN.po
File diff suppressed because it is too large
Load Diff
954
locale/zh-TW.po
954
locale/zh-TW.po
File diff suppressed because it is too large
Load Diff
76
package.json
76
package.json
@@ -1,22 +1,20 @@
|
|||||||
{
|
{
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular/animations": "^15.2.6",
|
"@angular/animations": "^15.1.3",
|
||||||
"@angular/cdk": "^15.2.6",
|
"@angular/cdk": "^15.1.3",
|
||||||
"@angular/common": "^15.2.6",
|
"@angular/common": "^15.1.3",
|
||||||
"@angular/compiler": "^15.2.6",
|
"@angular/compiler": "^15.1.3",
|
||||||
"@angular/compiler-cli": "^15.2.6",
|
"@angular/compiler-cli": "^15.1.3",
|
||||||
"@angular/core": "^15.2.6",
|
"@angular/core": "^15.1.3",
|
||||||
"@angular/forms": "^15.2.6",
|
"@angular/forms": "^15.1.3",
|
||||||
"@angular/localize": "^15.2.9",
|
"@angular/platform-browser": "^15.1.3",
|
||||||
"@angular/platform-browser": "^15.2.6",
|
"@angular/platform-browser-dynamic": "^15.1.3",
|
||||||
"@angular/platform-browser-dynamic": "^15.2.6",
|
|
||||||
"@biesbjerg/ngx-translate-extract-marker": "^1.0.0",
|
"@biesbjerg/ngx-translate-extract-marker": "^1.0.0",
|
||||||
"@electron/notarize": "^1.2.3",
|
"@fortawesome/fontawesome-free": "^6.2.0",
|
||||||
"@fortawesome/fontawesome-free": "^6.4.0",
|
"@ng-bootstrap/ng-bootstrap": "^14.0.1",
|
||||||
"@ng-bootstrap/ng-bootstrap": "^14.1.0",
|
"@ngtools/webpack": "^15.1.4",
|
||||||
"@ngtools/webpack": "^15.2.5",
|
|
||||||
"@popperjs/core": "^2.11.6",
|
"@popperjs/core": "^2.11.6",
|
||||||
"@sentry/cli": "^2.18.1",
|
"@sentry/cli": "^1.74.3",
|
||||||
"@sentry/electron": "^2.5.4",
|
"@sentry/electron": "^2.5.4",
|
||||||
"@tabby-gang/to-string-loader": "^1.1.7-beta.2",
|
"@tabby-gang/to-string-loader": "^1.1.7-beta.2",
|
||||||
"@types/deep-equal": "1.0.1",
|
"@types/deep-equal": "1.0.1",
|
||||||
@@ -24,38 +22,39 @@
|
|||||||
"@types/electron-debug": "^2.1.0",
|
"@types/electron-debug": "^2.1.0",
|
||||||
"@types/fs-extra": "^9.0.13",
|
"@types/fs-extra": "^9.0.13",
|
||||||
"@types/js-yaml": "^4.0.5",
|
"@types/js-yaml": "^4.0.5",
|
||||||
"@types/node": "20.3.1",
|
"@types/node": "16.0.1",
|
||||||
"@types/webpack-env": "^1.18.0",
|
"@types/webpack-env": "^1.18.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^6.4.1",
|
"@typescript-eslint/eslint-plugin": "^5.45.0",
|
||||||
"@typescript-eslint/parser": "^6.4.1",
|
"@typescript-eslint/parser": "^5.45.0",
|
||||||
"apply-loader": "2.0.0",
|
"apply-loader": "2.0.0",
|
||||||
"axios": "^1.4.0",
|
"axios": "^0.27.2",
|
||||||
"babel-loader": "^9.1.2",
|
"babel-loader": "^9.1.2",
|
||||||
"browserify-sign": "^4.2.1",
|
"browserify-sign": "^4.2.1",
|
||||||
"clone-deep": "^4.0.1",
|
"clone-deep": "^4.0.1",
|
||||||
"compare-versions": "^5",
|
"compare-versions": "^5",
|
||||||
"core-js": "^3.31.0",
|
"core-js": "^3.21.1",
|
||||||
"core-js-pure": "^3.21.1",
|
"core-js-pure": "^3.21.1",
|
||||||
"cross-env": "7.0.3",
|
"cross-env": "7.0.3",
|
||||||
"css-loader": "^6.7.3",
|
"css-loader": "^6.7.3",
|
||||||
"deep-equal": "2.0.5",
|
"deep-equal": "2.0.5",
|
||||||
"electron": "^25.3.0",
|
"electron": "22.3.1",
|
||||||
"electron-builder": "^24.6.4",
|
"electron-builder": "^24.0.0-alpha.1",
|
||||||
"electron-download": "^4.1.1",
|
"electron-download": "^4.1.1",
|
||||||
"electron-installer-snap": "^5.1.0",
|
"electron-installer-snap": "^5.1.0",
|
||||||
|
"electron-notarize": "^1.2.2",
|
||||||
"electron-rebuild": "^3.2.9",
|
"electron-rebuild": "^3.2.9",
|
||||||
"eslint": "^8.48.0",
|
"eslint": "^8.29.0",
|
||||||
"eslint-import-resolver-typescript": "^3.6.0",
|
"eslint-import-resolver-typescript": "^3.5.2",
|
||||||
"eslint-plugin-import": "^2.28.1",
|
"eslint-plugin-import": "^2.26.0",
|
||||||
"file-loader": "^6.2.0",
|
"file-loader": "^6.2.0",
|
||||||
"gettext-extractor": "^3.8.0",
|
"gettext-extractor": "^3.5.4",
|
||||||
"graceful-fs": "^4.2.10",
|
"graceful-fs": "^4.2.10",
|
||||||
"html-loader": "4.2.0",
|
"html-loader": "4.2.0",
|
||||||
"json-loader": "^0.5.7",
|
"json-loader": "^0.5.7",
|
||||||
"lru-cache": "^6.0.0",
|
"lru-cache": "^6.0.0",
|
||||||
"macos-release": "^3.1.0",
|
"macos-release": "^3.1.0",
|
||||||
"ngx-toastr": "^16.0.2",
|
"ngx-toastr": "^16.0.2",
|
||||||
"node-abi": "^3.45.0",
|
"node-abi": "^3.33.0",
|
||||||
"npmlog": "6.0.2",
|
"npmlog": "6.0.2",
|
||||||
"npx": "^10.2.2",
|
"npx": "^10.2.2",
|
||||||
"patch-package": "^6.4.7",
|
"patch-package": "^6.4.7",
|
||||||
@@ -68,7 +67,7 @@
|
|||||||
"pug-static-loader": "2.0.0",
|
"pug-static-loader": "2.0.0",
|
||||||
"raw-loader": "4.0.2",
|
"raw-loader": "4.0.2",
|
||||||
"rxjs": "^7.5.7",
|
"rxjs": "^7.5.7",
|
||||||
"sass": "^1.63.4",
|
"sass": "^1.58.0",
|
||||||
"sass-loader": "^13.2.0",
|
"sass-loader": "^13.2.0",
|
||||||
"shell-quote": "^1.7.4",
|
"shell-quote": "^1.7.4",
|
||||||
"shelljs": "0.8.5",
|
"shelljs": "0.8.5",
|
||||||
@@ -76,7 +75,7 @@
|
|||||||
"source-code-pro": "^2.38.0",
|
"source-code-pro": "^2.38.0",
|
||||||
"source-map-loader": "^4.0.1",
|
"source-map-loader": "^4.0.1",
|
||||||
"source-sans-pro": "3.6.0",
|
"source-sans-pro": "3.6.0",
|
||||||
"ssh2": "^1.14.0",
|
"ssh2": "Eugeny/ssh2#9de907d62907d6d45debdcc0ed8dda5b7b19dc7c",
|
||||||
"style-loader": "^3.3.1",
|
"style-loader": "^3.3.1",
|
||||||
"svg-inline-loader": "^0.8.2",
|
"svg-inline-loader": "^0.8.2",
|
||||||
"thenby": "^1.3.4",
|
"thenby": "^1.3.4",
|
||||||
@@ -85,21 +84,19 @@
|
|||||||
"tslib": "^2.5.0",
|
"tslib": "^2.5.0",
|
||||||
"typedoc": "^0.22.18",
|
"typedoc": "^0.22.18",
|
||||||
"typescript": "^4.9.5",
|
"typescript": "^4.9.5",
|
||||||
"utils-decorators": "^2.0.6",
|
"utils-decorators": "^1.10.4",
|
||||||
"val-loader": "5.0.1",
|
"val-loader": "5.0.1",
|
||||||
"webpack": "^5.86.0",
|
"webpack": "^5.75.0",
|
||||||
"webpack-bundle-analyzer": "^4.7.0",
|
"webpack-bundle-analyzer": "^4.7.0",
|
||||||
"webpack-cli": "^5.0.1",
|
"webpack-cli": "^5.0.1",
|
||||||
"yaml-loader": "0.8.0",
|
"yaml-loader": "0.8.0",
|
||||||
"zone.js": "^0.13.0"
|
"zone.js": "^0.11.5"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"*/pug": "^3",
|
"*/pug": "^3",
|
||||||
"lzma-native": "^8.0.6",
|
"lzma-native": "^8.0.0",
|
||||||
"*/node-abi": "^3.51.0",
|
"*/node-abi": "^3.33.0",
|
||||||
"**/graceful-fs": "^4.2.4",
|
"**/graceful-fs": "^4.2.4"
|
||||||
"nan": "2.17.0",
|
|
||||||
"node-gyp": "10.0.0"
|
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "npm run build:typings && node scripts/build-modules.mjs",
|
"build": "npm run build:typings && node scripts/build-modules.mjs",
|
||||||
@@ -116,8 +113,5 @@
|
|||||||
"i18n:push": "crowdin push"
|
"i18n:push": "crowdin push"
|
||||||
},
|
},
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"private": true,
|
"private": true
|
||||||
"dependencies": {
|
|
||||||
"dotenv": "^16.3.1"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
diff --git a/node_modules/app-builder-lib/out/appInfo.js b/node_modules/app-builder-lib/out/appInfo.js
|
diff --git a/node_modules/app-builder-lib/out/appInfo.js b/node_modules/app-builder-lib/out/appInfo.js
|
||||||
index 49f6dca..0ea11f2 100644
|
index 363f32c..a0434a9 100644
|
||||||
--- a/node_modules/app-builder-lib/out/appInfo.js
|
--- a/node_modules/app-builder-lib/out/appInfo.js
|
||||||
+++ b/node_modules/app-builder-lib/out/appInfo.js
|
+++ b/node_modules/app-builder-lib/out/appInfo.js
|
||||||
@@ -112,9 +112,7 @@ class AppInfo {
|
@@ -100,9 +100,7 @@ class AppInfo {
|
||||||
return this.info.metadata.name;
|
return this.info.metadata.name;
|
||||||
}
|
}
|
||||||
get linuxPackageName() {
|
get linuxPackageName() {
|
||||||
- const name = this.name;
|
- const name = this.name;
|
||||||
- // https://github.com/electron-userland/electron-builder/issues/2963
|
- // https://github.com/electron-userland/electron-builder/issues/2963
|
||||||
- return name.startsWith("@") ? this.sanitizedProductName : name;
|
- return name.startsWith("@") ? this.sanitizedProductName : name;
|
||||||
+ return 'tabby-terminal';
|
+ return 'tabby-terminal'
|
||||||
}
|
}
|
||||||
get sanitizedName() {
|
get sanitizedName() {
|
||||||
return (0, filename_1.sanitizeFileName)(this.name);
|
return filename_1.sanitizeFileName(this.name);
|
@@ -1,45 +0,0 @@
|
|||||||
diff --git a/node_modules/electron-rebuild/lib/src/module-rebuilder.js b/node_modules/electron-rebuild/lib/src/module-rebuilder.js
|
|
||||||
index 0d78dbe..60ee50d 100644
|
|
||||||
--- a/node_modules/electron-rebuild/lib/src/module-rebuilder.js
|
|
||||||
+++ b/node_modules/electron-rebuild/lib/src/module-rebuilder.js
|
|
||||||
@@ -123,7 +123,7 @@ class ModuleRebuilder {
|
|
||||||
await fs.outputFile(this.metaPath, this.metaData);
|
|
||||||
}
|
|
||||||
async rebuild(cacheKey) {
|
|
||||||
- return (await this.findPrebuildifyModule(cacheKey)) ||
|
|
||||||
+ return
|
|
||||||
(await this.findPrebuildInstallModule(cacheKey)) ||
|
|
||||||
(await this.rebuildNodeGypModule(cacheKey));
|
|
||||||
}
|
|
||||||
diff --git a/node_modules/electron-rebuild/lib/src/module-walker.js b/node_modules/electron-rebuild/lib/src/module-walker.js
|
|
||||||
index b36e35c..09c6d03 100644
|
|
||||||
--- a/node_modules/electron-rebuild/lib/src/module-walker.js
|
|
||||||
+++ b/node_modules/electron-rebuild/lib/src/module-walker.js
|
|
||||||
@@ -57,6 +57,7 @@ class ModuleWalker {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
d('exploring', modulePath);
|
|
||||||
+
|
|
||||||
let childPackageJson;
|
|
||||||
try {
|
|
||||||
childPackageJson = await (0, read_package_json_1.readPackageJson)(modulePath, true);
|
|
||||||
diff --git a/node_modules/electron-rebuild/lib/src/rebuild.js b/node_modules/electron-rebuild/lib/src/rebuild.js
|
|
||||||
index 41e3a3e..3f63287 100644
|
|
||||||
--- a/node_modules/electron-rebuild/lib/src/rebuild.js
|
|
||||||
+++ b/node_modules/electron-rebuild/lib/src/rebuild.js
|
|
||||||
@@ -101,6 +101,7 @@ class Rebuilder {
|
|
||||||
await this.moduleWalker.findAllModulesIn(nodeModulesPath);
|
|
||||||
}
|
|
||||||
for (const modulePath of this.moduleWalker.modulesToRebuild) {
|
|
||||||
+ await this.rebuildModuleAt(modulePath)
|
|
||||||
this.rebuilds.push(() => this.rebuildModuleAt(modulePath));
|
|
||||||
}
|
|
||||||
this.rebuilds.push(() => this.rebuildModuleAt(this.buildPath));
|
|
||||||
@@ -117,6 +118,7 @@ class Rebuilder {
|
|
||||||
if (!(await fs.pathExists(path.resolve(modulePath, 'binding.gyp')))) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
const moduleRebuilder = new module_rebuilder_1.ModuleRebuilder(this, modulePath);
|
|
||||||
this.lifecycle.emit('module-found', path.basename(modulePath));
|
|
||||||
if (!this.force && await moduleRebuilder.alreadyBuiltByRebuild()) {
|
|
@@ -9,7 +9,7 @@ process.env.ARCH = (process.env.ARCH || process.arch) === 'arm' ? 'armv7l' : pro
|
|||||||
|
|
||||||
builder({
|
builder({
|
||||||
dir: true,
|
dir: true,
|
||||||
linux: ['deb', 'tar.gz', 'rpm', 'pacman', 'appimage'],
|
linux: ['deb', 'tar.gz', 'rpm', 'pacman'],
|
||||||
armv7l: process.env.ARCH === 'armv7l',
|
armv7l: process.env.ARCH === 'armv7l',
|
||||||
arm64: process.env.ARCH === 'arm64',
|
arm64: process.env.ARCH === 'arm64',
|
||||||
config: {
|
config: {
|
||||||
|
@@ -13,12 +13,9 @@ if (process.env.GITHUB_HEAD_REF) {
|
|||||||
process.env.CSC_IDENTITY_AUTO_DISCOVERY = 'false'
|
process.env.CSC_IDENTITY_AUTO_DISCOVERY = 'false'
|
||||||
}
|
}
|
||||||
|
|
||||||
process.env.APPLE_ID ??= process.env.APPSTORE_USERNAME
|
|
||||||
process.env.APPLE_APP_SPECIFIC_PASSWORD ??= process.env.APPSTORE_PASSWORD
|
|
||||||
|
|
||||||
builder({
|
builder({
|
||||||
dir: true,
|
dir: true,
|
||||||
mac: ['dmg', 'zip'],
|
mac: ['pkg', 'zip'],
|
||||||
x64: process.env.ARCH === 'x86_64',
|
x64: process.env.ARCH === 'x86_64',
|
||||||
arm64: process.env.ARCH === 'arm64',
|
arm64: process.env.ARCH === 'arm64',
|
||||||
config: {
|
config: {
|
||||||
@@ -27,11 +24,8 @@ builder({
|
|||||||
},
|
},
|
||||||
mac: {
|
mac: {
|
||||||
identity: !process.env.CI || process.env.CSC_LINK ? undefined : null,
|
identity: !process.env.CI || process.env.CSC_LINK ? undefined : null,
|
||||||
notarize: process.env.APPLE_TEAM_ID ? {
|
|
||||||
appBundleId: 'org.tabby',
|
|
||||||
teamId: process.env.APPLE_TEAM_ID,
|
|
||||||
} : false,
|
|
||||||
},
|
},
|
||||||
|
npmRebuild: process.env.ARCH !== 'arm64',
|
||||||
publish: process.env.KEYGEN_TOKEN ? [
|
publish: process.env.KEYGEN_TOKEN ? [
|
||||||
vars.keygenConfig,
|
vars.keygenConfig,
|
||||||
{
|
{
|
||||||
|
@@ -9,7 +9,7 @@ sh.exec(`${sentryCli} releases new ${vars.version}`)
|
|||||||
if (process.platform === 'darwin') {
|
if (process.platform === 'darwin') {
|
||||||
for (const path of [
|
for (const path of [
|
||||||
'app/node_modules/@serialport/bindings/build/Release/bindings.node',
|
'app/node_modules/@serialport/bindings/build/Release/bindings.node',
|
||||||
'app/node_modules/node-pty/build/Release/pty.node',
|
'app/node_modules/@tabby-gang/node-pty/build/Release/pty.node',
|
||||||
'app/node_modules/fontmanager-redux/build/Release/fontmanager.node',
|
'app/node_modules/fontmanager-redux/build/Release/fontmanager.node',
|
||||||
'app/node_modules/macos-native-processlist/build/Release/native.node',
|
'app/node_modules/macos-native-processlist/build/Release/native.node',
|
||||||
]) {
|
]) {
|
||||||
|
@@ -3,8 +3,6 @@ import * as fs from 'fs'
|
|||||||
import * as semver from 'semver'
|
import * as semver from 'semver'
|
||||||
import * as childProcess from 'child_process'
|
import * as childProcess from 'child_process'
|
||||||
|
|
||||||
process.env.ARCH = ((process.env.ARCH || process.arch) === 'arm') ? 'armv7l' : process.env.ARCH || process.arch
|
|
||||||
|
|
||||||
import * as url from 'url'
|
import * as url from 'url'
|
||||||
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
|
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
|
||||||
|
|
||||||
@@ -27,8 +25,8 @@ export const builtinPlugins = [
|
|||||||
'tabby-ssh',
|
'tabby-ssh',
|
||||||
'tabby-serial',
|
'tabby-serial',
|
||||||
'tabby-telnet',
|
'tabby-telnet',
|
||||||
'tabby-local',
|
|
||||||
'tabby-electron',
|
'tabby-electron',
|
||||||
|
'tabby-local',
|
||||||
'tabby-plugin-manager',
|
'tabby-plugin-manager',
|
||||||
'tabby-linkifier',
|
'tabby-linkifier',
|
||||||
]
|
]
|
||||||
@@ -60,21 +58,21 @@ export const keygenConfig = {
|
|||||||
win32: {
|
win32: {
|
||||||
x64: 'f481b9d6-d5da-4970-b926-f515373e986f',
|
x64: 'f481b9d6-d5da-4970-b926-f515373e986f',
|
||||||
arm64: '950999b9-371c-419b-b291-938c5e4d364c',
|
arm64: '950999b9-371c-419b-b291-938c5e4d364c',
|
||||||
}[process.env.ARCH],
|
}[process.env.ARCH ?? process.arch],
|
||||||
darwin: {
|
darwin: {
|
||||||
arm64: '98fbadee-c707-4cd6-9d99-56683595a846',
|
arm64: '98fbadee-c707-4cd6-9d99-56683595a846',
|
||||||
x86_64: 'f5a48841-d5b8-4b7b-aaa7-cf5bffd36461',
|
x86_64: 'f5a48841-d5b8-4b7b-aaa7-cf5bffd36461',
|
||||||
x64: 'f5a48841-d5b8-4b7b-aaa7-cf5bffd36461',
|
x64: 'f5a48841-d5b8-4b7b-aaa7-cf5bffd36461',
|
||||||
}[process.env.ARCH],
|
}[process.env.ARCH ?? process.arch],
|
||||||
linux: {
|
linux: {
|
||||||
x64: '7bf45071-3031-4a26-9f2e-72604308313e',
|
x64: '7bf45071-3031-4a26-9f2e-72604308313e',
|
||||||
arm64: '39e3c736-d4d4-4fbf-a201-324b7bab0d17',
|
arm64: '39e3c736-d4d4-4fbf-a201-324b7bab0d17',
|
||||||
armv7l: '50ae0a82-7f47-4fa4-b0a8-b0d575ce9409',
|
armv7l: '50ae0a82-7f47-4fa4-b0a8-b0d575ce9409',
|
||||||
armhf: '7df5aa12-04ab-4075-a0fe-93b0bbea9643',
|
armhf: '7df5aa12-04ab-4075-a0fe-93b0bbea9643',
|
||||||
}[process.env.ARCH],
|
}[process.env.ARCH ?? process.arch],
|
||||||
}[process.platform],
|
}[process.platform],
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!keygenConfig.product) {
|
if (!keygenConfig.product) {
|
||||||
throw new Error(`Unrecognized platform ${process.platform}/${process.env.ARCH}`)
|
throw new Error(`Unrecognized platform ${process.platform}/${process.env.ARCH ?? process.arch}`)
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "tabby-community-color-schemes",
|
"name": "tabby-community-color-schemes",
|
||||||
"version": "1.0.197-nightly.1",
|
"version": "1.0.189-nightly.2",
|
||||||
"description": "Community color schemes for Tabby",
|
"description": "Community color schemes for Tabby",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"tabby-builtin-plugin"
|
"tabby-builtin-plugin"
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
"author": "Eugene Pankov",
|
"author": "Eugene Pankov",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@angular/core": "^15",
|
"@angular/core": "^9.1.9",
|
||||||
"tabby-core": "*",
|
"tabby-core": "*",
|
||||||
"tabby-terminal": "*"
|
"tabby-terminal": "*"
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "tabby-core",
|
"name": "tabby-core",
|
||||||
"version": "1.0.197-nightly.1",
|
"version": "1.0.189-nightly.0",
|
||||||
"description": "Tabby core",
|
"description": "Tabby core",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"tabby-builtin-plugin"
|
"tabby-builtin-plugin"
|
||||||
@@ -12,7 +12,6 @@
|
|||||||
"watch": "webpack --progress --color --watch"
|
"watch": "webpack --progress --color --watch"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
"dist",
|
|
||||||
"typings"
|
"typings"
|
||||||
],
|
],
|
||||||
"author": "Eugene Pankov",
|
"author": "Eugene Pankov",
|
||||||
@@ -26,16 +25,16 @@
|
|||||||
"messageformat": "^2.3.0",
|
"messageformat": "^2.3.0",
|
||||||
"mixpanel": "^0.17.0",
|
"mixpanel": "^0.17.0",
|
||||||
"ngx-translate-messageformat-compiler": "^4.11.0",
|
"ngx-translate-messageformat-compiler": "^4.11.0",
|
||||||
"readable-stream": "4.4.0",
|
"readable-stream": "4.2.0",
|
||||||
"uuid": "^9.0.0"
|
"uuid": "^9.0.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@angular/animations": "^15",
|
"@angular/animations": "^9.1.9",
|
||||||
"@angular/common": "^15",
|
"@angular/common": "^9.1.11",
|
||||||
"@angular/core": "^15",
|
"@angular/core": "^9.1.9",
|
||||||
"@angular/forms": "^15",
|
"@angular/forms": "^9.1.11",
|
||||||
"@angular/platform-browser": "^15",
|
"@angular/platform-browser": "^9.1.11",
|
||||||
"@angular/platform-browser-dynamic": "^15",
|
"@angular/platform-browser-dynamic": "^9.1.11",
|
||||||
"rxjs": "^7"
|
"rxjs": "^6.6.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,7 +16,7 @@ export { BootstrapData, PluginInfo, BOOTSTRAP_DATA } from './mainProcess'
|
|||||||
export { HostWindowService } from './hostWindow'
|
export { HostWindowService } from './hostWindow'
|
||||||
export { HostAppService, Platform } from './hostApp'
|
export { HostAppService, Platform } from './hostApp'
|
||||||
export { FileProvider } from './fileProvider'
|
export { FileProvider } from './fileProvider'
|
||||||
export { ProfileProvider, ConnectableProfileProvider, QuickConnectProfileProvider, Profile, ConnectableProfile, PartialProfile, ProfileSettingsComponent, ProfileGroup, PartialProfileGroup } from './profileProvider'
|
export { ProfileProvider, Profile, PartialProfile, ProfileSettingsComponent } from './profileProvider'
|
||||||
export { PromptModalComponent } from '../components/promptModal.component'
|
export { PromptModalComponent } from '../components/promptModal.component'
|
||||||
export * from './commands'
|
export * from './commands'
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
export interface MenuItemOptions {
|
export interface MenuItemOptions {
|
||||||
type?: 'normal' | 'separator' | 'submenu' | 'checkbox' | 'radio'
|
type?: ('normal' | 'separator' | 'submenu' | 'checkbox' | 'radio')
|
||||||
label?: string
|
label?: string
|
||||||
sublabel?: string
|
sublabel?: string
|
||||||
enabled?: boolean
|
enabled?: boolean
|
||||||
|
@@ -86,18 +86,14 @@ export interface FileUploadOptions {
|
|||||||
multiple: boolean
|
multiple: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export type PlatformTheme = 'light'|'dark'
|
|
||||||
|
|
||||||
export abstract class PlatformService {
|
export abstract class PlatformService {
|
||||||
supportsWindowControls = false
|
supportsWindowControls = false
|
||||||
|
|
||||||
get fileTransferStarted$ (): Observable<FileTransfer> { return this.fileTransferStarted }
|
get fileTransferStarted$ (): Observable<FileTransfer> { return this.fileTransferStarted }
|
||||||
get displayMetricsChanged$ (): Observable<void> { return this.displayMetricsChanged }
|
get displayMetricsChanged$ (): Observable<void> { return this.displayMetricsChanged }
|
||||||
get themeChanged$ (): Observable<PlatformTheme> { return this.themeChanged }
|
|
||||||
|
|
||||||
protected fileTransferStarted = new Subject<FileTransfer>()
|
protected fileTransferStarted = new Subject<FileTransfer>()
|
||||||
protected displayMetricsChanged = new Subject<void>()
|
protected displayMetricsChanged = new Subject<void>()
|
||||||
protected themeChanged = new Subject<PlatformTheme>()
|
|
||||||
|
|
||||||
abstract readClipboard (): string
|
abstract readClipboard (): string
|
||||||
abstract setClipboard (content: ClipboardContent): void
|
abstract setClipboard (content: ClipboardContent): void
|
||||||
@@ -173,10 +169,6 @@ export abstract class PlatformService {
|
|||||||
throw new Error('Not implemented')
|
throw new Error('Not implemented')
|
||||||
}
|
}
|
||||||
|
|
||||||
getTheme (): PlatformTheme {
|
|
||||||
return 'dark'
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract getOSRelease (): string
|
abstract getOSRelease (): string
|
||||||
abstract getAppVersion (): string
|
abstract getAppVersion (): string
|
||||||
abstract openExternal (url: string): void
|
abstract openExternal (url: string): void
|
||||||
@@ -184,7 +176,6 @@ export abstract class PlatformService {
|
|||||||
abstract setErrorHandler (handler: (_: any) => void): void
|
abstract setErrorHandler (handler: (_: any) => void): void
|
||||||
abstract popupContextMenu (menu: MenuItemOptions[], event?: MouseEvent): void
|
abstract popupContextMenu (menu: MenuItemOptions[], event?: MouseEvent): void
|
||||||
abstract showMessageBox (options: MessageBoxOptions): Promise<MessageBoxResult>
|
abstract showMessageBox (options: MessageBoxOptions): Promise<MessageBoxResult>
|
||||||
abstract pickDirectory (): Promise<string>
|
|
||||||
abstract quit (): void
|
abstract quit (): void
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -14,17 +14,12 @@ export interface Profile {
|
|||||||
icon?: string
|
icon?: string
|
||||||
color?: string
|
color?: string
|
||||||
disableDynamicTitle: boolean
|
disableDynamicTitle: boolean
|
||||||
behaviorOnSessionEnd: 'auto'|'keep'|'reconnect'|'close'
|
|
||||||
|
|
||||||
weight: number
|
weight: number
|
||||||
isBuiltin: boolean
|
isBuiltin: boolean
|
||||||
isTemplate: boolean
|
isTemplate: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ConnectableProfile extends Profile {
|
|
||||||
clearServiceMessagesOnConnect: boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
export type PartialProfile<T extends Profile> = Omit<Omit<Omit<{
|
export type PartialProfile<T extends Profile> = Omit<Omit<Omit<{
|
||||||
[K in keyof T]?: T[K]
|
[K in keyof T]?: T[K]
|
||||||
}, 'options'>, 'type'>, 'name'> & {
|
}, 'options'>, 'type'>, 'name'> & {
|
||||||
@@ -35,21 +30,6 @@ export type PartialProfile<T extends Profile> = Omit<Omit<Omit<{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ProfileGroup {
|
|
||||||
id: string
|
|
||||||
name: string
|
|
||||||
profiles: PartialProfile<Profile>[]
|
|
||||||
defaults: any
|
|
||||||
editable: boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
export type PartialProfileGroup<T extends ProfileGroup> = Omit<Omit<{
|
|
||||||
[K in keyof T]?: T[K]
|
|
||||||
}, 'id'>, 'name'> & {
|
|
||||||
id: string
|
|
||||||
name: string
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ProfileSettingsComponent<P extends Profile> {
|
export interface ProfileSettingsComponent<P extends Profile> {
|
||||||
profile: P
|
profile: P
|
||||||
save?: () => void
|
save?: () => void
|
||||||
@@ -58,6 +38,7 @@ export interface ProfileSettingsComponent<P extends Profile> {
|
|||||||
export abstract class ProfileProvider<P extends Profile> {
|
export abstract class ProfileProvider<P extends Profile> {
|
||||||
id: string
|
id: string
|
||||||
name: string
|
name: string
|
||||||
|
supportsQuickConnect = false
|
||||||
settingsComponent?: new (...args: any[]) => ProfileSettingsComponent<P>
|
settingsComponent?: new (...args: any[]) => ProfileSettingsComponent<P>
|
||||||
configDefaults = {}
|
configDefaults = {}
|
||||||
|
|
||||||
@@ -71,15 +52,13 @@ export abstract class ProfileProvider<P extends Profile> {
|
|||||||
|
|
||||||
abstract getDescription (profile: PartialProfile<P>): string
|
abstract getDescription (profile: PartialProfile<P>): string
|
||||||
|
|
||||||
|
quickConnect (query: string): PartialProfile<P>|null {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
intoQuickConnectString (profile: P): string|null {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
deleteProfile (profile: P): void { }
|
deleteProfile (profile: P): void { }
|
||||||
}
|
}
|
||||||
|
|
||||||
export abstract class ConnectableProfileProvider<P extends ConnectableProfile> extends ProfileProvider<P> {}
|
|
||||||
|
|
||||||
export abstract class QuickConnectProfileProvider<P extends ConnectableProfile> extends ConnectableProfileProvider<P> {
|
|
||||||
|
|
||||||
abstract quickConnect (query: string): PartialProfile<P>|null
|
|
||||||
|
|
||||||
abstract intoQuickConnectString (profile: P): string|null
|
|
||||||
|
|
||||||
}
|
|
||||||
|
@@ -18,7 +18,7 @@ export class CoreCommandProvider extends CommandProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async activate () {
|
async activate () {
|
||||||
const profile = await this.profilesService.showProfileSelector().catch(() => null)
|
const profile = await this.profilesService.showProfileSelector()
|
||||||
if (profile) {
|
if (profile) {
|
||||||
this.profilesService.launchProfile(profile)
|
this.profilesService.launchProfile(profile)
|
||||||
}
|
}
|
||||||
@@ -27,7 +27,7 @@ export class CoreCommandProvider extends CommandProvider {
|
|||||||
async provide (): Promise<Command[]> {
|
async provide (): Promise<Command[]> {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
id: 'core:profile-selector',
|
id: 'profile-selector',
|
||||||
locations: [CommandLocation.LeftToolbar, CommandLocation.StartPage],
|
locations: [CommandLocation.LeftToolbar, CommandLocation.StartPage],
|
||||||
label: this.translate.instant('Profiles & connections'),
|
label: this.translate.instant('Profiles & connections'),
|
||||||
icon: this.hostApp.platform === Platform.Web
|
icon: this.hostApp.platform === Platform.Web
|
||||||
@@ -35,8 +35,7 @@ export class CoreCommandProvider extends CommandProvider {
|
|||||||
: require('./icons/profiles.svg'),
|
: require('./icons/profiles.svg'),
|
||||||
run: async () => this.activate(),
|
run: async () => this.activate(),
|
||||||
},
|
},
|
||||||
...this.profilesService.getRecentProfiles().map((profile, index) => ({
|
...this.profilesService.getRecentProfiles().map(profile => ({
|
||||||
id: `core:recent-profile-${index}`,
|
|
||||||
label: profile.name,
|
label: profile.name,
|
||||||
locations: [CommandLocation.StartPage],
|
locations: [CommandLocation.StartPage],
|
||||||
icon: require('./icons/history.svg'),
|
icon: require('./icons/history.svg'),
|
||||||
|
@@ -1,20 +1,16 @@
|
|||||||
title-bar(
|
title-bar(
|
||||||
*ngIf='ready && !hostWindow.isFullscreen && config.store.appearance.frame == "full" && config.store.appearance.dock == "off"',
|
*ngIf='ready && !hostWindow.isFullscreen && config.store.appearance.frame == "full" && config.store.appearance.dock == "off"',
|
||||||
(dblclick)='hostWindow.toggleMaximize()',
|
(dblclick)='hostWindow.toggleMaximize()',
|
||||||
[hideControls]='hostApp.platform !== Platform.Linux && !hostWindow.isFullscreen',
|
|
||||||
[class.inset]='hostApp.platform == Platform.macOS && !hostWindow.isFullscreen'
|
[class.inset]='hostApp.platform == Platform.macOS && !hostWindow.isFullscreen'
|
||||||
)
|
)
|
||||||
|
|
||||||
.content(
|
.content(
|
||||||
*ngIf='ready',
|
*ngIf='ready',
|
||||||
[class.tabs-on-top]='config.store.appearance.tabsLocation == "top" || config.store.appearance.tabsLocation == "left"',
|
[class.tabs-on-top]='config.store.appearance.tabsLocation == "top" || config.store.appearance.tabsLocation == "left"',
|
||||||
[class.tabs-on-left]='hasVerticalTabs() && config.store.appearance.tabsLocation == "left"',
|
[class.tabs-on-side]='hasVerticalTabs()',
|
||||||
[class.tabs-titlebar-enabled]='config.store.appearance.frame == "full"',
|
|
||||||
[class.tabs-on-right]='hasVerticalTabs() && config.store.appearance.tabsLocation == "right"',
|
|
||||||
)
|
)
|
||||||
.tab-bar(
|
.tab-bar(
|
||||||
*ngIf='!hostWindow.isFullscreen || config.store.appearance.tabsInFullscreen',
|
*ngIf='!hostWindow.isFullscreen || config.store.appearance.tabsInFullscreen',
|
||||||
[class.tab-bar-no-controls-overlay]='hostApp.platform == Platform.macOS',
|
|
||||||
(dblclick)='hostWindow.toggleMaximize()'
|
(dblclick)='hostWindow.toggleMaximize()'
|
||||||
)
|
)
|
||||||
.inset.background(*ngIf='hostApp.platform == Platform.macOS \
|
.inset.background(*ngIf='hostApp.platform == Platform.macOS \
|
||||||
@@ -35,17 +31,20 @@ title-bar(
|
|||||||
[@animateTab]='{value: "in", params: {size: targetTabSize}}',
|
[@animateTab]='{value: "in", params: {size: targetTabSize}}',
|
||||||
[@.disabled]='hasVerticalTabs() || !config.store.accessibility.animations',
|
[@.disabled]='hasVerticalTabs() || !config.store.accessibility.animations',
|
||||||
(click)='app.selectTab(tab)',
|
(click)='app.selectTab(tab)',
|
||||||
[class.fully-draggable]='hostApp.platform != Platform.macOS'
|
[class.fully-draggable]='hostApp.platform != Platform.macOS',
|
||||||
|
[class.drag-region]='hostApp.platform == Platform.macOS && !(app.tabDragActive$|async)',
|
||||||
)
|
)
|
||||||
|
|
||||||
.btn-group.background
|
.btn-group.background
|
||||||
.d-flex(
|
.d-flex(
|
||||||
*ngFor='let button of leftToolbarButtons'
|
*ngFor='let button of leftToolbarButtons',
|
||||||
|
ngbDropdown
|
||||||
)
|
)
|
||||||
button.btn.btn-secondary.btn-tab-bar(
|
button.btn.btn-secondary.btn-tab-bar(
|
||||||
[title]='button.label',
|
[title]='button.label',
|
||||||
(click)='button.run && button.run()',
|
(click)='button.run && button.run()',
|
||||||
[fastHtmlBind]='button.icon'
|
[fastHtmlBind]='button.icon',
|
||||||
|
ngbDropdownToggle,
|
||||||
)
|
)
|
||||||
|
|
||||||
.d-flex(
|
.d-flex(
|
||||||
@@ -54,7 +53,7 @@ title-bar(
|
|||||||
#activeTransfersDropdown='ngbDropdown'
|
#activeTransfersDropdown='ngbDropdown'
|
||||||
)
|
)
|
||||||
button.btn.btn-secondary.btn-tab-bar(
|
button.btn.btn-secondary.btn-tab-bar(
|
||||||
[hidden]='activeTransfers.length == 0',
|
*ngIf='activeTransfers.length > 0',
|
||||||
title='File transfers',
|
title='File transfers',
|
||||||
ngbDropdownToggle
|
ngbDropdownToggle
|
||||||
) !{require('../icons/transfers.svg')}
|
) !{require('../icons/transfers.svg')}
|
||||||
@@ -64,16 +63,18 @@ title-bar(
|
|||||||
(transfersChange)='onTransfersChange()'
|
(transfersChange)='onTransfersChange()'
|
||||||
)
|
)
|
||||||
|
|
||||||
.drag-space.background([class.persistent]='config.store.appearance.frame == "thin"')
|
.drag-space.background([class.persistent]='config.store.appearance.frame == "thin" && hostApp.platform != Platform.macOS')
|
||||||
|
|
||||||
.btn-group.background
|
.btn-group.background
|
||||||
.d-flex(
|
.d-flex(
|
||||||
*ngFor='let button of rightToolbarButtons'
|
*ngFor='let button of rightToolbarButtons',
|
||||||
|
ngbDropdown
|
||||||
)
|
)
|
||||||
button.btn.btn-secondary.btn-tab-bar(
|
button.btn.btn-secondary.btn-tab-bar(
|
||||||
[title]='button.label',
|
[title]='button.title',
|
||||||
(click)='button.run && button.run()',
|
(click)='button.run && button.run()',
|
||||||
[fastHtmlBind]='button.icon'
|
[fastHtmlBind]='button.icon',
|
||||||
|
ngbDropdownToggle,
|
||||||
)
|
)
|
||||||
|
|
||||||
button.btn.btn-secondary.btn-tab-bar.btn-update(
|
button.btn.btn-secondary.btn-tab-bar.btn-update(
|
||||||
@@ -84,12 +85,9 @@ title-bar(
|
|||||||
|
|
||||||
window-controls.background(
|
window-controls.background(
|
||||||
*ngIf='config.store.appearance.frame == "thin" \
|
*ngIf='config.store.appearance.frame == "thin" \
|
||||||
&& (hostApp.platform == Platform.Linux)',
|
&& (hostApp.platform == Platform.Windows || hostApp.platform == Platform.Linux)',
|
||||||
)
|
)
|
||||||
|
|
||||||
div.window-controls-spacer(
|
|
||||||
*ngIf='config.store.appearance.frame == "thin" && (hostApp.platform == Platform.Windows) && (config.store.appearance.tabsLocation == "top")',
|
|
||||||
)
|
|
||||||
.content
|
.content
|
||||||
start-page.content-tab.content-tab-active(*ngIf='ready && app.tabs.length == 0')
|
start-page.content-tab.content-tab-active(*ngIf='ready && app.tabs.length == 0')
|
||||||
|
|
||||||
|
@@ -10,12 +10,11 @@
|
|||||||
cursor: default;
|
cursor: default;
|
||||||
animation: 0.5s ease-out fadeIn;
|
animation: 0.5s ease-out fadeIn;
|
||||||
transition: 0.25s background;
|
transition: 0.25s background;
|
||||||
|
|
||||||
--tabs-height: calc(38px * var(--spaciness));
|
|
||||||
--side-tab-width: calc(200px * var(--spaciness));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$tabs-height: 38px;
|
||||||
$tab-border-radius: 4px;
|
$tab-border-radius: 4px;
|
||||||
|
$side-tab-width: 200px;
|
||||||
|
|
||||||
.wrap {
|
.wrap {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -35,30 +34,31 @@ $tab-border-radius: 4px;
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.tabs-on-right {
|
&.tabs-on-side {
|
||||||
flex-direction: row-reverse;
|
flex-direction: row-reverse;
|
||||||
|
|
||||||
|
&.tabs-on-top {
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.tabs-on-left {
|
|
||||||
flex-direction: row;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.content.tabs-on-left > .tab-bar, .content.tabs-on-right > .tab-bar {
|
.content.tabs-on-side > .tab-bar {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: var(--side-tab-width);
|
width: $side-tab-width;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
background: rgba(0, 0, 0, 0.25);
|
background: rgba(0, 0, 0, 0.25);
|
||||||
|
|
||||||
.tabs {
|
.tabs {
|
||||||
width: var(--side-tab-width);
|
width: $side-tab-width;
|
||||||
flex: none;
|
flex: none;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
tab-header {
|
tab-header {
|
||||||
flex: 0 0 var(--tabs-height);
|
flex: 0 0 $tabs-height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,34 +69,18 @@ $tab-border-radius: 4px;
|
|||||||
&>.inset {
|
&>.inset {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
::ng-deep tab-header {
|
|
||||||
width: 100% !important;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.content.tabs-on-left > .tab-bar.tab-bar-no-controls-overlay, .content.tabs-titlebar-enabled {
|
|
||||||
.tabs {
|
|
||||||
padding-top: 0 !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.content.tabs-on-right > .tab-bar {
|
|
||||||
.tabs {
|
|
||||||
// Account for WCO on Windows.
|
|
||||||
padding-top: 36px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab-bar {
|
.tab-bar {
|
||||||
flex: none;
|
flex: none;
|
||||||
height: var(--tabs-height);
|
height: $tabs-height;
|
||||||
display: flex;
|
display: flex;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
.btn-tab-bar {
|
.btn-tab-bar {
|
||||||
line-height: calc(var(--tabs-height) + 2px);
|
line-height: $tabs-height + 2px;
|
||||||
height: var(--tabs-height);
|
height: $tabs-height;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -129,27 +113,17 @@ $tab-border-radius: 4px;
|
|||||||
&>.drag-space {
|
&>.drag-space {
|
||||||
min-width: 1px;
|
min-width: 1px;
|
||||||
flex: 1 0 1%;
|
flex: 1 0 1%;
|
||||||
|
margin-top: 2px; // for window resizing
|
||||||
-webkit-app-region: drag;
|
-webkit-app-region: drag;
|
||||||
|
|
||||||
.tabs-on-top & {
|
|
||||||
margin-top: 2px; // for window resizing
|
|
||||||
}
|
|
||||||
|
|
||||||
&.persistent {
|
&.persistent {
|
||||||
// min-width: 72px; // 2 x 36 px height, ie 2 squares
|
min-width: 72px; // 2 x 36 px height, ie 2 squares
|
||||||
// Given WCO on Windows, the min-width of the window buttons is about 138px.
|
|
||||||
min-width: 138px;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&>.window-controls-spacer {
|
|
||||||
min-width: 138px;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
& > .inset {
|
& > .inset {
|
||||||
width: calc(70px + 15px * var(--spaciness));
|
width: 85px;
|
||||||
height: var(--tabs-height);
|
height: $tabs-height;
|
||||||
flex: none;
|
flex: none;
|
||||||
-webkit-app-region: drag;
|
-webkit-app-region: drag;
|
||||||
}
|
}
|
||||||
@@ -196,12 +170,18 @@ hotkey-hint {
|
|||||||
|
|
||||||
::ng-deep .btn-tab-bar svg,
|
::ng-deep .btn-tab-bar svg,
|
||||||
::ng-deep .btn-tab-bar + .dropdown-menu svg {
|
::ng-deep .btn-tab-bar + .dropdown-menu svg {
|
||||||
width: calc(22px * var(--spaciness));
|
width: 22px;
|
||||||
height: calc(16px * var(--spaciness));
|
height: 16px;
|
||||||
fill: white;
|
fill: white;
|
||||||
fill-opacity: 0.75;
|
fill-opacity: 0.75;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.icon-wrapper {
|
||||||
|
display: flex;
|
||||||
|
width: 16px;
|
||||||
|
height: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
::ng-deep .btn-update svg {
|
::ng-deep .btn-update svg {
|
||||||
fill: cyan;
|
fill: cyan;
|
||||||
}
|
}
|
||||||
|
@@ -79,8 +79,8 @@ export class AppRootComponent {
|
|||||||
|
|
||||||
constructor (
|
constructor (
|
||||||
private hotkeys: HotkeysService,
|
private hotkeys: HotkeysService,
|
||||||
|
private updater: UpdaterService,
|
||||||
private commands: CommandService,
|
private commands: CommandService,
|
||||||
public updater: UpdaterService,
|
|
||||||
public hostWindow: HostWindowService,
|
public hostWindow: HostWindowService,
|
||||||
public hostApp: HostAppService,
|
public hostApp: HostAppService,
|
||||||
public config: ConfigService,
|
public config: ConfigService,
|
||||||
|
@@ -75,7 +75,6 @@ export abstract class BaseTabComponent extends BaseComponent {
|
|||||||
private titleChange = new Subject<string>()
|
private titleChange = new Subject<string>()
|
||||||
private focused = new Subject<void>()
|
private focused = new Subject<void>()
|
||||||
private blurred = new Subject<void>()
|
private blurred = new Subject<void>()
|
||||||
private visibility = new Subject<boolean>()
|
|
||||||
private progress = new Subject<number|null>()
|
private progress = new Subject<number|null>()
|
||||||
private activity = new Subject<boolean>()
|
private activity = new Subject<boolean>()
|
||||||
private destroyed = new Subject<void>()
|
private destroyed = new Subject<void>()
|
||||||
@@ -84,8 +83,6 @@ export abstract class BaseTabComponent extends BaseComponent {
|
|||||||
|
|
||||||
get focused$ (): Observable<void> { return this.focused }
|
get focused$ (): Observable<void> { return this.focused }
|
||||||
get blurred$ (): Observable<void> { return this.blurred }
|
get blurred$ (): Observable<void> { return this.blurred }
|
||||||
/* @hidden */
|
|
||||||
get visibility$ (): Observable<boolean> { return this.visibility }
|
|
||||||
get titleChange$ (): Observable<string> { return this.titleChange.pipe(distinctUntilChanged()) }
|
get titleChange$ (): Observable<string> { return this.titleChange.pipe(distinctUntilChanged()) }
|
||||||
get progress$ (): Observable<number|null> { return this.progress.pipe(distinctUntilChanged()) }
|
get progress$ (): Observable<number|null> { return this.progress.pipe(distinctUntilChanged()) }
|
||||||
get activity$ (): Observable<boolean> { return this.activity }
|
get activity$ (): Observable<boolean> { return this.activity }
|
||||||
@@ -180,11 +177,6 @@ export abstract class BaseTabComponent extends BaseComponent {
|
|||||||
this.blurred.next()
|
this.blurred.next()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* @hidden */
|
|
||||||
emitVisibility (visibility: boolean): void {
|
|
||||||
this.visibility.next(visibility)
|
|
||||||
}
|
|
||||||
|
|
||||||
insertIntoContainer (container: ViewContainerRef): EmbeddedViewRef<any> {
|
insertIntoContainer (container: ViewContainerRef): EmbeddedViewRef<any> {
|
||||||
this.viewContainerEmbeddedRef = container.insert(this.hostView) as EmbeddedViewRef<any>
|
this.viewContainerEmbeddedRef = container.insert(this.hostView) as EmbeddedViewRef<any>
|
||||||
this.viewContainer = container
|
this.viewContainer = container
|
||||||
@@ -200,14 +192,6 @@ export abstract class BaseTabComponent extends BaseComponent {
|
|||||||
this.viewContainer = undefined
|
this.viewContainer = undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
get topmostParent (): BaseTabComponent|null {
|
|
||||||
let parent = this.parent
|
|
||||||
while (parent?.parent) {
|
|
||||||
parent = parent.parent
|
|
||||||
}
|
|
||||||
return parent
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called before the tab is closed
|
* Called before the tab is closed
|
||||||
*/
|
*/
|
||||||
|
@@ -5,7 +5,7 @@ import { BaseComponent } from './base.component'
|
|||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'profile-icon',
|
selector: 'profile-icon',
|
||||||
templateUrl: './profileIcon.component.pug',
|
templateUrl:'./profileIcon.component.pug',
|
||||||
styleUrls: ['./profileIcon.component.scss'],
|
styleUrls: ['./profileIcon.component.scss'],
|
||||||
})
|
})
|
||||||
export class ProfileIconComponent extends BaseComponent {
|
export class ProfileIconComponent extends BaseComponent {
|
||||||
|
@@ -3,7 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
|
|||||||
|
|
||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Component({
|
@Component({
|
||||||
templateUrl: './promptModal.component.pug',
|
templateUrl:'./promptModal.component.pug',
|
||||||
})
|
})
|
||||||
export class PromptModalComponent {
|
export class PromptModalComponent {
|
||||||
@Input() value: string
|
@Input() value: string
|
||||||
|
@@ -5,7 +5,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
|
|||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'rename-tab-modal',
|
selector: 'rename-tab-modal',
|
||||||
templateUrl: './renameTabModal.component.pug',
|
templateUrl:'./renameTabModal.component.pug',
|
||||||
})
|
})
|
||||||
export class RenameTabModalComponent {
|
export class RenameTabModalComponent {
|
||||||
@Input() value: string
|
@Input() value: string
|
||||||
|
@@ -3,7 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
|
|||||||
|
|
||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Component({
|
@Component({
|
||||||
templateUrl: './safeModeModal.component.pug',
|
templateUrl:'./safeModeModal.component.pug',
|
||||||
})
|
})
|
||||||
export class SafeModeModalComponent {
|
export class SafeModeModalComponent {
|
||||||
@Input() error: Error
|
@Input() error: Error
|
||||||
|
@@ -26,9 +26,9 @@
|
|||||||
*ngIf='option.description !== getOptionText(option)'
|
*ngIf='option.description !== getOptionText(option)'
|
||||||
) {{option.description}}
|
) {{option.description}}
|
||||||
.ms-auto
|
.ms-auto
|
||||||
.no-wrap.badge.text-bg-secondary.ms-2(*ngIf='selectedIndex == i && canEditSelected()')
|
.no-wrap.badge.text-bg-secondary.text-muted.ms-2(*ngIf='selectedIndex == i && canEditSelected()')
|
||||||
span BACKSPACE
|
span Backspace
|
||||||
i.fas.fa-pencil.ms-1
|
i.fas.fa-pencil.ms-1
|
||||||
.no-wrap.badge.text-bg-secondary.ms-2(*ngIf='selectedIndex == i')
|
.no-wrap.badge.text-bg-secondary.text-muted.ms-2(*ngIf='selectedIndex == i')
|
||||||
span ENTER
|
span Enter
|
||||||
i.fas.fa-arrow-right.ms-1
|
i.fas.fa-arrow-right.ms-1
|
||||||
|
@@ -7,7 +7,7 @@ import { SelectorOption } from '../api/selector'
|
|||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'selector-modal',
|
selector: 'selector-modal',
|
||||||
templateUrl: './selectorModal.component.pug',
|
templateUrl:'./selectorModal.component.pug',
|
||||||
styleUrls: ['./selectorModal.component.scss'],
|
styleUrls: ['./selectorModal.component.scss'],
|
||||||
})
|
})
|
||||||
export class SelectorModalComponent<T> {
|
export class SelectorModalComponent<T> {
|
||||||
@@ -18,58 +18,45 @@ export class SelectorModalComponent<T> {
|
|||||||
@Input() selectedIndex = 0
|
@Input() selectedIndex = 0
|
||||||
hasGroups = false
|
hasGroups = false
|
||||||
@ViewChildren('item') itemChildren: QueryList<ElementRef>
|
@ViewChildren('item') itemChildren: QueryList<ElementRef>
|
||||||
private preventEdit: boolean
|
|
||||||
|
|
||||||
constructor (public modalInstance: NgbActiveModal) {
|
constructor (
|
||||||
this.preventEdit = false
|
public modalInstance: NgbActiveModal,
|
||||||
}
|
) { }
|
||||||
|
|
||||||
ngOnInit (): void {
|
ngOnInit (): void {
|
||||||
this.onFilterChange()
|
this.onFilterChange()
|
||||||
this.hasGroups = this.options.some(x => x.group)
|
this.hasGroups = this.options.some(x => x.group)
|
||||||
}
|
}
|
||||||
|
|
||||||
@HostListener('keydown', ['$event']) onKeyDown (event: KeyboardEvent): void {
|
@HostListener('keydown', ['$event']) onKeyUp (event: KeyboardEvent): void {
|
||||||
if (event.key === 'Escape') {
|
if (event.key === 'PageUp' || event.key === 'ArrowUp' && event.metaKey) {
|
||||||
|
this.selectedIndex -= 10
|
||||||
|
event.preventDefault()
|
||||||
|
} else if (event.key === 'PageDown' || event.key === 'ArrowDown' && event.metaKey) {
|
||||||
|
this.selectedIndex += 10
|
||||||
|
event.preventDefault()
|
||||||
|
} else if (event.key === 'ArrowUp') {
|
||||||
|
this.selectedIndex--
|
||||||
|
event.preventDefault()
|
||||||
|
} else if (event.key === 'ArrowDown') {
|
||||||
|
this.selectedIndex++
|
||||||
|
event.preventDefault()
|
||||||
|
} else if (event.key === 'Enter') {
|
||||||
|
this.selectOption(this.filteredOptions[this.selectedIndex])
|
||||||
|
} else if (event.key === 'Escape') {
|
||||||
this.close()
|
this.close()
|
||||||
} else if (this.filteredOptions.length > 0) {
|
|
||||||
if (event.key === 'PageUp' || event.key === 'ArrowUp' && event.metaKey) {
|
|
||||||
this.selectedIndex -= Math.min(10, Math.max(1, this.selectedIndex))
|
|
||||||
event.preventDefault()
|
|
||||||
} else if (event.key === 'PageDown' || event.key === 'ArrowDown' && event.metaKey) {
|
|
||||||
this.selectedIndex += Math.min(10, Math.max(1, this.filteredOptions.length - this.selectedIndex - 1))
|
|
||||||
event.preventDefault()
|
|
||||||
} else if (event.key === 'ArrowUp') {
|
|
||||||
this.selectedIndex--
|
|
||||||
event.preventDefault()
|
|
||||||
} else if (event.key === 'ArrowDown') {
|
|
||||||
this.selectedIndex++
|
|
||||||
event.preventDefault()
|
|
||||||
} else if (event.key === 'Enter') {
|
|
||||||
this.selectOption(this.filteredOptions[this.selectedIndex])
|
|
||||||
} else if (event.key === 'Backspace' && !this.preventEdit) {
|
|
||||||
if (this.canEditSelected()) {
|
|
||||||
event.preventDefault()
|
|
||||||
this.filter = this.filteredOptions[this.selectedIndex].freeInputEquivalent!
|
|
||||||
this.onFilterChange()
|
|
||||||
} else {
|
|
||||||
this.preventEdit = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.selectedIndex = (this.selectedIndex + this.filteredOptions.length) % this.filteredOptions.length
|
|
||||||
|
|
||||||
Array.from(this.itemChildren)[this.selectedIndex]?.nativeElement.scrollIntoView({
|
|
||||||
behavior: 'smooth',
|
|
||||||
block: 'nearest',
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
if (event.key === 'Backspace' && this.canEditSelected()) {
|
||||||
|
event.preventDefault()
|
||||||
@HostListener('keyup', ['$event']) onKeyUp (event: KeyboardEvent): void {
|
this.filter = this.filteredOptions[this.selectedIndex].freeInputEquivalent!
|
||||||
if (event.key === 'Backspace' && this.preventEdit) {
|
this.onFilterChange()
|
||||||
this.preventEdit = false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.selectedIndex = (this.selectedIndex + this.filteredOptions.length) % this.filteredOptions.length
|
||||||
|
Array.from(this.itemChildren)[this.selectedIndex]?.nativeElement.scrollIntoView({
|
||||||
|
behavior: 'smooth',
|
||||||
|
block: 'nearest',
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
onFilterChange (): void {
|
onFilterChange (): void {
|
||||||
@@ -89,11 +76,10 @@ export class SelectorModalComponent<T> {
|
|||||||
{ sort: true },
|
{ sort: true },
|
||||||
).search(f)
|
).search(f)
|
||||||
|
|
||||||
this.options.filter(x => x.freeInputPattern).sort(firstBy<SelectorOption<T>, number>(x => x.weight ?? 0)).forEach(freeOption => {
|
const freeOption = this.options.find(x => x.freeInputPattern)
|
||||||
if (!this.filteredOptions.includes(freeOption)) {
|
if (freeOption && !this.filteredOptions.includes(freeOption)) {
|
||||||
this.filteredOptions.push(freeOption)
|
this.filteredOptions.push(freeOption)
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
this.selectedIndex = Math.max(0, this.selectedIndex)
|
this.selectedIndex = Math.max(0, this.selectedIndex)
|
||||||
this.selectedIndex = Math.min(this.filteredOptions.length - 1, this.selectedIndex)
|
this.selectedIndex = Math.min(this.filteredOptions.length - 1, this.selectedIndex)
|
||||||
|
@@ -24,7 +24,3 @@
|
|||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::ng-deep .no-animations split-tab > .child {
|
|
||||||
transition: none;
|
|
||||||
}
|
|
||||||
|
@@ -275,7 +275,6 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
this.blurred$.subscribe(() => this.getAllTabs().forEach(x => x.emitBlurred()))
|
this.blurred$.subscribe(() => this.getAllTabs().forEach(x => x.emitBlurred()))
|
||||||
this.visibility$.subscribe(visibility => this.getAllTabs().forEach(x => x.emitVisibility(visibility)))
|
|
||||||
|
|
||||||
this.tabAdded$.subscribe(() => this.updateTitle())
|
this.tabAdded$.subscribe(() => this.updateTitle())
|
||||||
this.tabRemoved$.subscribe(() => this.updateTitle())
|
this.tabRemoved$.subscribe(() => this.updateTitle())
|
||||||
@@ -459,18 +458,12 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
|
|||||||
tab.destroy()
|
tab.destroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
let allTabs: BaseTabComponent[] = []
|
|
||||||
if (thing instanceof BaseTabComponent) {
|
if (thing instanceof BaseTabComponent) {
|
||||||
allTabs = [thing]
|
if (thing.parent instanceof SplitTabComponent) {
|
||||||
} else if (thing instanceof SplitContainer) {
|
thing.parent.removeTab(thing)
|
||||||
allTabs = thing.getAllTabs()
|
|
||||||
}
|
|
||||||
for (const tab of allTabs) {
|
|
||||||
if (tab.parent instanceof SplitTabComponent) {
|
|
||||||
tab.parent.removeTab(tab)
|
|
||||||
}
|
}
|
||||||
tab.removeFromContainer()
|
thing.removeFromContainer()
|
||||||
tab.parent = this
|
thing.parent = this
|
||||||
}
|
}
|
||||||
|
|
||||||
let target = relative ? this.getParentOf(relative) : null
|
let target = relative ? this.getParentOf(relative) : null
|
||||||
@@ -788,7 +781,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
|
|||||||
}
|
}
|
||||||
|
|
||||||
get icon (): string|null {
|
get icon (): string|null {
|
||||||
return this.getFocusedTab()?.icon ?? this.getAllTabs()[0]?.icon ?? null
|
return this.getFocusedTab()?.icon ?? null
|
||||||
}
|
}
|
||||||
|
|
||||||
set icon (icon: string|null) {
|
set icon (icon: string|null) {
|
||||||
@@ -798,7 +791,7 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
|
|||||||
}
|
}
|
||||||
|
|
||||||
get color (): string|null {
|
get color (): string|null {
|
||||||
return this.getFocusedTab()?.color ?? this.getAllTabs()[0]?.color ?? null
|
return this.getFocusedTab()?.color ?? null
|
||||||
}
|
}
|
||||||
|
|
||||||
set color (color: string|null) {
|
set color (color: string|null) {
|
||||||
|
@@ -1,5 +1,4 @@
|
|||||||
|
.mt-5
|
||||||
.mt-auto.mb-auto
|
|
||||||
.tabby-logo
|
.tabby-logo
|
||||||
h1.tabby-title Tabby
|
h1.tabby-title Tabby
|
||||||
sup α
|
sup α
|
||||||
|
@@ -7,7 +7,7 @@ import { Command, CommandLocation } from '../api/commands'
|
|||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'start-page',
|
selector: 'start-page',
|
||||||
templateUrl: './startPage.component.pug',
|
templateUrl:'./startPage.component.pug',
|
||||||
styleUrls: ['./startPage.component.scss'],
|
styleUrls: ['./startPage.component.scss'],
|
||||||
})
|
})
|
||||||
export class StartPageComponent {
|
export class StartPageComponent {
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
.colorbar([style.background-color]='tab.color', *ngIf='tab.color != null')
|
.colorbar([style.background-color]='tab.color', *ngIf='tab.color != null')
|
||||||
.progressbar([style.width]='progress + "%"', *ngIf='progress != null')
|
.progressbar([style.width]='progress + "%"', *ngIf='progress != null')
|
||||||
.activity-indicator(*ngIf='tab.activity$|async')
|
.activity-indicator(*ngIf='tab.activity$|async')
|
||||||
.current-tab-indicator
|
|
||||||
|
|
||||||
.index(*ngIf='!config.store.terminal.hideTabIndex && hostApp.platform === Platform.macOS', cdkDragHandle) {{index + 1}}
|
.index(*ngIf='!config.store.terminal.hideTabIndex && hostApp.platform === Platform.macOS', cdkDragHandle) {{index + 1}}
|
||||||
.index(*ngIf='!config.store.terminal.hideTabIndex && hostApp.platform !== Platform.macOS') {{index + 1}}
|
.index(*ngIf='!config.store.terminal.hideTabIndex && hostApp.platform !== Platform.macOS') {{index + 1}}
|
||||||
|
@@ -35,7 +35,7 @@ $tabs-height: 38px;
|
|||||||
-webkit-app-region: no-drag;
|
-webkit-app-region: no-drag;
|
||||||
cursor: -webkit-grab;
|
cursor: -webkit-grab;
|
||||||
|
|
||||||
width: calc(22px * var(--spaciness));
|
width: 22px;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
transition: 0.25s all;
|
transition: 0.25s all;
|
||||||
@@ -134,29 +134,15 @@ $tabs-height: 38px;
|
|||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.activity-indicator, .current-tab-indicator {
|
|
||||||
position: absolute;
|
|
||||||
height: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.active .activity-indicator {
|
&.active .activity-indicator {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.activity-indicator {
|
.activity-indicator {
|
||||||
bottom: 4px;
|
position: absolute;
|
||||||
left: 10px;
|
left: 10px;
|
||||||
right: 10px;
|
right: 10px;
|
||||||
}
|
bottom: 4px;
|
||||||
|
height: 2px;
|
||||||
&.active .current-tab-indicator {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-tab-indicator {
|
|
||||||
display: none;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -15,7 +15,7 @@ import { PlatformService } from '../api/platform'
|
|||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'tab-header',
|
selector: 'tab-header',
|
||||||
templateUrl: './tabHeader.component.pug',
|
templateUrl:'./tabHeader.component.pug',
|
||||||
styleUrls: ['./tabHeader.component.scss'],
|
styleUrls: ['./tabHeader.component.scss'],
|
||||||
})
|
})
|
||||||
export class TabHeaderComponent extends BaseComponent {
|
export class TabHeaderComponent extends BaseComponent {
|
||||||
|
@@ -1,2 +1,2 @@
|
|||||||
.title((dblclick)='hostWindow.toggleMaximize()') Tabby
|
.title((dblclick)='hostWindow.toggleMaximize()') Tabby
|
||||||
window-controls(*ngIf="!hideControls")
|
window-controls
|
||||||
|
@@ -1,14 +1,12 @@
|
|||||||
import { Component, Input } from '@angular/core'
|
import { Component } from '@angular/core'
|
||||||
import { HostWindowService } from '../api'
|
import { HostWindowService } from '../api'
|
||||||
|
|
||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'title-bar',
|
selector: 'title-bar',
|
||||||
templateUrl: './titleBar.component.pug',
|
templateUrl:'./titleBar.component.pug',
|
||||||
styleUrls: ['./titleBar.component.scss'],
|
styleUrls: ['./titleBar.component.scss'],
|
||||||
})
|
})
|
||||||
export class TitleBarComponent {
|
export class TitleBarComponent {
|
||||||
@Input() hideControls: boolean
|
|
||||||
|
|
||||||
constructor (public hostWindow: HostWindowService) { }
|
constructor (public hostWindow: HostWindowService) { }
|
||||||
}
|
}
|
||||||
|
@@ -6,7 +6,12 @@
|
|||||||
.icon(*ngIf='!isDownload(transfer)') !{require('../icons/upload.svg')}
|
.icon(*ngIf='!isDownload(transfer)') !{require('../icons/upload.svg')}
|
||||||
.main
|
.main
|
||||||
label.no-wrap([title]='transfer.getName()') {{transfer.getName()}}
|
label.no-wrap([title]='transfer.getName()') {{transfer.getName()}}
|
||||||
ngb-progressbar([type]='transfer.isComplete() ? "success" : transfer.isCancelled() ? "danger" : "info"', [value]='getProgress(transfer)')
|
.status(*ngIf='transfer.isComplete()')
|
||||||
|
ngb-progressbar(type='success', [value]='100')
|
||||||
|
.status(*ngIf='transfer.isCancelled()')
|
||||||
|
ngb-progressbar(type='danger', [value]='100')
|
||||||
|
.status(*ngIf='!transfer.isComplete() && !transfer.isCancelled()')
|
||||||
|
ngb-progressbar(type='info', [value]='getProgress(transfer)')
|
||||||
.metadata
|
.metadata
|
||||||
.size {{transfer.getSize()|filesize}}
|
.size {{transfer.getSize()|filesize}}
|
||||||
.speed(*ngIf='transfer.getSpeed()') {{transfer.getSpeed()|filesize}}/s
|
.speed(*ngIf='transfer.getSpeed()') {{transfer.getSpeed()|filesize}}/s
|
||||||
|
@@ -5,7 +5,7 @@ import { FileDownload, FileTransfer, PlatformService } from '../api/platform'
|
|||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'transfers-menu',
|
selector: 'transfers-menu',
|
||||||
templateUrl: './transfersMenu.component.pug',
|
templateUrl:'./transfersMenu.component.pug',
|
||||||
styleUrls: ['./transfersMenu.component.scss'],
|
styleUrls: ['./transfersMenu.component.scss'],
|
||||||
})
|
})
|
||||||
export class TransfersMenuComponent {
|
export class TransfersMenuComponent {
|
||||||
|
@@ -3,7 +3,7 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
|
|||||||
|
|
||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Component({
|
@Component({
|
||||||
templateUrl: './unlockVaultModal.component.pug',
|
templateUrl:'./unlockVaultModal.component.pug',
|
||||||
})
|
})
|
||||||
export class UnlockVaultModalComponent {
|
export class UnlockVaultModalComponent {
|
||||||
passphrase: string
|
passphrase: string
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
.container.mt-3.mb-3
|
.container.mt-5.mb-5
|
||||||
.mb-3
|
.mb-4
|
||||||
.tabby-logo
|
.tabby-logo
|
||||||
h1.tabby-title Tabby
|
h1.tabby-title Tabby
|
||||||
sup α
|
sup α
|
||||||
|
|
||||||
.text-center.mb-3(translate) Thank you for downloading Tabby!
|
.text-center.mb-5(translate) Thank you for downloading Tabby!
|
||||||
|
|
||||||
.form-line
|
.form-line
|
||||||
.header
|
.header
|
||||||
@@ -16,54 +16,13 @@
|
|||||||
*ngFor='let lang of allLanguages'
|
*ngFor='let lang of allLanguages'
|
||||||
) {{lang.name}}
|
) {{lang.name}}
|
||||||
|
|
||||||
.form-line
|
|
||||||
.header
|
|
||||||
.title(translate) Switch color scheme
|
|
||||||
|
|
||||||
.btn-group(role='group')
|
|
||||||
input.btn-check(
|
|
||||||
type='radio',
|
|
||||||
name='colorSchemeMode',
|
|
||||||
[(ngModel)]='config.store.appearance.colorSchemeMode',
|
|
||||||
(ngModelChange)='config.save()',
|
|
||||||
id='colorSchemeModeAuto',
|
|
||||||
[value]='"auto"'
|
|
||||||
)
|
|
||||||
label.btn.btn-secondary(
|
|
||||||
for='colorSchemeModeAuto'
|
|
||||||
)
|
|
||||||
span(translate) From system
|
|
||||||
input.btn-check(
|
|
||||||
type='radio',
|
|
||||||
name='colorSchemeMode',
|
|
||||||
[(ngModel)]='config.store.appearance.colorSchemeMode',
|
|
||||||
(ngModelChange)='config.save()',
|
|
||||||
id='colorSchemeModeDark',
|
|
||||||
[value]='"dark"'
|
|
||||||
)
|
|
||||||
label.btn.btn-secondary(
|
|
||||||
for='colorSchemeModeDark'
|
|
||||||
)
|
|
||||||
span(translate) Always dark
|
|
||||||
input.btn-check(
|
|
||||||
type='radio',
|
|
||||||
name='colorSchemeMode',
|
|
||||||
[(ngModel)]='config.store.appearance.colorSchemeMode',
|
|
||||||
(ngModelChange)='config.save()',
|
|
||||||
id='colorSchemeModeLight',
|
|
||||||
[value]='"light"'
|
|
||||||
)
|
|
||||||
label.btn.btn-secondary(
|
|
||||||
for='colorSchemeModeLight'
|
|
||||||
)
|
|
||||||
span(translate) Always light
|
|
||||||
|
|
||||||
.form-line
|
.form-line
|
||||||
.header
|
.header
|
||||||
.title(translate) Enable analytics
|
.title(translate) Enable analytics
|
||||||
.description(translate) Help track the number of Tabby installs across the world!
|
.description(translate) Help track the number of Tabby installs across the world!
|
||||||
toggle([(ngModel)]='config.store.enableAnalytics')
|
toggle([(ngModel)]='config.store.enableAnalytics')
|
||||||
|
|
||||||
|
|
||||||
.form-line
|
.form-line
|
||||||
.header
|
.header
|
||||||
.title(translate) Enable global hotkey (Ctrl-Space)
|
.title(translate) Enable global hotkey (Ctrl-Space)
|
||||||
|
@@ -6,8 +6,3 @@
|
|||||||
max-height: 100%;
|
max-height: 100%;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tabby-logo {
|
|
||||||
width: 60px;
|
|
||||||
height: 60px;
|
|
||||||
}
|
|
||||||
|
@@ -8,7 +8,7 @@ import { LocaleService } from '../services/locale.service'
|
|||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'welcome-page',
|
selector: 'welcome-page',
|
||||||
templateUrl: './welcomeTab.component.pug',
|
templateUrl:'./welcomeTab.component.pug',
|
||||||
styleUrls: ['./welcomeTab.component.scss'],
|
styleUrls: ['./welcomeTab.component.scss'],
|
||||||
})
|
})
|
||||||
export class WelcomeTabComponent extends BaseTabComponent {
|
export class WelcomeTabComponent extends BaseTabComponent {
|
||||||
|
@@ -1,18 +1,18 @@
|
|||||||
button.btn.btn-dark(
|
button.btn.btn-secondary.btn-minimize(
|
||||||
(click)='hostWindow.minimize()',
|
(click)='hostWindow.minimize()',
|
||||||
)
|
)
|
||||||
svg(version='1.1', width='10', height='10')
|
svg(version='1.1', width='10', height='10')
|
||||||
path(d='M 0,5 10,5 10,6 0,6 Z')
|
path(d='M 0,5 10,5 10,6 0,6 Z')
|
||||||
|
|
||||||
button.btn.btn-dark((click)='hostWindow.toggleMaximize()', *ngIf='!hostWindow.isMaximized()')
|
button.btn.btn-secondary.btn-maximize((click)='hostWindow.toggleMaximize()', *ngIf='!hostWindow.isMaximized()')
|
||||||
svg(version='1.1', width='10', height='10')
|
svg(version='1.1', width='10', height='10')
|
||||||
path(d='M 0,0 0,10 10,10 10,0 Z M 1,1 9,1 9,9 1,9 Z')
|
path(d='M 0,0 0,10 10,10 10,0 Z M 1,1 9,1 9,9 1,9 Z')
|
||||||
|
|
||||||
button.btn.btn-dark((click)='hostWindow.toggleMaximize()', *ngIf='hostWindow.isMaximized()')
|
button.btn.btn-secondary.btn-maximize((click)='hostWindow.toggleMaximize()', *ngIf='hostWindow.isMaximized()')
|
||||||
svg(version='1.1', width='10', height='10', viewBox='0 0 512 512')
|
svg(version='1.1', width='10', height='10', viewBox='0 0 512 512')
|
||||||
path(d="M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM32 144c0-8.8 7.2-16 16-16h320c8.8 0 16 7.2 16 16v320c0 8.8-7.2 16-16 16H48c-8.8 0-16-7.2-16-16v-80zm448 224c0 8.8-7.2 16-16 16h-48V144c0-26.5-21.5-48-48-48H128V48c0-8.8 7.2-16 16-16h320c8.8 0 16 7.2 16 16v320z")
|
path(d="M464 0H144c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v320c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h48c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM32 144c0-8.8 7.2-16 16-16h320c8.8 0 16 7.2 16 16v320c0 8.8-7.2 16-16 16H48c-8.8 0-16-7.2-16-16v-80zm448 224c0 8.8-7.2 16-16 16h-48V144c0-26.5-21.5-48-48-48H128V48c0-8.8 7.2-16 16-16h320c8.8 0 16 7.2 16 16v320z")
|
||||||
|
|
||||||
button.btn.btn-danger(
|
button.btn.btn-secondary.btn-close(
|
||||||
(click)='closeWindow()'
|
(click)='closeWindow()'
|
||||||
)
|
)
|
||||||
svg(version='1.1', width='10', height='10')
|
svg(version='1.1', width='10', height='10')
|
||||||
|
@@ -6,7 +6,7 @@ import { AppService } from '../services/app.service'
|
|||||||
/** @hidden */
|
/** @hidden */
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'window-controls',
|
selector: 'window-controls',
|
||||||
templateUrl: './windowControls.component.pug',
|
templateUrl:'./windowControls.component.pug',
|
||||||
styleUrls: ['./windowControls.component.scss'],
|
styleUrls: ['./windowControls.component.scss'],
|
||||||
})
|
})
|
||||||
export class WindowControlsComponent {
|
export class WindowControlsComponent {
|
||||||
|
@@ -9,6 +9,5 @@ export class CoreConfigProvider extends ConfigProvider {
|
|||||||
[Platform.Linux]: require('./configDefaults.linux.yaml').default,
|
[Platform.Linux]: require('./configDefaults.linux.yaml').default,
|
||||||
[Platform.Web]: require('./configDefaults.web.yaml').default,
|
[Platform.Web]: require('./configDefaults.web.yaml').default,
|
||||||
}
|
}
|
||||||
|
|
||||||
defaults = require('./configDefaults.yaml').default
|
defaults = require('./configDefaults.yaml').default
|
||||||
}
|
}
|
||||||
|
@@ -22,8 +22,6 @@ hotkeys:
|
|||||||
- 'Ctrl-Shift'
|
- 'Ctrl-Shift'
|
||||||
duplicate-tab: []
|
duplicate-tab: []
|
||||||
restart-tab: []
|
restart-tab: []
|
||||||
reconnect-tab: []
|
|
||||||
disconnect-tab: []
|
|
||||||
explode-tab:
|
explode-tab:
|
||||||
- 'Ctrl-Shift-.'
|
- 'Ctrl-Shift-.'
|
||||||
combine-tabs:
|
combine-tabs:
|
||||||
|
@@ -39,8 +39,6 @@ hotkeys:
|
|||||||
tab-10: []
|
tab-10: []
|
||||||
duplicate-tab: []
|
duplicate-tab: []
|
||||||
restart-tab: []
|
restart-tab: []
|
||||||
reconnect-tab: []
|
|
||||||
disconnect-tab: []
|
|
||||||
explode-tab:
|
explode-tab:
|
||||||
- '⌘-Shift-.'
|
- '⌘-Shift-.'
|
||||||
combine-tabs:
|
combine-tabs:
|
||||||
@@ -96,3 +94,5 @@ hotkeys:
|
|||||||
- '⌘-Shift-E'
|
- '⌘-Shift-E'
|
||||||
command-selector:
|
command-selector:
|
||||||
- '⌘-Shift-P'
|
- '⌘-Shift-P'
|
||||||
|
appearance:
|
||||||
|
vibrancy: true
|
||||||
|
@@ -23,8 +23,6 @@ hotkeys:
|
|||||||
- 'Ctrl-Shift'
|
- 'Ctrl-Shift'
|
||||||
duplicate-tab: []
|
duplicate-tab: []
|
||||||
restart-tab: []
|
restart-tab: []
|
||||||
reconnect-tab: []
|
|
||||||
disconnect-tab: []
|
|
||||||
explode-tab:
|
explode-tab:
|
||||||
- 'Ctrl-Shift-.'
|
- 'Ctrl-Shift-.'
|
||||||
combine-tabs:
|
combine-tabs:
|
||||||
|
@@ -11,15 +11,13 @@ appearance:
|
|||||||
tabsLocation: top
|
tabsLocation: top
|
||||||
tabsInFullscreen: false
|
tabsInFullscreen: false
|
||||||
cycleTabs: true
|
cycleTabs: true
|
||||||
theme: Follow the color scheme
|
theme: Standard
|
||||||
frame: thin
|
frame: thin
|
||||||
css: '/* * { color: blue !important; } */'
|
css: '/* * { color: blue !important; } */'
|
||||||
opacity: 1.0
|
opacity: 1.0
|
||||||
vibrancy: false
|
vibrancy: false
|
||||||
vibrancyType: 'blur'
|
vibrancyType: 'blur'
|
||||||
lastTabClosesWindow: false
|
lastTabClosesWindow: false
|
||||||
spaciness: 1
|
|
||||||
colorSchemeMode: 'dark'
|
|
||||||
terminal:
|
terminal:
|
||||||
showBuiltinProfiles: true
|
showBuiltinProfiles: true
|
||||||
showRecentProfiles: 3
|
showRecentProfiles: 3
|
||||||
@@ -32,7 +30,6 @@ hotkeys:
|
|||||||
profile-selectors:
|
profile-selectors:
|
||||||
__nonStructural: true
|
__nonStructural: true
|
||||||
profiles: []
|
profiles: []
|
||||||
groups: []
|
|
||||||
profileDefaults:
|
profileDefaults:
|
||||||
__nonStructural: true
|
__nonStructural: true
|
||||||
ssh:
|
ssh:
|
||||||
@@ -48,12 +45,8 @@ vault: null
|
|||||||
encrypted: false
|
encrypted: false
|
||||||
enableExperimentalFeatures: false
|
enableExperimentalFeatures: false
|
||||||
pluginBlacklist: []
|
pluginBlacklist: []
|
||||||
commandBlacklist: []
|
|
||||||
providerBlacklist: []
|
|
||||||
profileBlacklist: []
|
|
||||||
hacks:
|
hacks:
|
||||||
disableGPU: false
|
disableGPU: false
|
||||||
disableVibrancyWhileDragging: false
|
disableVibrancyWhileDragging: false
|
||||||
enableFluentBackground: false
|
enableFluentBackground: false
|
||||||
language: null
|
language: null
|
||||||
defaultQuickConnectProvider: "ssh"
|
|
||||||
|
@@ -19,7 +19,6 @@ export class CdkAutoDropGroup implements OnInit {
|
|||||||
) { }
|
) { }
|
||||||
|
|
||||||
ngOnInit (): void {
|
ngOnInit (): void {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
||||||
CdkAutoDropGroup.groups[this.groupName] ??= new FakeDropGroup()
|
CdkAutoDropGroup.groups[this.groupName] ??= new FakeDropGroup()
|
||||||
CdkAutoDropGroup.groups[this.groupName]._items.add(this.cdkDropList)
|
CdkAutoDropGroup.groups[this.groupName]._items.add(this.cdkDropList)
|
||||||
this.cdkDropList['_group'] = CdkAutoDropGroup.groups[this.groupName]
|
this.cdkDropList['_group'] = CdkAutoDropGroup.groups[this.groupName]
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user