Compare commits

...

142 Commits

Author SHA1 Message Date
dependabot[bot]
f5d485e849 Bump minimatch from 3.0.4 to 3.1.2 in /web
Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.0.4 to 3.1.2.
- [Release notes](https://github.com/isaacs/minimatch/releases)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.0.4...v3.1.2)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-28 15:10:38 +00:00
Eugene Pankov
fbd09f4312 lint 2022-12-28 16:09:23 +01:00
Eugene Pankov
145b6447b9 debounce typing in search field - fixes #7579 2022-12-28 16:08:35 +01:00
Eugene Pankov
a4c8aa40b5 bumped xterm 2022-12-28 16:07:37 +01:00
Eugene Pankov
0a15b5e9d5 updated clink - fixes #7615 2022-12-26 20:55:51 +01:00
Benjamin Brandmeier
9544791c6c barrel export + deep equals 2022-12-19 01:07:20 +01:00
Benjamin Brandmeier
72bc58332d Mark duplicate hotkeys 2022-12-19 01:07:20 +01:00
Eugene Pankov
bc243a2741 added a shameless plug 2022-12-14 22:41:52 +01:00
Eugene Pankov
8d52d2ce12 updated contributors 2022-12-13 11:10:11 +01:00
allcontributors[bot]
ff4a39220c update README.id-ID.md [skip ci] 2022-12-12 20:14:28 +01:00
allcontributors[bot]
a25b31099f update .all-contributorsrc [skip ci] 2022-12-12 20:14:28 +01:00
allcontributors[bot]
17420588b1 update README.es-ES.md [skip ci] 2022-12-12 20:14:28 +01:00
allcontributors[bot]
92cba1944a update README.ja-JP.md [skip ci] 2022-12-12 20:14:28 +01:00
allcontributors[bot]
48046ac0f2 update README.de-DE.md [skip ci] 2022-12-12 20:14:28 +01:00
allcontributors[bot]
95282d811f update README.it-IT.md [skip ci] 2022-12-12 20:14:28 +01:00
allcontributors[bot]
2661cd216a update README.ko-KR.md [skip ci] 2022-12-12 20:14:28 +01:00
allcontributors[bot]
975e2618a2 update README.ru-RU.md [skip ci] 2022-12-12 20:14:28 +01:00
allcontributors[bot]
c8983c39c8 update README.zh-CN.md [skip ci] 2022-12-12 20:14:28 +01:00
allcontributors[bot]
35b145c3a5 update README.md [skip ci] 2022-12-12 20:14:28 +01:00
Wellinton Kricowski
f8431bac32 + README pt-BR 2022-12-12 18:40:51 +01:00
Wellinton Kricowski
e1b2227c86 Add README.pt-BR and updated the languages available 2022-12-12 18:40:51 +01:00
Muhammad Wahyudi
ab4b70e391 fix some typo README.id-ID.md 2022-12-10 10:26:44 +01:00
Eugene Pankov
f444aad568 lint 2022-12-05 15:20:29 +01:00
Eugene Pankov
73e25ed099 lint 2022-12-05 14:52:23 +01:00
Eugene Pankov
2e9344f8b7 #7588 - serialized command execution 2022-12-05 12:16:42 +01:00
Eugene Pankov
98476df882 bumped eslint 2022-12-05 12:16:27 +01:00
Eugene Pankov
b0600b10cc support for providing commands as toolbar buttons 2022-12-05 12:03:08 +01:00
Eugene Pankov
a1825bbbe6 #7588 2022-12-04 19:26:02 +01:00
Eugene Pankov
d736bdace4 fixed #280 - added option to hide tabs in fullscreen mode 2022-12-03 13:15:05 +01:00
Eugene Pankov
78b17d3980 fixed #7522, fixed #7577 - sftp: keep permissions when editing file locally 2022-12-03 12:56:55 +01:00
Eugene Pankov
fa1649de83 fixed #7588 - prevent selector from opening when one is already open 2022-12-03 12:27:58 +01:00
allcontributors[bot]
7b2bc5e48b update .all-contributorsrc [skip ci] 2022-12-03 12:19:05 +01:00
allcontributors[bot]
75b00f099d update README.id-ID.md [skip ci] 2022-12-03 12:19:05 +01:00
allcontributors[bot]
42d256ba72 update README.es-ES.md [skip ci] 2022-12-03 12:19:05 +01:00
allcontributors[bot]
17df7da145 update README.ja-JP.md [skip ci] 2022-12-03 12:19:05 +01:00
allcontributors[bot]
dd73c3112e update README.de-DE.md [skip ci] 2022-12-03 12:19:05 +01:00
allcontributors[bot]
03fb94c586 update README.it-IT.md [skip ci] 2022-12-03 12:19:05 +01:00
allcontributors[bot]
33f1185561 update README.ko-KR.md [skip ci] 2022-12-03 12:19:05 +01:00
allcontributors[bot]
54f1610ac5 update README.ru-RU.md [skip ci] 2022-12-03 12:19:05 +01:00
allcontributors[bot]
cec3d2c726 update README.zh-CN.md [skip ci] 2022-12-03 12:19:05 +01:00
allcontributors[bot]
4b21fd39a6 update README.md [skip ci] 2022-12-03 12:19:05 +01:00
Dani Nugraha
2d3234fe1d fixed #6741
changed spanner to emit event to splitTab and tell its mousedown state
disabled tab focus on hover when spanner is being dragged by the mouse
2022-12-03 12:07:20 +01:00
allcontributors[bot]
49ccda70ea update README.id-ID.md [skip ci] 2022-12-02 17:49:23 +01:00
allcontributors[bot]
98306a39fb update README.ja-JP.md [skip ci] 2022-12-02 17:49:23 +01:00
allcontributors[bot]
3498e9953d update .all-contributorsrc [skip ci] 2022-12-02 17:49:23 +01:00
allcontributors[bot]
b45a2c89e0 update README.es-ES.md [skip ci] 2022-12-02 17:49:23 +01:00
allcontributors[bot]
74936b77c3 update README.de-DE.md [skip ci] 2022-12-02 17:49:23 +01:00
allcontributors[bot]
272f002848 update README.it-IT.md [skip ci] 2022-12-02 17:49:23 +01:00
allcontributors[bot]
0ca713d54c update README.ko-KR.md [skip ci] 2022-12-02 17:49:23 +01:00
allcontributors[bot]
dc1566efe2 update README.ru-RU.md [skip ci] 2022-12-02 17:49:23 +01:00
allcontributors[bot]
33e010b9b5 update README.zh-CN.md [skip ci] 2022-12-02 17:49:23 +01:00
allcontributors[bot]
75da109318 update README.md [skip ci] 2022-12-02 17:49:23 +01:00
allcontributors[bot]
c68c4694ff update README.es-ES.md [skip ci] 2022-11-28 10:02:27 +01:00
allcontributors[bot]
33a29ab40b update .all-contributorsrc [skip ci] 2022-11-28 10:02:27 +01:00
allcontributors[bot]
2e88bef0c8 update README.ja-JP.md [skip ci] 2022-11-28 10:02:27 +01:00
allcontributors[bot]
991e5ff860 update README.id-ID.md [skip ci] 2022-11-28 10:02:27 +01:00
allcontributors[bot]
46155b47f6 update README.de-DE.md [skip ci] 2022-11-28 10:02:27 +01:00
allcontributors[bot]
cef17570bc update README.it-IT.md [skip ci] 2022-11-28 10:02:27 +01:00
allcontributors[bot]
5c4b327df3 update README.ko-KR.md [skip ci] 2022-11-28 10:02:27 +01:00
allcontributors[bot]
43f7dbc97b update README.ru-RU.md [skip ci] 2022-11-28 10:02:27 +01:00
allcontributors[bot]
8a3387ecf3 update README.zh-CN.md [skip ci] 2022-11-28 10:02:27 +01:00
allcontributors[bot]
6456b3fb0a update README.md [skip ci] 2022-11-28 10:02:27 +01:00
Benjamin Brandmeier
3d2cd6d632 fix icon visibility for vertical tabs 2022-11-28 09:32:10 +01:00
Eugene Pankov
0c2f824cf4 disable dynamic tab titles for SSH by default 2022-11-24 13:38:30 +01:00
allcontributors[bot]
8c7850e4d5 update README.es-ES.md [skip ci] 2022-11-23 09:29:35 +01:00
allcontributors[bot]
341d85b972 update .all-contributorsrc [skip ci] 2022-11-23 09:29:35 +01:00
allcontributors[bot]
5364ba05ec update README.ja-JP.md [skip ci] 2022-11-23 09:29:35 +01:00
allcontributors[bot]
ea4c8f0c25 update README.id-ID.md [skip ci] 2022-11-23 09:29:35 +01:00
allcontributors[bot]
779912a3d3 update README.de-DE.md [skip ci] 2022-11-23 09:29:35 +01:00
allcontributors[bot]
c141395561 update README.it-IT.md [skip ci] 2022-11-23 09:29:35 +01:00
allcontributors[bot]
d0ff989d74 update README.ko-KR.md [skip ci] 2022-11-23 09:29:35 +01:00
allcontributors[bot]
ee32d51170 update README.ru-RU.md [skip ci] 2022-11-23 09:29:35 +01:00
allcontributors[bot]
ffa65beaf9 update README.zh-CN.md [skip ci] 2022-11-23 09:29:35 +01:00
allcontributors[bot]
384aa8fb77 update README.md [skip ci] 2022-11-23 09:29:35 +01:00
“allan.mangan”
9238cac162 added Jazz color scheme 2022-11-23 09:14:12 +01:00
Eugene Pankov
47006dd38d updated contributors 2022-11-23 00:21:39 +01:00
dependabot[bot]
6376a341f0 Bump shell-quote from 1.7.3 to 1.7.4
Bumps [shell-quote](https://github.com/ljharb/shell-quote) from 1.7.3 to 1.7.4.
- [Release notes](https://github.com/ljharb/shell-quote/releases)
- [Changelog](https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/shell-quote/compare/1.7.3...v1.7.4)

---
updated-dependencies:
- dependency-name: shell-quote
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-21 12:35:32 +01:00
dependabot[bot]
fcc0e7909d Bump electron-notarize from 1.2.1 to 1.2.2
Bumps [electron-notarize](https://github.com/electron/notarize) from 1.2.1 to 1.2.2.
- [Release notes](https://github.com/electron/notarize/releases)
- [Changelog](https://github.com/electron/notarize/blob/main/.releaserc.json)
- [Commits](https://github.com/electron/notarize/compare/v1.2.1...v1.2.2)

---
updated-dependencies:
- dependency-name: electron-notarize
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-21 12:35:17 +01:00
dependabot[bot]
1324a13741 Bump patch-package from 6.4.7 to 6.5.0 in /app
Bumps [patch-package](https://github.com/ds300/patch-package) from 6.4.7 to 6.5.0.
- [Release notes](https://github.com/ds300/patch-package/releases)
- [Changelog](https://github.com/ds300/patch-package/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ds300/patch-package/compare/v6.4.7...v6.5.0)

---
updated-dependencies:
- dependency-name: patch-package
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-21 12:35:09 +01:00
dependabot[bot]
c311964e35 Bump electron from 21.0.1 to 21.3.0
Bumps [electron](https://github.com/electron/electron) from 21.0.1 to 21.3.0.
- [Release notes](https://github.com/electron/electron/releases)
- [Changelog](https://github.com/electron/electron/blob/main/docs/breaking-changes.md)
- [Commits](https://github.com/electron/electron/compare/v21.0.1...v21.3.0)

---
updated-dependencies:
- dependency-name: electron
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-21 12:34:58 +01:00
dependabot[bot]
212ee6717c Bump serialport from 10.4.0 to 10.5.0 in /app
Bumps [serialport](https://github.com/serialport/node-serialport) from 10.4.0 to 10.5.0.
- [Release notes](https://github.com/serialport/node-serialport/releases)
- [Changelog](https://github.com/serialport/node-serialport/blob/master/CHANGELOG.md)
- [Commits](https://github.com/serialport/node-serialport/compare/v10.4.0...v10.5.0)

---
updated-dependencies:
- dependency-name: serialport
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-21 12:34:45 +01:00
Eugene Pankov
72d60bafad updated locales 2022-11-20 20:28:58 +01:00
Eugene Pankov
8f4392515f keep xterm sourcemaps 2022-11-20 20:23:31 +01:00
Eugene Pankov
74026ff59c hide fluent background option by default 2022-11-20 20:23:24 +01:00
Eugene Pankov
875e693d63 improve tab rearranging UI 2022-11-20 20:22:44 +01:00
Eugene Pankov
9c89bab256 fixed zmodem errors - fixes #6677, fixes #5845, fixes #5243, fixes #5132, fixes #5021, fixes #7511, fixes #7053, fixes #6917, fixes #6639, fixes #6259, fixes #6182, fixes #6122, fixes #5845, fixes #5737, fixes #5701, fixes #5609, fixes #5311, fixes #5243, fixes #5231, fixes #5132 2022-11-20 19:25:48 +01:00
Eugene Pankov
0f0f61f432 fixed #6263, fixed #7460 - ssh: handle MaxSessions 2022-11-17 20:26:17 +01:00
Eugene Pankov
c7eb19386d context menu fixes 2022-11-17 19:39:24 +01:00
Eugene Pankov
99e3c6e20e updated locales 2022-11-17 10:57:19 +01:00
Eugene Pankov
d26ce6c316 fixed #7481 - broadcast not available on SSH tabs 2022-11-17 10:56:22 +01:00
allcontributors[bot]
ac9595b06a update README.ja-JP.md [skip ci] 2022-11-17 10:53:43 +01:00
allcontributors[bot]
ba69e703a6 update .all-contributorsrc [skip ci] 2022-11-17 10:53:43 +01:00
allcontributors[bot]
6ff1b5b988 update README.es-ES.md [skip ci] 2022-11-17 10:53:43 +01:00
allcontributors[bot]
b5c1062981 update README.id-ID.md [skip ci] 2022-11-17 10:53:43 +01:00
allcontributors[bot]
4005880716 update README.de-DE.md [skip ci] 2022-11-17 10:53:43 +01:00
allcontributors[bot]
40cd6fd126 update README.it-IT.md [skip ci] 2022-11-17 10:53:43 +01:00
allcontributors[bot]
fe1fec9fee update README.ko-KR.md [skip ci] 2022-11-17 10:53:43 +01:00
allcontributors[bot]
5a715b59ae update README.ru-RU.md [skip ci] 2022-11-17 10:53:43 +01:00
allcontributors[bot]
fe0e8dfff1 update README.zh-CN.md [skip ci] 2022-11-17 10:53:43 +01:00
allcontributors[bot]
8726cc4996 update README.md [skip ci] 2022-11-17 10:53:43 +01:00
Hendra Juli
caa1644220 refactor indonesian translation 2022-11-17 10:35:01 +01:00
allcontributors[bot]
79e5c475f2 update README.ja-JP.md [skip ci] 2022-11-16 17:35:38 +01:00
allcontributors[bot]
c91cbefecc update .all-contributorsrc [skip ci] 2022-11-16 17:35:38 +01:00
allcontributors[bot]
135775af66 update README.es-ES.md [skip ci] 2022-11-16 17:35:38 +01:00
allcontributors[bot]
f59af7c47e update README.id-ID.md [skip ci] 2022-11-16 17:35:38 +01:00
allcontributors[bot]
86f0c6c56c update README.de-DE.md [skip ci] 2022-11-16 17:35:38 +01:00
allcontributors[bot]
7329d48542 update README.it-IT.md [skip ci] 2022-11-16 17:35:38 +01:00
allcontributors[bot]
b0a3fbe68a update README.ko-KR.md [skip ci] 2022-11-16 17:35:38 +01:00
allcontributors[bot]
35a8dee62a update README.ru-RU.md [skip ci] 2022-11-16 17:35:38 +01:00
allcontributors[bot]
851ba4ecdb update README.zh-CN.md [skip ci] 2022-11-16 17:35:38 +01:00
allcontributors[bot]
3f337cb7d9 update README.md [skip ci] 2022-11-16 17:35:38 +01:00
Evin Watson
44eacce5a8 Updated dependency install instructions 2022-11-16 17:25:50 +01:00
Eugene Pankov
64d261e579 added Swedish for real now 2022-11-09 23:26:28 +01:00
Eugene Pankov
d038ac6706 updated locales, added Swedish - fixed #7464 2022-11-09 21:07:05 +01:00
Eugene Pankov
1b1445bf20 new tabby-web release 2022-11-07 22:57:40 +01:00
Eugene Pankov
4e0cc12f83 updated keygen logo 2022-11-07 22:57:35 +01:00
Eugene Pankov
a4134252eb updated contributors 2022-11-06 19:25:33 +01:00
Eugene Pankov
1eebe42931 updated locales, added Afrikaans 2022-11-03 20:35:10 +01:00
dependabot[bot]
f73328d16b Bump @fortawesome/fontawesome-free from 6.1.1 to 6.2.0
Bumps [@fortawesome/fontawesome-free](https://github.com/FortAwesome/Font-Awesome) from 6.1.1 to 6.2.0.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/6.x/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/compare/6.1.1...6.2.0)

---
updated-dependencies:
- dependency-name: "@fortawesome/fontawesome-free"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-02 09:39:21 +01:00
dependabot[bot]
b6af78fd2e Bump actions/setup-node from 3.5.0 to 3.5.1
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 3.5.0 to 3.5.1.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v3.5.0...v3.5.1)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-02 09:35:53 +01:00
dependabot[bot]
5299550c98 Bump tomsun28/issues-translate-action from 2.6 to 2.7
Bumps [tomsun28/issues-translate-action](https://github.com/tomsun28/issues-translate-action) from 2.6 to 2.7.
- [Release notes](https://github.com/tomsun28/issues-translate-action/releases)
- [Commits](https://github.com/tomsun28/issues-translate-action/compare/v2.6...v2.7)

---
updated-dependencies:
- dependency-name: tomsun28/issues-translate-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-02 09:35:12 +01:00
Eugene Pankov
54820734e0 Merge branch 'master' of github.com:Eugeny/tabby 2022-11-01 23:14:05 +01:00
Eugene Pankov
1f5ed218f9 fixed #5193 - all-tabs broadcast mode 2022-11-01 23:14:02 +01:00
Artur
688b9de26c use winSCP.com utility to convert private key to ppk to launch winSCP
drop node-forge dependency
2022-11-01 22:35:21 +01:00
Eugene Pankov
8b408bdcbc bumped electron 2022-11-01 17:13:39 +01:00
Eugene Pankov
2fcad26a4e preload sixel worker code 2022-11-01 17:13:33 +01:00
Eugene Pankov
f094db9de2 fixed #6164 - added command palette 2022-11-01 17:13:23 +01:00
Eugene Pankov
856c042bb8 fixed #7081 - laggy tab open/close animation 2022-11-01 16:38:17 +01:00
Eugene Pankov
8d10bc1a78 updated contributors 2022-10-31 09:30:12 +01:00
Eugene Pankov
83d8920883 build fixes 2022-10-28 19:58:50 +02:00
Eugene Pankov
0a1a39ebf4 bumped electron-builder 2022-10-28 19:58:49 +02:00
allcontributors[bot]
88b24e750e update README.ja-JP.md [skip ci] 2022-10-26 10:58:46 +02:00
allcontributors[bot]
d2d12d9380 update README.es-ES.md [skip ci] 2022-10-26 10:58:46 +02:00
allcontributors[bot]
fb873f9afa update .all-contributorsrc [skip ci] 2022-10-26 10:58:46 +02:00
allcontributors[bot]
ced028f7b2 update README.id-ID.md [skip ci] 2022-10-26 10:58:46 +02:00
allcontributors[bot]
23accfadd4 update README.de-DE.md [skip ci] 2022-10-26 10:58:46 +02:00
allcontributors[bot]
d550aeda89 update README.it-IT.md [skip ci] 2022-10-26 10:58:46 +02:00
allcontributors[bot]
29afcf95b0 update README.ko-KR.md [skip ci] 2022-10-26 10:58:46 +02:00
allcontributors[bot]
aa7bc472ae update README.ru-RU.md [skip ci] 2022-10-26 10:58:46 +02:00
allcontributors[bot]
9c8d5360de update README.zh-CN.md [skip ci] 2022-10-26 10:58:46 +02:00
allcontributors[bot]
bb316db50b update README.md [skip ci] 2022-10-26 10:58:46 +02:00
Andrii Zhovtiak
4ea3e88a8e Fix for audio bell.ogg #5931 2022-10-26 10:45:53 +02:00
173 changed files with 12775 additions and 5235 deletions

View File

@@ -8,6 +8,7 @@
"README.de-DE.md",
"README.id-ID.md",
"README.ja-JP.md",
"README.pt-BR.md",
"README.es-ES.md"
],
"imageSize": 100,
@@ -975,6 +976,97 @@
"contributions": [
"doc"
]
},
{
"login": "zhoro",
"name": "Andrii Zhovtiak",
"avatar_url": "https://avatars.githubusercontent.com/u/1105687?v=4",
"profile": "https://github.com/zhoro",
"contributions": [
"code"
]
},
{
"login": "JohnMasoner",
"name": "Mason Ma",
"avatar_url": "https://avatars.githubusercontent.com/u/42313377?v=4",
"profile": "https://github.com/JohnMasoner",
"contributions": [
"financial"
]
},
{
"login": "ntimo",
"name": "Timo",
"avatar_url": "https://avatars.githubusercontent.com/u/6145026?v=4",
"profile": "https://github.com/ntimo",
"contributions": [
"financial"
]
},
{
"login": "EvinRWatson",
"name": "Evin Watson",
"avatar_url": "https://avatars.githubusercontent.com/u/24227251?v=4",
"profile": "https://www.linkedin.com/in/evinwatson/",
"contributions": [
"doc"
]
},
{
"login": "deulizealand",
"name": "Hendra Juli",
"avatar_url": "https://avatars.githubusercontent.com/u/15981200?v=4",
"profile": "https://t.me/hendrjl",
"contributions": [
"doc"
]
},
{
"login": "wkricowski",
"name": "Wellinton Kricowski",
"avatar_url": "https://avatars.githubusercontent.com/u/36803521?v=4",
"profile": "https://github.com/wkricowski",
"contributions": [
"financial",
"doc"
]
},
{
"login": "almzau",
"name": "Allan",
"avatar_url": "https://avatars.githubusercontent.com/u/29115846?v=4",
"profile": "https://github.com/almzau",
"contributions": [
"design"
]
},
{
"login": "BenjaminBrandmeier",
"name": "Benjamin Brandmeier",
"avatar_url": "https://avatars.githubusercontent.com/u/17959794?v=4",
"profile": "https://oidamo.de",
"contributions": [
"code"
]
},
{
"login": "patric1025",
"name": "patric1025",
"avatar_url": "https://avatars.githubusercontent.com/u/65654040?v=4",
"profile": "https://github.com/patric1025",
"contributions": [
"translation"
]
},
{
"login": "hermitpopcorn",
"name": "hermitpopcorn",
"avatar_url": "https://avatars.githubusercontent.com/u/16042129?v=4",
"profile": "https://github.com/hermitpopcorn",
"contributions": [
"code"
]
}
],
"contributorsPerLine": 7,

View File

@@ -5,8 +5,15 @@ parserOptions:
- '*/tsconfig.typings.json'
extends:
- 'plugin:@typescript-eslint/all'
- plugin:import/recommended
- plugin:import/typescript
plugins:
- '@typescript-eslint'
- 'import'
settings:
import/resolver:
typescript: true
node: true
env:
browser: true
es6: true
@@ -126,3 +133,12 @@ rules:
- allowAliases: in-unions-and-intersections
allowLiterals: always
allowCallbacks: always
'@typescript-eslint/sort-type-constituents': off
'@typescript-eslint/parameter-properties':
- error
- prefer: parameter-property
'import/no-named-as-default-member': off
'@typescript-eslint/consistent-type-exports': off
'@typescript-eslint/consistent-generic-constructors': off
'keyword-spacing': off
'@typescript-eslint/keyword-spacing': off

View File

@@ -11,7 +11,7 @@ jobs:
fetch-depth: 0
- name: Installing Node
uses: actions/setup-node@v3.5.0
uses: actions/setup-node@v3.5.1
with:
node-version: 16
@@ -47,7 +47,7 @@ jobs:
fetch-depth: 0
- name: Installing Node
uses: actions/setup-node@v3.5.0
uses: actions/setup-node@v3.5.1
with:
node-version: 16
@@ -74,6 +74,9 @@ jobs:
- run: sed -i '' 's/updateInfo = await/\/\/updateInfo = await/g' node_modules/app-builder-lib/out/targets/ArchiveTarget.js
# Work around electron-builder beta bug
- run: ln -s ../../node_modules/electron app/node_modules
- name: Build and sign packages
run: scripts/build-macos.js
if: github.repository == 'Eugeny/tabby' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags'))
@@ -141,7 +144,7 @@ jobs:
if: matrix.build-arch != 'x64'
- name: Install Node (x64)
uses: actions/setup-node@v3.5.0
uses: actions/setup-node@v3.5.1
with:
node-version: 16
if: matrix.build-arch == 'x64'
@@ -290,7 +293,7 @@ jobs:
fetch-depth: 0
- name: Installing Node
uses: actions/setup-node@v3.5.0
uses: actions/setup-node@v3.5.1
with:
node-version: 16

View File

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

View File

@@ -9,7 +9,7 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: tomsun28/issues-translate-action@v2.6
- uses: tomsun28/issues-translate-action@v2.7
with:
IS_MODIFY_TITLE: true
CUSTOM_BOT_NOTE: The translator bot has detected that this issue body's language is not English, and has translated it automatically.

1
.gitignore vendored
View File

@@ -27,6 +27,7 @@ yarn-error.log
docs/api
.travis.ssh.key
*.code-workspace
.idea/
.electron-symbols
sentry.properties

View File

@@ -4,12 +4,16 @@ Tabby is an Electron app, with the frontend written in Typescript with the help
# Getting started
First of all, clone this repository. You'll also need Node.js 15 or newer and Yarn.
First of all, clone this repository.
First, install the dependencies:
# Install Dependencies
- [Node.js](https://nodejs.org/en/download/) **version 15 or newer*
- [Yarn](https://yarnpkg.com/)
First, from within the `tabby` directory install the dependencies via yarn:
```
# macOS:
# macOS & Windows:
yarn
```
@@ -21,18 +25,13 @@ sudo apt install libfontconfig-dev libsecret-1-dev libarchive-tools libnss3 liba
yarn
```
```
# Windows:
yarn
```
Now, check if your build is working:
Build Tabby:
```
yarn run build
```
Start Tabby with
Start Tabby
```
yarn start

View File

@@ -20,7 +20,7 @@
<br/>
<p align="center">
Diese README ist auch verfügbar in: <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.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a>
Diese README ist auch verfügbar in: <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.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a> · <a href="./README.pt-BR.md">:br: Português</a>
</p>
----
@@ -50,21 +50,21 @@ Diese README ist auch verfügbar in: <a href="./README.md">:gb: English</a> ·
- [Portabel](#portable)
- [Plugins](#plugins)
- [Themen](#themes)
- [Beitragen](#contributing)
- [Beitragen](#contributing)
<a name="about"></a>
<a name="about"></a>
# Was Tabby ist und was nicht
**Tabby ist** eine Alternative zu Windows Standard-Terminal (conhost), PowerShell ISE, PuTTY, macOS Terminal.app und iTerm
**Tabby ist** eine Alternative zu Windows Standard-Terminal (conhost), PowerShell ISE, PuTTY, macOS Terminal.app und iTerm
**Tabby ist weder** eine neue Shell noch ein MinGW- oder Cygwin-Ersatz. Sie ist auch nicht gerade sparsam - wenn die RAM-Nutzung von Bedeutung ist, solltest Du [Conemu](https://conemu.github.io) oder [Alacritty](https://github.com/jwilm/alacritty) in Betracht ziehen.
<a name="terminal"></a>
<a name="terminal"></a>
# Terminal-Funktionen
![](docs/readme-terminal.png)
![](docs/readme-terminal.png)
* Ein V220-Terminal + verschiedene Erweiterungen
* Mehrere verschachtelte, geteilte Fenster
@@ -75,19 +75,19 @@ Diese README ist auch verfügbar in: <a href="./README.md">:gb: English</a> ·
* Einfügen in Klammern, mehrzeilige Einfügewarnungen
* Schriftart-Ligaturen
* Benutzerdefinierte Shell-Profile
* Optionales RMB-Einfügen und Kopieren bei Auswahl (PuTTY-Stil)
* Optionales RMB-Einfügen und Kopieren bei Auswahl (PuTTY-Stil)
<a name="ssh"></a>
# SSH Client
![](docs/readme-ssh.png)
![](docs/readme-ssh.png)
* SSH2-Client mit einem Verbindungsmanager
* X11 und Portweiterleitung
* Automatisches Jump-Host-Management
* Agent-Weiterleitung (inkl. Pageant und Windows-eigenem OpenSSH-Agent)
* Anmeldeskripte
* Anmeldeskripte
<a name="serial"></a>
@@ -97,13 +97,13 @@ Diese README ist auch verfügbar in: <a href="./README.md">:gb: English</a> ·
* Unterstützung von Readline-Eingaben
* Optionale hexadezimale Byte-für-Byte-Eingabe und Hexdump-Ausgabe
* Newline-Konvertierung
* Automatische Wiederverbindung
* Automatische Wiederverbindung
<a name="portable"></a>
# Portabel
Tabby läuft als portable Anwendung unter Windows, wenn Sie einen `data`-Ordner am selben Ort erstellen, an dem sich auch `Tabby.exe` befindet.
Tabby läuft als portable Anwendung unter Windows, wenn Sie einen `data`-Ordner am selben Ort erstellen, an dem sich auch `Tabby.exe` befindet.
<a name="plugins"></a>
@@ -118,7 +118,7 @@ Plugins und Themen können direkt aus der Ansicht "Einstellungen" in Tabby insta
* [sync-config](https://github.com/starxg/terminus-sync-config) - synchronisiert die Konfiguration mit Gist oder Gitee
* [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
* [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
<a name="themes"></a>
@@ -128,13 +128,13 @@ Plugins und Themen können direkt aus der Ansicht "Einstellungen" in Tabby insta
* [relaxed](https://github.com/Relaxed-Theme/relaxed-terminal-themes#terminus) - das entspannte Thema für Tabby
* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox)
* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)
* [altair](https://github.com/yxuko/terminus-altair)
* [altair](https://github.com/yxuko/terminus-altair)
# Sponsoren <!-- omit in toc -->
[![](https://assets-production.packagecloud.io/assets/packagecloud-logo-light-scaled-26ce8e96060fddf74afbd4445e63ba35590d4aaa56edc98495bb390ef3cae0ae.png)](https://packagecloud.io)
[![](https://assets-production.packagecloud.io/assets/packagecloud-logo-light-scaled-26ce8e96060fddf74afbd4445e63ba35590d4aaa56edc98495bb390ef3cae0ae.png)](https://packagecloud.io)
[**packagecloud**](https://packagecloud.io) bietet kostenloses Debian/RPM-Repository-Hosting an
[**packagecloud**](https://packagecloud.io) bietet kostenloses Debian/RPM-Repository-Hosting an
<a name="contributing"></a>
@@ -291,6 +291,18 @@ Dank geht an diese wunderbaren Menschen ([emoji key](https://allcontributors.org
</tr>
<tr>
<td align="center"><a href="https://www.stackscale.com/"><img src="https://avatars.githubusercontent.com/u/195768?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Carrero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=dcarrero" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/zhoro"><img src="https://avatars.githubusercontent.com/u/1105687?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=zhoro" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/JohnMasoner"><img src="https://avatars.githubusercontent.com/u/42313377?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mason Ma</b></sub></a><br /><a href="#financial-JohnMasoner" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ntimo"><img src="https://avatars.githubusercontent.com/u/6145026?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Timo</b></sub></a><br /><a href="#financial-ntimo" title="Financial">💵</a></td>
<td align="center"><a href="https://www.linkedin.com/in/evinwatson/"><img src="https://avatars.githubusercontent.com/u/24227251?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Evin Watson</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=EvinRWatson" title="Documentation">📖</a></td>
<td align="center"><a href="https://t.me/hendrjl"><img src="https://avatars.githubusercontent.com/u/15981200?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=deulizealand" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/wkricowski"><img src="https://avatars.githubusercontent.com/u/36803521?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href="#financial-wkricowski" title="Financial">💵</a> <a href="https://github.com/Eugeny/tabby/commits?author=wkricowski" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/almzau"><img src="https://avatars.githubusercontent.com/u/29115846?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Allan</b></sub></a><br /><a href="#design-almzau" title="Design">🎨</a></td>
<td align="center"><a href="https://oidamo.de"><img src="https://avatars.githubusercontent.com/u/17959794?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/patric1025"><img src="https://avatars.githubusercontent.com/u/65654040?v=4?s=100" width="100px;" alt=""/><br /><sub><b>patric1025</b></sub></a><br /><a href="#translation-patric1025" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
</tr>
</table>

View File

@@ -21,7 +21,7 @@
<br/>
<p align="center">
Este fichero README está disponible en: <a href="./README.md">:gb: English</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.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a>
Este fichero README está disponible en: <a href="./README.md">:gb: English</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.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a> · <a href="./README.pt-BR.md">:br: Português</a>
</p>
----
@@ -293,6 +293,18 @@ Gracias a estas maravillosas personas ([emoji key](https://allcontributors.org/d
</tr>
<tr>
<td align="center"><a href="https://www.stackscale.com/"><img src="https://avatars.githubusercontent.com/u/195768?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Carrero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=dcarrero" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/zhoro"><img src="https://avatars.githubusercontent.com/u/1105687?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=zhoro" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/JohnMasoner"><img src="https://avatars.githubusercontent.com/u/42313377?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mason Ma</b></sub></a><br /><a href="#financial-JohnMasoner" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ntimo"><img src="https://avatars.githubusercontent.com/u/6145026?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Timo</b></sub></a><br /><a href="#financial-ntimo" title="Financial">💵</a></td>
<td align="center"><a href="https://www.linkedin.com/in/evinwatson/"><img src="https://avatars.githubusercontent.com/u/24227251?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Evin Watson</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=EvinRWatson" title="Documentation">📖</a></td>
<td align="center"><a href="https://t.me/hendrjl"><img src="https://avatars.githubusercontent.com/u/15981200?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=deulizealand" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/wkricowski"><img src="https://avatars.githubusercontent.com/u/36803521?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href="#financial-wkricowski" title="Financial">💵</a> <a href="https://github.com/Eugeny/tabby/commits?author=wkricowski" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/almzau"><img src="https://avatars.githubusercontent.com/u/29115846?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Allan</b></sub></a><br /><a href="#design-almzau" title="Design">🎨</a></td>
<td align="center"><a href="https://oidamo.de"><img src="https://avatars.githubusercontent.com/u/17959794?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/patric1025"><img src="https://avatars.githubusercontent.com/u/65654040?v=4?s=100" width="100px;" alt=""/><br /><sub><b>patric1025</b></sub></a><br /><a href="#translation-patric1025" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
</tr>
</table>

View File

@@ -21,25 +21,25 @@
<br/>
<p align="center">
This README is also available in: <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.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a>
This README is also available in: <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.ja-JP.md">:jp: 日本語</a> · <a href="./README.pt-BR.md">:br: Português</a>
</p>
----
[**Tabby**](https://tabby.sh) (sebelumnya **Terminus**) adalah emulator terminal, SSH, dan klien serial yang sangat dapat dikonfigurasi untuk Windows, macOS, dan Linux
[**Tabby**](https://tabby.sh) (sebelumnya **Terminus**) adalah emulator terminal, SSH, dan klien serial yang sangat dapat dikonfigurasi untuk Windows, macOS, dan Linux
* Integrasi SSH dan klien Telnet dan Koneksi Manager
* Integrasi terminal serial
* Tema dan skema warna
* Pintasan yang dapat dikonfigurasi sepenuhnya dan pintasan multi-chord
* Pintasan yang dapat dikonfigurasi sepenuhnya dan pintasan multi-chord
* Panel yang bisa dipisahkan
* Mengingat tab anda
* Mensupport PowerShell (dan PS Core), WSL, Git-Bash, Cygwin, MSYS2, Cmder dan CMD
* File transfer secara langsung dari/ke sesi SSH via Zmodem
* Support Unicode termaksud karakter double-width
* Tidak tersedak dengan output yang mengalir dengan cepat
* Pengalaman shell yang tepat di Windows termasuk penyelesaian tab (via Clink)
* Wadah terintregrasi terenkripsi untuk rahasia dan konfigurasi SSH
* Mendukung PowerShell (dan PS Core), WSL, Git-Bash, Cygwin, MSYS2, Cmder dan CMD
* File transfer secara langsung dari/ke sesi SSH melalui Zmodem
* Mendukung Unicode termasuk karakter double-width
* Tidak tersendat dengan output yang tampil dengan cepat
* Pengalaman shell yang tepat di Windows termasuk penyelesaian tab (melalui Clink)
* Terintegrasi dengan wadah terenkripsi untuk rahasia dan konfigurasi SSH
* SSH, SFTP dan klien Telnet tersedia sebagai [aplikasi web](https://tabby.sh/app) (dan juga [self-hosted](https://github.com/Eugeny/tabby-web)).
# Contents <!-- omit in toc -->
@@ -55,24 +55,24 @@ This README is also available in: <a href="./README.es-ES.md">:es: Spanish</a>
<a name="about"></a>
# What Tabby is and isn't
# Apa itu Tabby dan bukan Tabby
* **Tabby adalah** sebuah alternatif untuk standar Windows' terminal (conhost), PowerShell ISE, PuTTY, macOS Terminal.app dan iTerm
* **Tabby adalah** sebuah alternatif untuk terminal standar Windows' (conhost), PowerShell ISE, PuTTY, macOS Terminal.app dan iTerm
* **Tabby bukan** shell yang baru atau peganti MinGW atau Cygwin. Dan bukan applikasi ringan - jika penggunaan RAM diutamakan, mungkin boleh mencoba [Conemu](https://conemu.github.io) atau [Alacritty](https://github.com/jwilm/alacritty)
* **Tabby bukan** shell yang baru atau pengganti MinGW atau Cygwin. Dan bukan aplikasi ringan - jika mengutamakan penggunaan RAM, mungkin boleh mencoba [Conemu](https://conemu.github.io) atau [Alacritty](https://github.com/jwilm/alacritty)
<a name="terminal"></a>
# Fitur terminal
# Fitur terminal
![](docs/readme-terminal.png)
* Adalah V220 terminal + berbagai macam extensi
* Beberapa panel split bersarang
* Terminal V220 + berbagai macam ekstensi
* Beberapa pembagian panel
* Tab di sisi mana pun dari jendela
* Jendela dockable opsional dengan hotkey spawn global ("Quake console")
* Deteksi Progres
* Notifikasi untuk penyelesaian proses
* Notifikasi saat proses telah selesai
* Tempel tanda kurung, peringatan tempel multiline
* Pengikat font
* Kustom profil shell
@@ -80,14 +80,14 @@ This README is also available in: <a href="./README.es-ES.md">:es: Spanish</a>
<a name="ssh"></a>
# Klien SSH
# Klien SSH
![](docs/readme-ssh.png)
* Klien SSH2 dengan manajer koneksi
* Klien SSH2 dengan manajemen koneksi
* X11 dan port forwarding
* Otomatis berpindah host management
* Agent forwarding (termaksud Pageant dan Windows native OpenSSH Agent)
* Agent forwarding (termasuk Pageant dan Windows native OpenSSH Agent)
* Login scripts
<a name="serial"></a>
@@ -104,19 +104,19 @@ This README is also available in: <a href="./README.es-ES.md">:es: Spanish</a>
# Portabel
Tabby tetap bisa berjalan sebagai applikasi portabel di Windows, jika anda membuat folder `data` di tempat tinggal yang sama dengan `Tabby.exe`.
Tabby tetap bisa berjalan sebagai aplikasi portabel di Windows, jika anda membuat folder `data` di tempat yang sama dengan `Tabby.exe`.
<a name="plugins"></a>
# Plugins
Tema dan Plugin bisa langsung di instal dari Pengaturan didalam Tabby.
Tema dan Plugin bisa langsung di install dari Pengaturan di dalam Tabby.
* [docker](https://github.com/Eugeny/tabby-docker) - untuk menkonek ke Docker containers
* [docker](https://github.com/Eugeny/tabby-docker) - untuk koneksi ke Docker containers
* [title-control](https://github.com/kbjr/terminus-title-control) - memperbolehkan untuk mengganti judul di tab terminal dengan menyediakan prefix, suffix, dan/atau strings untuk di buang
* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - kirimkan command ke satu atau semua tab terminal dengan cepat
* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - kirimkan perintah ke satu atau semua tab terminal dengan cepat
* [save-output](https://github.com/Eugeny/tabby-save-output) - merekam output terminal ke suatu file
* [sync-config](https://github.com/starxg/terminus-sync-config) - sinkronisasi config ke Gist atau Gitee
* [sync-config](https://github.com/starxg/terminus-sync-config) - sinkronisasi konfigurasi ke Gist atau Gitee
* [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
* [search-in-browser](https://github.com/composer404/tabby-search-in-browser) - membuka browser default dengan text yang dipilih dari Tab Tabby
@@ -290,6 +290,18 @@ Terima kasih kepada mereka yang telah membantu ([emoji key](https://allcontribut
</tr>
<tr>
<td align="center"><a href="https://www.stackscale.com/"><img src="https://avatars.githubusercontent.com/u/195768?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Carrero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=dcarrero" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/zhoro"><img src="https://avatars.githubusercontent.com/u/1105687?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=zhoro" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/JohnMasoner"><img src="https://avatars.githubusercontent.com/u/42313377?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mason Ma</b></sub></a><br /><a href="#financial-JohnMasoner" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ntimo"><img src="https://avatars.githubusercontent.com/u/6145026?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Timo</b></sub></a><br /><a href="#financial-ntimo" title="Financial">💵</a></td>
<td align="center"><a href="https://www.linkedin.com/in/evinwatson/"><img src="https://avatars.githubusercontent.com/u/24227251?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Evin Watson</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=EvinRWatson" title="Documentation">📖</a></td>
<td align="center"><a href="https://t.me/hendrjl"><img src="https://avatars.githubusercontent.com/u/15981200?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=deulizealand" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/wkricowski"><img src="https://avatars.githubusercontent.com/u/36803521?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href="#financial-wkricowski" title="Financial">💵</a> <a href="https://github.com/Eugeny/tabby/commits?author=wkricowski" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/almzau"><img src="https://avatars.githubusercontent.com/u/29115846?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Allan</b></sub></a><br /><a href="#design-almzau" title="Design">🎨</a></td>
<td align="center"><a href="https://oidamo.de"><img src="https://avatars.githubusercontent.com/u/17959794?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/patric1025"><img src="https://avatars.githubusercontent.com/u/65654040?v=4?s=100" width="100px;" alt=""/><br /><sub><b>patric1025</b></sub></a><br /><a href="#translation-patric1025" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
</tr>
</table>

View File

@@ -21,7 +21,7 @@
<br/>
<p align="center">
Questo README è disponibile anche in: <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.de-DE.md">:de: Deutsch</a> · <a href="./README.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a>
Questo README è disponibile anche in: <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.de-DE.md">:de: Deutsch</a> · <a href="./README.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a> · <a href="./README.pt-BR.md">:br: Português</a>
----
@@ -286,6 +286,18 @@ Grazie a queste persone meravigliose ([emoji key](https://allcontributors.org/do
</tr>
<tr>
<td align="center"><a href="https://www.stackscale.com/"><img src="https://avatars.githubusercontent.com/u/195768?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Carrero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=dcarrero" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/zhoro"><img src="https://avatars.githubusercontent.com/u/1105687?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=zhoro" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/JohnMasoner"><img src="https://avatars.githubusercontent.com/u/42313377?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mason Ma</b></sub></a><br /><a href="#financial-JohnMasoner" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ntimo"><img src="https://avatars.githubusercontent.com/u/6145026?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Timo</b></sub></a><br /><a href="#financial-ntimo" title="Financial">💵</a></td>
<td align="center"><a href="https://www.linkedin.com/in/evinwatson/"><img src="https://avatars.githubusercontent.com/u/24227251?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Evin Watson</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=EvinRWatson" title="Documentation">📖</a></td>
<td align="center"><a href="https://t.me/hendrjl"><img src="https://avatars.githubusercontent.com/u/15981200?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=deulizealand" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/wkricowski"><img src="https://avatars.githubusercontent.com/u/36803521?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href="#financial-wkricowski" title="Financial">💵</a> <a href="https://github.com/Eugeny/tabby/commits?author=wkricowski" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/almzau"><img src="https://avatars.githubusercontent.com/u/29115846?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Allan</b></sub></a><br /><a href="#design-almzau" title="Design">🎨</a></td>
<td align="center"><a href="https://oidamo.de"><img src="https://avatars.githubusercontent.com/u/17959794?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/patric1025"><img src="https://avatars.githubusercontent.com/u/65654040?v=4?s=100" width="100px;" alt=""/><br /><sub><b>patric1025</b></sub></a><br /><a href="#translation-patric1025" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
</tr>
</table>

View File

@@ -21,7 +21,7 @@
<br/>
<p align="center">
このREADMEは次の言語にも対応: <a href="./README.md">:gb: English</a> · <a href="./README.es-ES.md">:es: Spanish</a> · <a href="./README.ru-RU.md">:ru: Русский</a> · <a href="./README.ko-KR.md">:kr: 한국어</a> · <a href="./README.zh-CN.md">:cn: 简体中文</a> · <a href="./README.it-IT.md">:it: Italiano</a> · <a href="./README.de-DE.md">:de: Deutsch</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a>
この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>
----
@@ -290,6 +290,18 @@ Windows上では、`Tabby.exe`がある場所と同じ場所に`data`フォル
</tr>
<tr>
<td align="center"><a href="https://www.stackscale.com/"><img src="https://avatars.githubusercontent.com/u/195768?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Carrero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=dcarrero" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/zhoro"><img src="https://avatars.githubusercontent.com/u/1105687?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=zhoro" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/JohnMasoner"><img src="https://avatars.githubusercontent.com/u/42313377?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mason Ma</b></sub></a><br /><a href="#financial-JohnMasoner" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ntimo"><img src="https://avatars.githubusercontent.com/u/6145026?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Timo</b></sub></a><br /><a href="#financial-ntimo" title="Financial">💵</a></td>
<td align="center"><a href="https://www.linkedin.com/in/evinwatson/"><img src="https://avatars.githubusercontent.com/u/24227251?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Evin Watson</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=EvinRWatson" title="Documentation">📖</a></td>
<td align="center"><a href="https://t.me/hendrjl"><img src="https://avatars.githubusercontent.com/u/15981200?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=deulizealand" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/wkricowski"><img src="https://avatars.githubusercontent.com/u/36803521?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href="#financial-wkricowski" title="Financial">💵</a> <a href="https://github.com/Eugeny/tabby/commits?author=wkricowski" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/almzau"><img src="https://avatars.githubusercontent.com/u/29115846?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Allan</b></sub></a><br /><a href="#design-almzau" title="Design">🎨</a></td>
<td align="center"><a href="https://oidamo.de"><img src="https://avatars.githubusercontent.com/u/17959794?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/patric1025"><img src="https://avatars.githubusercontent.com/u/65654040?v=4?s=100" width="100px;" alt=""/><br /><sub><b>patric1025</b></sub></a><br /><a href="#translation-patric1025" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
</tr>
</table>

View File

@@ -280,6 +280,18 @@ Pull requests and plugins are welcome!
</tr>
<tr>
<td align="center"><a href="https://www.stackscale.com/"><img src="https://avatars.githubusercontent.com/u/195768?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Carrero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=dcarrero" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/zhoro"><img src="https://avatars.githubusercontent.com/u/1105687?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=zhoro" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/JohnMasoner"><img src="https://avatars.githubusercontent.com/u/42313377?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mason Ma</b></sub></a><br /><a href="#financial-JohnMasoner" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ntimo"><img src="https://avatars.githubusercontent.com/u/6145026?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Timo</b></sub></a><br /><a href="#financial-ntimo" title="Financial">💵</a></td>
<td align="center"><a href="https://www.linkedin.com/in/evinwatson/"><img src="https://avatars.githubusercontent.com/u/24227251?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Evin Watson</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=EvinRWatson" title="Documentation">📖</a></td>
<td align="center"><a href="https://t.me/hendrjl"><img src="https://avatars.githubusercontent.com/u/15981200?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=deulizealand" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/wkricowski"><img src="https://avatars.githubusercontent.com/u/36803521?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href="#financial-wkricowski" title="Financial">💵</a> <a href="https://github.com/Eugeny/tabby/commits?author=wkricowski" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/almzau"><img src="https://avatars.githubusercontent.com/u/29115846?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Allan</b></sub></a><br /><a href="#design-almzau" title="Design">🎨</a></td>
<td align="center"><a href="https://oidamo.de"><img src="https://avatars.githubusercontent.com/u/17959794?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/patric1025"><img src="https://avatars.githubusercontent.com/u/65654040?v=4?s=100" width="100px;" alt=""/><br /><sub><b>patric1025</b></sub></a><br /><a href="#translation-patric1025" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
</tr>
</table>

View File

@@ -11,6 +11,12 @@
</a>
</p>
---
> 👋 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.
----
### Downloads:
@@ -21,7 +27,7 @@
<br/>
<p align="center">
This README is also available in: <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.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a>
This README is also available in: <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.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a> · <a href="./README.pt-BR.md">:br: Português</a>
</p>
----
@@ -137,7 +143,7 @@ Plugins and themes can be installed directly from the Settings view inside Tabby
[**packagecloud**](https://packagecloud.io) has provided free Debian/RPM repository hosting
[![](https://user-images.githubusercontent.com/161476/193406404-1784f40c-eaba-44d0-af11-d8bd35517382.png)](https://keygen.sh/?via=eugene)
[![](https://user-images.githubusercontent.com/161476/200423885-7aba2202-fea7-4409-95b9-3a062ce902c7.png)](https://keygen.sh/?via=eugene)
[**keygen**](https://keygen.sh/?via=eugene) has provided free release & auto-update hosting
@@ -294,6 +300,18 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
</tr>
<tr>
<td align="center"><a href="https://www.stackscale.com/"><img src="https://avatars.githubusercontent.com/u/195768?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Carrero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=dcarrero" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/zhoro"><img src="https://avatars.githubusercontent.com/u/1105687?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=zhoro" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/JohnMasoner"><img src="https://avatars.githubusercontent.com/u/42313377?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mason Ma</b></sub></a><br /><a href="#financial-JohnMasoner" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ntimo"><img src="https://avatars.githubusercontent.com/u/6145026?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Timo</b></sub></a><br /><a href="#financial-ntimo" title="Financial">💵</a></td>
<td align="center"><a href="https://www.linkedin.com/in/evinwatson/"><img src="https://avatars.githubusercontent.com/u/24227251?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Evin Watson</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=EvinRWatson" title="Documentation">📖</a></td>
<td align="center"><a href="https://t.me/hendrjl"><img src="https://avatars.githubusercontent.com/u/15981200?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=deulizealand" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/wkricowski"><img src="https://avatars.githubusercontent.com/u/36803521?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href="#financial-wkricowski" title="Financial">💵</a> <a href="https://github.com/Eugeny/tabby/commits?author=wkricowski" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/almzau"><img src="https://avatars.githubusercontent.com/u/29115846?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Allan</b></sub></a><br /><a href="#design-almzau" title="Design">🎨</a></td>
<td align="center"><a href="https://oidamo.de"><img src="https://avatars.githubusercontent.com/u/17959794?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/patric1025"><img src="https://avatars.githubusercontent.com/u/65654040?v=4?s=100" width="100px;" alt=""/><br /><sub><b>patric1025</b></sub></a><br /><a href="#translation-patric1025" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
</tr>
</table>

317
README.pt-BR.md Normal file
View File

@@ -0,0 +1,317 @@
[![](docs/readme.png)](https://tabby.sh)
<p align="center">
<a href="https://github.com/Eugeny/tabby/releases/latest"><img alt="GitHub All Releases" src="https://img.shields.io/github/downloads/eugeny/tabby/total.svg?label=DOWNLOADS&logo=github&style=for-the-badge"></a> &nbsp; <a href="https://nightly.link/Eugeny/tabby/workflows/build/master"><img src="https://shields.io/badge/-Nightly%20Builds-orange?logo=hackthebox&logoColor=fff&style=for-the-badge"/></a> &nbsp; <a href="https://matrix.to/#/#tabby-general:matrix.org"><img alt="Matrix" src="https://img.shields.io/matrix/tabby-general:matrix.org?logo=matrix&style=for-the-badge&color=magenta"></a> &nbsp <a href="https://translate.tabby.sh/"><img alt="Translate" src="https://shields.io/badge/Translate-UI-white?logo=googletranslate&style=for-the-badge&color=white&logoColor=fff"></a> &nbsp; <a href="https://twitter.com/eugeeeeny"><img alt="Twitter" src="https://shields.io/badge/Subscribe-News-blue?logo=twitter&style=for-the-badge&color=blue"></a>
</p>
<p align="center">
<a href="https://ko-fi.com/J3J8KWTF">
<img src="https://cdn.ko-fi.com/cdn/kofi3.png?v=2" width="150">
</a>
</p>
----
### Downloads:
* [Última versão](https://github.com/Eugeny/tabby/releases/latest)
* [Repositórios](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)
* [Última compilação nightly](https://nightly.link/Eugeny/tabby/workflows/build/master)
<br/>
<p align="center">
Esse README também está disponível em: <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.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a>
</p>
----
[**Tabby**](https://tabby.sh) (anteriormente **Terminus**) é um emulador de terminal, SSH e serial client altamente configurável para Windows, macOS e Linux.
* Cliente e gerenciador de conexões SSH e Telnet integrado
* Terminal serial integrado
* Temas e esquemas de cores
* Atalhos e atalhos multiplos totalmente configuravéis
* Divisor de painéis
* Recupera as guias da ultima execução
* Suporte para PowerShell (e PS Core), WSL, Git-Bash, Cygwin, MSYS2, Cmder e CMD
* Transferência direta de arquivos de/para sessões SSH via Zmodem
* Suporte total para Unicode, incluindo caracteres de largura dupla
* Não trava com saídas de fluxo rápido
* Experiência de shell adequada no Windows, incluindo preenchimento de guia (via Clink)
* Contêiner criptografado integrado para as chaves SSH e configurações
* SSH, SFTP e Cliente Telnet disponível como [aplicação web](https://tabby.sh/app) (também em [hospedagem local](https://github.com/Eugeny/tabby-web)).
# Conteúdo <!-- omit in toc -->
- [O que é Tabby e o que não é](#what-tabby-is-and-isnt)
- [Recursos do Terminal](#terminal-features)
- [Cliente SSH](#ssh-client)
- [Terminal Serial](#serial-terminal)
- [Portátil](#portable)
- [Plugins](#plugins)
- [Temas](#themes)
- [Contribuições](#contributing)
<a name="about"></a>
# O que é Tabby e o que não é
* **Tabby é** uma alternativa ao terminal padrão do Windows (conhost), PowerShell ISE, PuTTY, macOS Terminal.app e iTerm
* **Tabby não é** um novo shell ou um substituto do MinGW ou Cygwin. Também não é leve - se o uso de RAM for importante, considere usar o [Conemu](https://conemu.github.io) ou [Alacritty](https://github.com/jwilm/alacritty)
<a name="terminal"></a>
# Recursos do Terminal
![](docs/readme-terminal.png)
* Um terminal V220 + várias extensões
* Múltiplos painéis divididos aninhados
* Guias em qualquer lado da janela
* Opção de minimizar para a barra de tarefas com uma tecla de atalho global ("Quake console")
* Detecção de progresso
* Notificação da conclusão do processo
* Colar entre colchetes, avisos de colagem de várias linhas
* Ligadura tipográfica
* Perfis shell personalizados
* Opção de selecionar para copiar e colar com o botão direto do mouse (RMB) igual ao Putty
<a name="ssh"></a>
# Cliente SSH
![](docs/readme-ssh.png)
* Cliente SSH2 com gerenciador de conexões
* X11 e redirecionamento de portas (port forwarding)
* Gerenciamento de host de saldo automatico (Jump Host)
* Encaminhamento de agente (incl. Pageant e agente OpenSSH nativo do Windows)
* Scripts de Login
<a name="serial"></a>
# Terminal Serial
* Salva as Conexões
* Suporte de entrada de linha
* Opões de saida em hex, byte a byte e hexdump
* Conversão de nova linha
* Reconexão automatica
<a name="portable"></a>
# Portátil
Tabby será executado como um aplicativo portátil no Windows, se você criar uma pasta chamada 'data' no mesmo local do executável 'Tabby.exe'
<a name="plugins"></a>
# Plugins
Plugins e temas podem ser instalados durante a execução na pagina de configurações > plugins
* [docker](https://github.com/Eugeny/tabby-docker) - conecta aos conteiners Docker
* [title-control](https://github.com/kbjr/terminus-title-control) - permite modificar o título das guias do terminal fornecendo um prefixo, sufixo e/ou strings a serem removidos
* [quick-cmds](https://github.com/Domain/terminus-quick-cmds) - envie comandos rapidamente para uma ou todas as guias do terminal
* [save-output](https://github.com/Eugeny/tabby-save-output) - gravar a saída do terminal em um arquivo
* [sync-config](https://github.com/starxg/terminus-sync-config) - sincronizar a configuração com Gist ou Gitee
* [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
* [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
<a name="themes"></a>
# Temas
* [hype](https://github.com/Eugeny/tabby-theme-hype)
* [relaxed](https://github.com/Relaxed-Theme/relaxed-terminal-themes#terminus)
* [gruvbox](https://github.com/porkloin/terminus-theme-gruvbox)
* [windows10](https://www.npmjs.com/package/terminus-theme-windows10)
* [altair](https://github.com/yxuko/terminus-altair)
# Patrocinadores <!-- omit in toc -->
[![](https://assets-production.packagecloud.io/assets/packagecloud-logo-light-scaled-26ce8e96060fddf74afbd4445e63ba35590d4aaa56edc98495bb390ef3cae0ae.png)](https://packagecloud.io)
[**packagecloud**](https://packagecloud.io) forneceu hospedagem gratuita de repositório Debian/RPM
[![](https://user-images.githubusercontent.com/161476/200423885-7aba2202-fea7-4409-95b9-3a062ce902c7.png)](https://keygen.sh/?via=eugene)
[**keygen**](https://keygen.sh/?via=eugene) forneceu hospedagem gratuita para liberação e atualização automática
<a name="contributing"></a>
# Contribuições
Pull requests e plugins são bem-vindos!
Consulte os documentos [HACKING.md](https://github.com/Eugeny/tabby/blob/master/HACKING.md) e [API docs](https://docs.tabby.sh/) para obter informações sobre como o projeto foi estruturado e um breve tutorial de desenvolvimento de plug-in.
---
<a name="contributors"></a>
Obrigado vai para essas pessoas maravilhosas ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tr>
<td align="center"><a href="http://www.russellmyers.com"><img src="https://avatars2.githubusercontent.com/u/184085?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Russell Myers</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=mezner" title="Code">💻</a></td>
<td align="center"><a href="http://www.morwire.com"><img src="https://avatars1.githubusercontent.com/u/3991658?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Austin Warren</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=ehwarren" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Drachenkaetzchen"><img src="https://avatars1.githubusercontent.com/u/162974?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Felicia Hummel</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Drachenkaetzchen" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/mikemaccana"><img src="https://avatars2.githubusercontent.com/u/172594?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mike MacCana</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=mikemaccana" title="Tests">⚠️</a> <a href="#design-mikemaccana" title="Design">🎨</a></td>
<td align="center"><a href="https://github.com/yxuko"><img src="https://avatars1.githubusercontent.com/u/1786317?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Yacine Kanzari</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=yxuko" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/BBJip"><img src="https://avatars2.githubusercontent.com/u/32908927?v=4?s=100" width="100px;" alt=""/><br /><sub><b>BBJip</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=BBJip" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Futagirl"><img src="https://avatars2.githubusercontent.com/u/33533958?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Futagirl</b></sub></a><br /><a href="#design-Futagirl" title="Design">🎨</a></td>
</tr>
<tr>
<td align="center"><a href="https://www.levrik.io"><img src="https://avatars3.githubusercontent.com/u/9491603?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Levin Rickert</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=levrik" title="Code">💻</a></td>
<td align="center"><a href="https://kwonoj.github.io"><img src="https://avatars2.githubusercontent.com/u/1210596?v=4?s=100" width="100px;" alt=""/><br /><sub><b>OJ Kwon</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=kwonoj" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Domain"><img src="https://avatars2.githubusercontent.com/u/903197?v=4?s=100" width="100px;" alt=""/><br /><sub><b>domain</b></sub></a><br /><a href="#plugin-Domain" title="Plugin/utility libraries">🔌</a> <a href="https://github.com/Eugeny/tabby/commits?author=Domain" title="Code">💻</a></td>
<td align="center"><a href="http://www.jbrumond.me"><img src="https://avatars1.githubusercontent.com/u/195127?v=4?s=100" width="100px;" alt=""/><br /><sub><b>James Brumond</b></sub></a><br /><a href="#plugin-kbjr" title="Plugin/utility libraries">🔌</a></td>
<td align="center"><a href="http://www.growingwiththeweb.com"><img src="https://avatars0.githubusercontent.com/u/2193314?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Daniel Imms</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Tyriar" title="Code">💻</a> <a href="#plugin-Tyriar" title="Plugin/utility libraries">🔌</a> <a href="https://github.com/Eugeny/tabby/commits?author=Tyriar" title="Tests">⚠️</a></td>
<td align="center"><a href="https://github.com/baflo"><img src="https://avatars2.githubusercontent.com/u/834350?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Florian Bachmann</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=baflo" title="Code">💻</a></td>
<td align="center"><a href="http://michael-kuehnel.de"><img src="https://avatars2.githubusercontent.com/u/441011?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Michael Kühnel</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=mischah" title="Code">💻</a> <a href="#design-mischah" title="Design">🎨</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/NieLeben"><img src="https://avatars3.githubusercontent.com/u/47182955?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tilmann Meyer</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=NieLeben" title="Code">💻</a></td>
<td align="center"><a href="http://www.jubeat.net"><img src="https://avatars3.githubusercontent.com/u/11289158?v=4?s=100" width="100px;" alt=""/><br /><sub><b>PM Extra</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/issues?q=author%3APMExtra" title="Bug reports">🐛</a></td>
<td align="center"><a href="https://jjuhas.keybase.pub//"><img src="https://avatars1.githubusercontent.com/u/6438760?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jonathan</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=IgnusG" title="Code">💻</a></td>
<td align="center"><a href="https://hans-koch.me"><img src="https://avatars0.githubusercontent.com/u/1093709?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hans Koch</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hammster" title="Code">💻</a></td>
<td align="center"><a href="http://thepuzzlemaker.info"><img src="https://avatars3.githubusercontent.com/u/12666617?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dak Smyth</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=ThePuzzlemaker" title="Code">💻</a></td>
<td align="center"><a href="http://yfwz100.github.io"><img src="https://avatars2.githubusercontent.com/u/983211?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wang Zhi</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=yfwz100" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/jack1142"><img src="https://avatars0.githubusercontent.com/u/6032823?v=4?s=100" width="100px;" alt=""/><br /><sub><b>jack1142</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=jack1142" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/hdougie"><img src="https://avatars1.githubusercontent.com/u/450799?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Howie Douglas</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hdougie" title="Code">💻</a></td>
<td align="center"><a href="https://chriskaczor.com"><img src="https://avatars2.githubusercontent.com/u/180906?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Chris Kaczor</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=ckaczor" title="Code">💻</a></td>
<td align="center"><a href="https://www.boxmein.net"><img src="https://avatars1.githubusercontent.com/u/358714?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Johannes Kadak</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=boxmein" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/LeSeulArtichaut"><img src="https://avatars1.githubusercontent.com/u/38361244?v=4?s=100" width="100px;" alt=""/><br /><sub><b>LeSeulArtichaut</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=LeSeulArtichaut" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/CyrilTaylor"><img src="https://avatars0.githubusercontent.com/u/12631466?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Cyril Taylor</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=CyrilTaylor" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/nstefanou"><img src="https://avatars3.githubusercontent.com/u/51129173?v=4?s=100" width="100px;" alt=""/><br /><sub><b>nstefanou</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=nstefanou" title="Code">💻</a> <a href="#plugin-nstefanou" title="Plugin/utility libraries">🔌</a></td>
<td align="center"><a href="https://github.com/orin220444"><img src="https://avatars3.githubusercontent.com/u/30747229?v=4?s=100" width="100px;" alt=""/><br /><sub><b>orin220444</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=orin220444" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/Goobles"><img src="https://avatars3.githubusercontent.com/u/8776771?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Gobius Dolhain</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Goobles" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/3l0w"><img src="https://avatars2.githubusercontent.com/u/37798980?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Gwilherm Folliot</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=3l0w" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Dimitory"><img src="https://avatars0.githubusercontent.com/u/475955?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dmitry Pronin</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=dimitory" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/JonathanBeverley"><img src="https://avatars1.githubusercontent.com/u/20328966?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jonathan Beverley</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=JonathanBeverley" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/zend"><img src="https://avatars1.githubusercontent.com/u/25160?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Zenghai Liang</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=zend" title="Code">💻</a></td>
<td align="center"><a href="https://about.me/matishadow"><img src="https://avatars0.githubusercontent.com/u/9083085?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mateusz Tracz</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=matishadow" title="Code">💻</a></td>
<td align="center"><a href="https://zergpool.com"><img src="https://avatars3.githubusercontent.com/u/36234677?v=4?s=100" width="100px;" alt=""/><br /><sub><b>pinpin</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=pinpins" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/TakuroOnoda"><img src="https://avatars0.githubusercontent.com/u/1407926?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Takuro Onoda</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=TakuroOnoda" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/frauhottelmann"><img src="https://avatars2.githubusercontent.com/u/902705?v=4?s=100" width="100px;" alt=""/><br /><sub><b>frauhottelmann</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=frauhottelmann" title="Code">💻</a></td>
<td align="center"><a href="http://patalong.pl"><img src="https://avatars.githubusercontent.com/u/29167842?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Piotr Patalong</b></sub></a><br /><a href="#design-VectorKappa" title="Design">🎨</a></td>
<td align="center"><a href="https://github.com/clarkwang"><img src="https://avatars.githubusercontent.com/u/157076?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Clark Wang</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=clarkwang" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/iamchating"><img src="https://avatars.githubusercontent.com/u/7088153?v=4?s=100" width="100px;" alt=""/><br /><sub><b>iamchating</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=iamchating" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/starxg"><img src="https://avatars.githubusercontent.com/u/34997494?v=4?s=100" width="100px;" alt=""/><br /><sub><b>starxg</b></sub></a><br /><a href="#plugin-starxg" title="Plugin/utility libraries">🔌</a></td>
<td align="center"><a href="http://hashnote.net/"><img src="https://avatars.githubusercontent.com/u/546312?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alisue</b></sub></a><br /><a href="#design-lambdalisue" title="Design">🎨</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/ydcool"><img src="https://avatars.githubusercontent.com/u/5668295?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dominic Yin</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=ydcool" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/bdr99"><img src="https://avatars.githubusercontent.com/u/2292715?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Brandon Rothweiler</b></sub></a><br /><a href="#design-bdr99" title="Design">🎨</a></td>
<td align="center"><a href="https://git.io/JnP49"><img src="https://avatars.githubusercontent.com/u/63876444?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Logic Machine</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=logicmachine123" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/cypherbits"><img src="https://avatars.githubusercontent.com/u/10424900?v=4?s=100" width="100px;" alt=""/><br /><sub><b>cypherbits</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=cypherbits" title="Documentation">📖</a></td>
<td align="center"><a href="https://modulolotus.net"><img src="https://avatars.githubusercontent.com/u/946421?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Matthew Davidson</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=KingMob" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/al-wi"><img src="https://avatars.githubusercontent.com/u/11092199?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alexander Wiedemann</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=al-wi" title="Code">💻</a></td>
<td align="center"><a href="https://www.notion.so/3d45c6bd2cbd4f938873a4bd12e23375"><img src="https://avatars.githubusercontent.com/u/59506394?v=4?s=100" width="100px;" alt=""/><br /><sub><b>장보연</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=BoYeonJang" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/Me1onRind"><img src="https://avatars.githubusercontent.com/u/19531270?v=4?s=100" width="100px;" alt=""/><br /><sub><b>zZ</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Me1onRind" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/tainoNZ"><img src="https://avatars.githubusercontent.com/u/49261322?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Aaron Davison</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=tainoNZ" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/composer404"><img src="https://avatars.githubusercontent.com/u/58251560?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Przemyslaw Kozik</b></sub></a><br /><a href="#design-composer404" title="Design">🎨</a></td>
<td align="center"><a href="https://github.com/highfredo"><img src="https://avatars.githubusercontent.com/u/5951524?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alfredo Arellano de la Fuente</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=highfredo" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/NessunKim"><img src="https://avatars.githubusercontent.com/u/12974079?v=4?s=100" width="100px;" alt=""/><br /><sub><b>MH Kim</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=NessunKim" title="Code">💻</a></td>
<td align="center"><a href="https://discord.gg/4c5EVTBhtp"><img src="https://avatars.githubusercontent.com/u/40345645?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Marmota</b></sub></a><br /><a href="#design-jaimeadf" title="Design">🎨</a></td>
<td align="center"><a href="https://ares.zone"><img src="https://avatars.githubusercontent.com/u/40336192?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ares Andrew</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=TENX-S" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://usual.io/"><img src="https://avatars.githubusercontent.com/u/780052?v=4?s=100" width="100px;" alt=""/><br /><sub><b>George Korsnick</b></sub></a><br /><a href="#financial-gkor" title="Financial">💵</a></td>
<td align="center"><a href="https://about.me/ulu"><img src="https://avatars.githubusercontent.com/u/872764?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Artem Smirnov</b></sub></a><br /><a href="#financial-uluhonolulu" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/nevotheless"><img src="https://avatars.githubusercontent.com/u/779797?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tim Kopplow</b></sub></a><br /><a href="#financial-nevotheless" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/mrthock"><img src="https://avatars.githubusercontent.com/u/88901709?v=4?s=100" width="100px;" alt=""/><br /><sub><b>mrthock</b></sub></a><br /><a href="#financial-mrthock" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/lrottach"><img src="https://avatars.githubusercontent.com/u/50323692?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lukas Rottach</b></sub></a><br /><a href="#financial-lrottach" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/boonkerz"><img src="https://avatars.githubusercontent.com/u/277321?v=4?s=100" width="100px;" alt=""/><br /><sub><b>boonkerz</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=boonkerz" title="Code">💻</a> <a href="#translation-boonkerz" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/milotype"><img src="https://avatars.githubusercontent.com/u/43657314?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Milo Ivir</b></sub></a><br /><a href="#translation-milotype" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/JasonCubic"><img src="https://avatars.githubusercontent.com/u/8921015?v=4?s=100" width="100px;" alt=""/><br /><sub><b>JasonCubic</b></sub></a><br /><a href="#design-JasonCubic" title="Design">🎨</a></td>
<td align="center"><a href="https://github.com/MaxWaldorf"><img src="https://avatars.githubusercontent.com/u/15877853?v=4?s=100" width="100px;" alt=""/><br /><sub><b>MaxWaldorf</b></sub></a><br /><a href="#infra-MaxWaldorf" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
<td align="center"><a href="https://github.com/mwz"><img src="https://avatars.githubusercontent.com/u/1190768?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Michael Wizner</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=mwz" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/mgrulich"><img src="https://avatars.githubusercontent.com/u/781036?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Martin</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=mgrulich" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/piersandro"><img src="https://avatars.githubusercontent.com/u/19996309?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Piersandro Guerrera</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=piersandro" title="Documentation">📖</a> <a href="#translation-piersandro" title="Translation">🌍</a></td>
<td align="center"><a href="http://pingbase.cn"><img src="https://avatars.githubusercontent.com/u/19320096?v=4?s=100" width="100px;" alt=""/><br /><sub><b>X-0x01</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=X-0x01" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Allenator"><img src="https://avatars.githubusercontent.com/u/11794943?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Allenator</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Allenator" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="http://microhobby.com.br/blog"><img src="https://avatars.githubusercontent.com/u/2633321?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Matheus Castello</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=microhobby" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/Jai-JAP"><img src="https://avatars.githubusercontent.com/u/78354625?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jai A P</b></sub></a><br /><a href="#platform-Jai-JAP" title="Packaging/porting to new platform">📦</a></td>
<td align="center"><a href="https://blog.ysc3839.com"><img src="https://avatars.githubusercontent.com/u/12028138?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Richard Yu</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=ysc3839" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/artu-ole"><img src="https://avatars.githubusercontent.com/u/15938416?v=4?s=100" width="100px;" alt=""/><br /><sub><b>artu-ole</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=artu-ole" title="Code">💻</a></td>
<td align="center"><a href="https://timagribanov.github.io/"><img src="https://avatars.githubusercontent.com/u/48593815?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Timofey Gribanov</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=TimaGribanov" title="Documentation">📖</a> <a href="#translation-TimaGribanov" title="Translation">🌍</a></td>
<td align="center"><a href="https://git.christianbingman.com"><img src="https://avatars.githubusercontent.com/u/42191425?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Christian Bingman</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=ChristianBingman" title="Code">💻</a></td>
<td align="center"><a href="http://zhangzhipeng2023.cn/"><img src="https://avatars.githubusercontent.com/u/5310853?v=4?s=100" width="100px;" alt=""/><br /><sub><b>zhipeng</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Ox0400" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/woodmeal"><img src="https://avatars.githubusercontent.com/u/104011197?v=4?s=100" width="100px;" alt=""/><br /><sub><b>woodmeal</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=woodmeal" title="Code">💻</a></td>
<td align="center"><a href="https://magiclike.codeberg.page/"><img src="https://avatars.githubusercontent.com/u/82117109?v=4?s=100" width="100px;" alt=""/><br /><sub><b>MagicLike</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=MagicLike" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/hisamafahri"><img src="https://avatars.githubusercontent.com/u/65691613?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hisam Fahri</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hisamafahri" title="Code">💻</a></td>
<td align="center"><a href="https://liangchengj.com"><img src="https://avatars.githubusercontent.com/u/48881023?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Liangcheng Juves</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=LiangchengJ" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/attet"><img src="https://avatars.githubusercontent.com/u/1911416?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Atte Timonen</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=attet" title="Code">💻</a></td>
<td align="center"><a href="https://www.linkedin.com/in/joaolmpinto/"><img src="https://avatars.githubusercontent.com/u/1143125?v=4?s=100" width="100px;" alt=""/><br /><sub><b>João Pinto</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=joaompinto" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/Qiming-Liu"><img src="https://avatars.githubusercontent.com/u/68600416?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alan</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=Qiming-Liu" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://74th.tech/"><img src="https://avatars.githubusercontent.com/u/1060011?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Atsushi Morimoto</b></sub></a><br /><a href="#financial-74th" title="Financial">💵</a></td>
<td align="center"><a href="https://arles.red/"><img src="https://avatars.githubusercontent.com/u/5369096?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Arles</b></sub></a><br /><a href="#financial-aarles" title="Financial">💵</a></td>
<td align="center"><a href="https://pentestbook.six2dez.com/"><img src="https://avatars.githubusercontent.com/u/24670991?v=4?s=100" width="100px;" alt=""/><br /><sub><b>six2dez</b></sub></a><br /><a href="#financial-six2dez" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/CandiceJoy"><img src="https://avatars.githubusercontent.com/u/8854890?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Candice</b></sub></a><br /><a href="#financial-CandiceJoy" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/kingrowen"><img src="https://avatars.githubusercontent.com/u/13178700?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Rowen Willabus</b></sub></a><br /><a href="#financial-kingrowen" title="Financial">💵</a></td>
<td align="center"><a href="https://hengy1.top/"><img src="https://avatars.githubusercontent.com/u/98681454?v=4?s=100" width="100px;" alt=""/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href="#financial-HengY1Sky" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/FrancisHG"><img src="https://avatars.githubusercontent.com/u/1611626?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Francis Gelderloos</b></sub></a><br /><a href="#financial-FrancisHG" title="Financial">💵</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/astromasoud"><img src="https://avatars.githubusercontent.com/u/18737721?v=4?s=100" width="100px;" alt=""/><br /><sub><b>astromasoud</b></sub></a><br /><a href="#financial-astromasoud" title="Financial">💵</a></td>
<td align="center"><a href="https://spirit55555.dk/"><img src="https://avatars.githubusercontent.com/u/2357565?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Anders G. Jørgensen</b></sub></a><br /><a href="#financial-Spirit55555" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/djradon"><img src="https://avatars.githubusercontent.com/u/5224156?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dave Richardson</b></sub></a><br /><a href="#financial-djradon" title="Financial">💵</a></td>
<td align="center"><a href="https://twitter.com/tpberntsen"><img src="https://avatars.githubusercontent.com/u/922318?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Thomas Peter Berntsen</b></sub></a><br /><a href="#financial-tpberntsen" title="Financial">💵</a></td>
<td align="center"><a href="https://bandism.net/"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ikko Ashimine</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=eltociear" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/giejqf"><img src="https://avatars.githubusercontent.com/u/9211230?v=4?s=100" width="100px;" alt=""/><br /><sub><b>giejqf</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=giejqf" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/LacazeThomas"><img src="https://avatars.githubusercontent.com/u/19855907?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Thomas LACAZE</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=LacazeThomas" title="Code">💻</a></td>
</tr>
<tr>
<td align="center"><a href="https://pochen.me/"><img src="https://avatars.githubusercontent.com/u/1329716?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Po Chen</b></sub></a><br /><a href="#financial-princemaple" title="Financial">💵</a></td>
<td align="center"><a href="https://victorchandra.carrd.co/"><img src="https://avatars.githubusercontent.com/u/41635105?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Victor Chandra</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=mzmznasipadang" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/daniel347x"><img src="https://avatars.githubusercontent.com/u/309746?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dan Nissenbaum</b></sub></a><br /><a href="#financial-daniel347x" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/DunklerPhoenix"><img src="https://avatars.githubusercontent.com/u/1261305?v=4?s=100" width="100px;" alt=""/><br /><sub><b>RogueThorn</b></sub></a><br /><a href="#financial-DunklerPhoenix" title="Financial">💵</a></td>
<td align="center"><a href="http://spenserblack.github.io"><img src="https://avatars.githubusercontent.com/u/8546709?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Spenser Black</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=spenserblack" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/zuedev"><img src="https://avatars.githubusercontent.com/u/24614929?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alex</b></sub></a><br /><a href="#financial-zuedev" title="Financial">💵</a></td>
<td align="center"><a href="https://hengy1.top/"><img src="https://avatars.githubusercontent.com/u/98681454?v=4?s=100" width="100px;" alt=""/><br /><sub><b>HengY1Coding✨</b></sub></a><br /><a href="#financial-HengY1Cola" title="Financial">💵</a></td>
</tr>
<tr>
<td align="center"><a href="https://www.stackscale.com/"><img src="https://avatars.githubusercontent.com/u/195768?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Carrero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=dcarrero" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/zhoro"><img src="https://avatars.githubusercontent.com/u/1105687?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=zhoro" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/JohnMasoner"><img src="https://avatars.githubusercontent.com/u/42313377?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mason Ma</b></sub></a><br /><a href="#financial-JohnMasoner" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ntimo"><img src="https://avatars.githubusercontent.com/u/6145026?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Timo</b></sub></a><br /><a href="#financial-ntimo" title="Financial">💵</a></td>
<td align="center"><a href="https://www.linkedin.com/in/evinwatson/"><img src="https://avatars.githubusercontent.com/u/24227251?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Evin Watson</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=EvinRWatson" title="Documentation">📖</a></td>
<td align="center"><a href="https://t.me/hendrjl"><img src="https://avatars.githubusercontent.com/u/15981200?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=deulizealand" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/wkricowski"><img src="https://avatars.githubusercontent.com/u/36803521?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href="#financial-wkricowski" title="Financial">💵</a> <a href="https://github.com/Eugeny/tabby/commits?author=wkricowski" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/almzau"><img src="https://avatars.githubusercontent.com/u/29115846?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Allan</b></sub></a><br /><a href="#design-almzau" title="Design">🎨</a></td>
<td align="center"><a href="https://oidamo.de"><img src="https://avatars.githubusercontent.com/u/17959794?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/patric1025"><img src="https://avatars.githubusercontent.com/u/65654040?v=4?s=100" width="100px;" alt=""/><br /><sub><b>patric1025</b></sub></a><br /><a href="#translation-patric1025" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
</tr>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
Este projeto segue a especificação [all-contributors](https://github.com/all-contributors/all-contributors). Contribuições de qualquer tipo são bem vindas!

View File

@@ -21,7 +21,7 @@
<br/>
<p align="center">
Этот README также доступен на: <a href="./README.md">:gb: English</a> · <a href="./README.es-ES.md">:es: Spanish</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.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a>
Этот README также доступен на: <a href="./README.md">:gb: English</a> · <a href="./README.es-ES.md">:es: Spanish</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.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a> · <a href="./README.pt-BR.md">:br: Português</a>
</p>
----
@@ -286,6 +286,18 @@ Pull-запросы и плагины приветствуются!
</tr>
<tr>
<td align="center"><a href="https://www.stackscale.com/"><img src="https://avatars.githubusercontent.com/u/195768?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Carrero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=dcarrero" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/zhoro"><img src="https://avatars.githubusercontent.com/u/1105687?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=zhoro" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/JohnMasoner"><img src="https://avatars.githubusercontent.com/u/42313377?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mason Ma</b></sub></a><br /><a href="#financial-JohnMasoner" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ntimo"><img src="https://avatars.githubusercontent.com/u/6145026?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Timo</b></sub></a><br /><a href="#financial-ntimo" title="Financial">💵</a></td>
<td align="center"><a href="https://www.linkedin.com/in/evinwatson/"><img src="https://avatars.githubusercontent.com/u/24227251?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Evin Watson</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=EvinRWatson" title="Documentation">📖</a></td>
<td align="center"><a href="https://t.me/hendrjl"><img src="https://avatars.githubusercontent.com/u/15981200?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=deulizealand" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/wkricowski"><img src="https://avatars.githubusercontent.com/u/36803521?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href="#financial-wkricowski" title="Financial">💵</a> <a href="https://github.com/Eugeny/tabby/commits?author=wkricowski" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/almzau"><img src="https://avatars.githubusercontent.com/u/29115846?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Allan</b></sub></a><br /><a href="#design-almzau" title="Design">🎨</a></td>
<td align="center"><a href="https://oidamo.de"><img src="https://avatars.githubusercontent.com/u/17959794?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/patric1025"><img src="https://avatars.githubusercontent.com/u/65654040?v=4?s=100" width="100px;" alt=""/><br /><sub><b>patric1025</b></sub></a><br /><a href="#translation-patric1025" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
</tr>
</table>

View File

@@ -21,7 +21,7 @@
<br/>
<p align="center">
本 README 还适用于以下语言: <a href="./README.md">:gb: English</a> · <a href="./README.es-ES.md">:es: Spanish</a> · <a href="./README.ru-RU.md">:ru: Русский</a> · <a href="./README.ko-KR.md">:kr: 한국어</a> · <a href="./README.it-IT.md">:it: Italiano</a> · <a href="./README.de-DE.md">:de: Deutsch</a> · <a href="./README.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</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.it-IT.md">:it: Italiano</a> · <a href="./README.de-DE.md">:de: Deutsch</a> · <a href="./README.ja-JP.md">:jp: 日本語</a> · <a href="./README.id-ID.md">:id: Bahasa Indonesia</a> · <a href="./README.pt-BR.md">:br: Português</a>
</p>
----
@@ -285,6 +285,18 @@
</tr>
<tr>
<td align="center"><a href="https://www.stackscale.com/"><img src="https://avatars.githubusercontent.com/u/195768?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Carrero</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=dcarrero" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/zhoro"><img src="https://avatars.githubusercontent.com/u/1105687?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrii Zhovtiak</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=zhoro" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/JohnMasoner"><img src="https://avatars.githubusercontent.com/u/42313377?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mason Ma</b></sub></a><br /><a href="#financial-JohnMasoner" title="Financial">💵</a></td>
<td align="center"><a href="https://github.com/ntimo"><img src="https://avatars.githubusercontent.com/u/6145026?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Timo</b></sub></a><br /><a href="#financial-ntimo" title="Financial">💵</a></td>
<td align="center"><a href="https://www.linkedin.com/in/evinwatson/"><img src="https://avatars.githubusercontent.com/u/24227251?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Evin Watson</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=EvinRWatson" title="Documentation">📖</a></td>
<td align="center"><a href="https://t.me/hendrjl"><img src="https://avatars.githubusercontent.com/u/15981200?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Hendra Juli</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=deulizealand" title="Documentation">📖</a></td>
<td align="center"><a href="https://github.com/wkricowski"><img src="https://avatars.githubusercontent.com/u/36803521?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Wellinton Kricowski</b></sub></a><br /><a href="#financial-wkricowski" title="Financial">💵</a> <a href="https://github.com/Eugeny/tabby/commits?author=wkricowski" title="Documentation">📖</a></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/almzau"><img src="https://avatars.githubusercontent.com/u/29115846?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Allan</b></sub></a><br /><a href="#design-almzau" title="Design">🎨</a></td>
<td align="center"><a href="https://oidamo.de"><img src="https://avatars.githubusercontent.com/u/17959794?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Benjamin Brandmeier</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=BenjaminBrandmeier" title="Code">💻</a></td>
<td align="center"><a href="https://github.com/patric1025"><img src="https://avatars.githubusercontent.com/u/65654040?v=4?s=100" width="100px;" alt=""/><br /><sub><b>patric1025</b></sub></a><br /><a href="#translation-patric1025" title="Translation">🌍</a></td>
<td align="center"><a href="https://github.com/hermitpopcorn"><img src="https://avatars.githubusercontent.com/u/16042129?v=4?s=100" width="100px;" alt=""/><br /><sub><b>hermitpopcorn</b></sub></a><br /><a href="https://github.com/Eugeny/tabby/commits?author=hermitpopcorn" title="Code">💻</a></td>
</tr>
</table>

View File

@@ -65,7 +65,7 @@ export class Application {
if (process.platform === 'linux') {
app.commandLine.appendSwitch('no-sandbox')
if (((this.configStore.appearance || {}).opacity || 1) !== 1) {
if ((this.configStore.appearance?.opacity || 1) !== 1) {
app.commandLine.appendSwitch('enable-transparent-visuals')
app.disableHardwareAcceleration()
}
@@ -112,7 +112,7 @@ export class Application {
async newWindow (options?: WindowOptions): Promise<Window> {
const window = new Window(this, this.configStore, options)
this.windows.push(window)
if (this.windows.length === 1){
if (this.windows.length === 1) {
window.makeMain()
}
window.visible$.subscribe(visible => {

View File

@@ -1,4 +1,4 @@
import * as fs from 'mz/fs'
import * as fs from 'fs'
import * as path from 'path'
import * as yaml from 'js-yaml'
import { app } from 'electron'

View File

@@ -4,7 +4,6 @@ import { ipcMain } from 'electron'
import { Application } from './app'
import { UTF8Splitter } from './utfSplitter'
import { Subject, debounceTime } from 'rxjs'
import { StringDecoder } from './stringDecoder'
class PTYDataQueue {
private buffers: Buffer[] = []
@@ -91,7 +90,6 @@ class PTYDataQueue {
export class PTY {
private pty: nodePTY.IPty
private outputQueue: PTYDataQueue
private decoder = new StringDecoder()
exited = false
constructor (private id: string, private app: Application, ...args: any[]) {
@@ -101,7 +99,7 @@ export class PTY {
}
this.outputQueue = new PTYDataQueue(this.pty, data => {
setImmediate(() => this.emit('data', this.decoder.write(data)))
setImmediate(() => this.emit('data', data))
})
this.pty.onData(data => this.outputQueue.push(Buffer.from(data)))

View File

@@ -1,105 +0,0 @@
// based on Joyent's StringDecoder
// https://github.com/nodejs/string_decoder/blob/master/lib/string_decoder.js
export class StringDecoder {
lastNeed: number
lastTotal: number
lastChar: Buffer
constructor () {
this.lastNeed = 0
this.lastTotal = 0
this.lastChar = Buffer.allocUnsafe(4)
}
write (buf: Buffer): Buffer {
if (buf.length === 0) {
return buf
}
let r: Buffer|undefined = undefined
let i = 0
if (this.lastNeed) {
r = this.fillLast(buf)
if (r === undefined) {
return Buffer.from('')
}
i = this.lastNeed
this.lastNeed = 0
}
if (i < buf.length) {
return r ? Buffer.concat([r, this.text(buf, i)]) : this.text(buf, i)
}
return r
}
// For UTF-8, a replacement character is added when ending on a partial
// character.
end (buf?: Buffer): Buffer {
const r = buf?.length ? this.write(buf) : Buffer.from('')
if (this.lastNeed) {
console.log('end', r)
return Buffer.concat([r, Buffer.from('\ufffd')])
}
return r
}
// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
// partial character, the character's bytes are buffered until the required
// number of bytes are available.
private text (buf: Buffer, i: number) {
const total = this.utf8CheckIncomplete(buf, i)
if (!this.lastNeed) {
return buf.slice(i)
}
this.lastTotal = total
const end = buf.length - (total - this.lastNeed)
buf.copy(this.lastChar, 0, end)
return buf.slice(i, end)
}
// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
private fillLast (buf: Buffer): Buffer|undefined {
if (this.lastNeed <= buf.length) {
buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed)
return this.lastChar.slice(0, this.lastTotal)
}
buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length)
this.lastNeed -= buf.length
return undefined
}
// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
// continuation byte. If an invalid byte is detected, -2 is returned.
private utf8CheckByte (byte) {
if (byte <= 0x7F) {return 0} else if (byte >> 5 === 0x06) {return 2} else if (byte >> 4 === 0x0E) {return 3} else if (byte >> 3 === 0x1E) {return 4}
return byte >> 6 === 0x02 ? -1 : -2
}
// Checks at most 3 bytes at the end of a Buffer in order to detect an
// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
// needed to complete the UTF-8 character (if applicable) are returned.
private utf8CheckIncomplete (buf, i) {
let j = buf.length - 1
if (j < i) {return 0}
let nb = this.utf8CheckByte(buf[j])
if (nb >= 0) {
if (nb > 0) {this.lastNeed = nb - 1}
return nb
}
if (--j < i || nb === -2) {return 0}
nb = this.utf8CheckByte(buf[j])
if (nb >= 0) {
if (nb > 0) {this.lastNeed = nb - 2}
return nb
}
if (--j < i || nb === -2) {return 0}
nb = this.utf8CheckByte(buf[j])
if (nb >= 0) {
if (nb > 0) {
if (nb === 2) {nb = 0} else {this.lastNeed = nb - 3}
}
return nb
}
return 0
}
}

View File

@@ -89,7 +89,7 @@ export class Window {
}
}
if ((this.configStore.appearance || {}).frame === 'native') {
if (this.configStore.appearance?.frame === 'native') {
bwOptions.frame = true
} else {
if (process.platform === 'darwin') {
@@ -108,7 +108,7 @@ export class Window {
this.window.once('ready-to-show', () => {
if (process.platform === 'darwin') {
this.window.setVibrancy(macOSVibrancyType)
} else if (process.platform === 'win32' && (this.configStore.appearance || {}).vibrancy) {
} else if (process.platform === 'win32' && this.configStore.appearance?.vibrancy) {
this.setVibrancy(true)
}

View File

@@ -37,7 +37,7 @@
"optionalDependencies": {
"@tabby-gang/windows-blurbehind": "^3.0.0",
"macos-native-processlist": "^2.1.0",
"serialport": "10.4.0",
"serialport": "10.5.0",
"serialport-binding-webserialapi": "^1.0.3",
"windows-native-registry": "^3.2.1",
"windows-process-tree": "^0.3.4"
@@ -47,7 +47,7 @@
"@types/node": "18.7.23",
"atomically": "^1.7.0",
"ngx-filesize": "^2.0.16",
"patch-package": "^6.4.7"
"patch-package": "^6.5.0"
},
"peerDependencies": {
"tabby-community-color-schemes": "*",

View File

@@ -31,80 +31,85 @@
"@serialport/bindings-interface" "^1.2.1"
debug "^4.3.3"
"@serialport/bindings-cpp@10.7.0":
version "10.7.0"
resolved "https://registry.yarnpkg.com/@serialport/bindings-cpp/-/bindings-cpp-10.7.0.tgz#9cf7dda78d914ba597933089abe2a8511e875851"
integrity sha512-Xx1wA2UCG2loS32hxNvWJI4smCzGKhWqE85//fLRzHoGgE1lSLe3Nk7W40/ebrlGFHWRbQZmeaIF4chb2XLliA==
"@serialport/bindings-cpp@10.8.0":
version "10.8.0"
resolved "https://registry.yarnpkg.com/@serialport/bindings-cpp/-/bindings-cpp-10.8.0.tgz#79507b57022ac264e963e7fbf3647a3821569a20"
integrity sha512-OMQNJz5kJblbmZN5UgJXLwi2XNtVLxSKmq5VyWuXQVsUIJD4l9UGHnLPqM5LD9u3HPZgDI5w7iYN7gxkQNZJUw==
dependencies:
"@serialport/bindings-interface" "1.2.1"
"@serialport/bindings-interface" "1.2.2"
"@serialport/parser-readline" "^10.2.1"
debug "^4.3.2"
node-addon-api "^4.3.0"
node-addon-api "^5.0.0"
node-gyp-build "^4.3.0"
"@serialport/bindings-interface@1.2.1", "@serialport/bindings-interface@^1.2.1":
"@serialport/bindings-interface@1.2.2":
version "1.2.2"
resolved "https://registry.yarnpkg.com/@serialport/bindings-interface/-/bindings-interface-1.2.2.tgz#c4ae9c1c85e26b02293f62f37435478d90baa460"
integrity sha512-CJaUd5bLvtM9c5dmO9rPBHPXTa9R2UwpkJ0wdh9JCYcbrPWsKz+ErvR0hBLeo7NPeiFdjFO4sonRljiw4d2XiA==
"@serialport/bindings-interface@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@serialport/bindings-interface/-/bindings-interface-1.2.1.tgz#1ee80b0951ef4e4fd8a5a186621feff046aa2faf"
integrity sha512-63Dyqz2gtryRDDckFusOYqLYhR3Hq/M4sEdbF9i/VsvDb6T+tNVgoAKUZ+FMrXXKnCSu+hYbk+MTc0XQANszxw==
"@serialport/parser-byte-length@10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-byte-length/-/parser-byte-length-10.3.0.tgz#c650b8883f716af77196e8466e86861b55290201"
integrity sha512-pJ/VoFemzKRRNDHLhFfPThwP40QrGaEnm9TtwL7o2GihEPwzBg3T0bN13ew5TpbbUYZdMpUtpm3CGfl6av9rUQ==
"@serialport/parser-byte-length@10.5.0":
version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-byte-length/-/parser-byte-length-10.5.0.tgz#f3d4c1c7923222df2f3d3c7c8aaaa207fe373b49"
integrity sha512-eHhr4lHKboq1OagyaXAqkemQ1XyoqbLQC8XJbvccm95o476TmEdW5d7AElwZV28kWprPW68ZXdGF2VXCkJgS2w==
"@serialport/parser-cctalk@10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-cctalk/-/parser-cctalk-10.3.0.tgz#d8fc7ab480910b28362b1ff154c01c170ac201a3"
integrity sha512-8ujmk8EvVbDPrNF4mM33bWvUYJOZ0wXbY3WCRazHRWvyCdL0VO0DQvW81ZqgoTpiDQZm5r8wQu9rmuemahF6vQ==
"@serialport/parser-cctalk@10.5.0":
version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-cctalk/-/parser-cctalk-10.5.0.tgz#0ee88db0768a361b7cfb9a394b74e480c38e1992"
integrity sha512-Iwsdr03xmCKAiibLSr7b3w6ZUTBNiS+PwbDQXdKU/clutXjuoex83XvsOtYVcNZmwJlVNhAUbkG+FJzWwIa4DA==
"@serialport/parser-delimiter@10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-delimiter/-/parser-delimiter-10.3.0.tgz#4bcbbeed7e3c6fed2c116535f0754bbf8a33f015"
integrity sha512-9E4Vj6s0UbbcCCTclwegHGPYjJhdm9qLCS0lowXQDEQC5naZnbsELemMHs93nD9jHPcyx1B4oXkMnVZLxX5TYw==
"@serialport/parser-delimiter@10.5.0":
version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-delimiter/-/parser-delimiter-10.5.0.tgz#b0d93100cdfd0619d020a427d652495073f3b828"
integrity sha512-/uR/yT3jmrcwnl2FJU/2ySvwgo5+XpksDUR4NF/nwTS5i3CcuKS+FKi/tLzy1k8F+rCx5JzpiK+koqPqOUWArA==
"@serialport/parser-inter-byte-timeout@10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-10.3.0.tgz#57e4fceeeeb13415dcded3ef1ba5d28a9fa0c611"
integrity sha512-wKP0QK85NHgvT6BBB1qBfKBBU4pf8kespNXAZBUYmFT+P4n8r8IZE2mqigCD+AiZcfWNQoAizwOsT/Jx/qeVig==
"@serialport/parser-inter-byte-timeout@10.5.0":
version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-10.5.0.tgz#8665ee5e6138f794ac055e83ef2d1c3653a577c0"
integrity sha512-WPvVlSx98HmmUF9jjK6y9mMp3Wnv6JQA0cUxLeZBgS74TibOuYG3fuUxUWGJALgAXotOYMxfXSezJ/vSnQrkhQ==
"@serialport/parser-packet-length@10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-packet-length/-/parser-packet-length-10.3.0.tgz#9faefc91841c011925a6d4fa4fad6ed44bf11ed6"
integrity sha512-bj0cWzt8YSQj/E5fRQVYdi4TsfTlZQrXlXrUwjyTsCONv8IPOHzsz+yY0fw5SEMiJtaLyqvPkCHLsttOd/zFsg==
"@serialport/parser-packet-length@10.5.0":
version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-packet-length/-/parser-packet-length-10.5.0.tgz#4c4d733bdff8cc4749f2bd750e42e66f8f478def"
integrity sha512-jkpC/8w4/gUBRa2Teyn7URv1D7T//0lGj27/4u9AojpDVXsR6dtdcTG7b7dNirXDlOrSLvvN7aS5/GNaRlEByw==
"@serialport/parser-readline@10.3.0", "@serialport/parser-readline@^10.2.1":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-readline/-/parser-readline-10.3.0.tgz#7db9143ce9a2537a4086b3824a70fe53ae2107b3"
integrity sha512-ki3ATZ3/RAqnqGROBKE7k+OeZ0DZXZ53GTca4q71OU5RazbbNhTOBQLKLXD3v9QZXCMJdg4hGW/2Y0DuMUqMQg==
"@serialport/parser-readline@10.5.0", "@serialport/parser-readline@^10.2.1":
version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-readline/-/parser-readline-10.5.0.tgz#df23365ae7f45679b1735deae26f72ba42802862"
integrity sha512-0aXJknodcl94W9zSjvU+sLdXiyEG2rqjQmvBWZCr8wJZjWEtv3RgrnYiWq4i2OTOyC8C/oPK8ZjpBjQptRsoJQ==
dependencies:
"@serialport/parser-delimiter" "10.3.0"
"@serialport/parser-delimiter" "10.5.0"
"@serialport/parser-ready@10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-ready/-/parser-ready-10.3.0.tgz#6a93d8970dc827e57829a9ee54802469be71f185"
integrity sha512-1owywJ4p592dJyVrEJZPIh6pUZ3/y/LN6kGTDH2wxdewRUITo/sGvDy0er5i2+dJD3yuowiAz0dOHSdz8tevJA==
"@serialport/parser-ready@10.5.0":
version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-ready/-/parser-ready-10.5.0.tgz#1d9029f57b1abd664cb468e21bfccf7b44c6e8ea"
integrity sha512-QIf65LTvUoxqWWHBpgYOL+soldLIIyD1bwuWelukem2yDZVWwEjR288cLQ558BgYxH4U+jLAQahhqoyN1I7BaA==
"@serialport/parser-regex@10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-regex/-/parser-regex-10.3.0.tgz#7c7314036535414bb7ada3520598d233f5ea09d0"
integrity sha512-tIogTs7CvTH+UUFnsvE7i33MSISyTPTGPWlglWYH2/5coipXY503jlaYS1YGe818wWNcSx6YAjMZRdhTWwM39w==
"@serialport/parser-regex@10.5.0":
version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-regex/-/parser-regex-10.5.0.tgz#f98eab6e3d9bc99086269e9acf39a82db36d245f"
integrity sha512-9jnr9+PCxRoLjtGs7uxwsFqvho+rxuJlW6ZWSB7oqfzshEZWXtTJgJRgac/RuLft4hRlrmRz5XU40i3uoL4HKw==
"@serialport/parser-slip-encoder@10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-slip-encoder/-/parser-slip-encoder-10.3.0.tgz#ff01cd7cda2258ad2ca3ebb113145a0aa7272c78"
integrity sha512-JI0ILF5sylWn8f0MuMzHFBix/iMUTa79/Z95KaPZYnVaEdA7h7hh/o21Jmon/26P3RJwL1SNJCjZ81zfan+LtQ==
"@serialport/parser-slip-encoder@10.5.0":
version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-slip-encoder/-/parser-slip-encoder-10.5.0.tgz#cb79ac0fda1fc87f049690ff7b498c787da67991"
integrity sha512-wP8m+uXQdkWSa//3n+VvfjLthlabwd9NiG6kegf0fYweLWio8j4pJRL7t9eTh2Lbc7zdxuO0r8ducFzO0m8CQw==
"@serialport/parser-spacepacket@10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-spacepacket/-/parser-spacepacket-10.3.0.tgz#447d49b0690527ea770410ffe0a2ade2079ae7b2"
integrity sha512-PDF73ClEPsClD1FEJZHNuBevDKsJCkqy/XD5+S5eA6+tY5D4HLrVgSWsg+3qqB6+dlpwf2CzHe+uO8D3teuKHA==
"@serialport/parser-spacepacket@10.5.0":
version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/parser-spacepacket/-/parser-spacepacket-10.5.0.tgz#2fc077c0ec16a9532c511ad5f2ab12d588796bc7"
integrity sha512-BEZ/HAEMwOd8xfuJSeI/823IR/jtnThovh7ils90rXD4DPL1ZmrP4abAIEktwe42RobZjIPfA4PaVfyO0Fjfhg==
"@serialport/stream@10.3.0":
version "10.3.0"
resolved "https://registry.yarnpkg.com/@serialport/stream/-/stream-10.3.0.tgz#fdb13ed4487379615819203217060b114548c0a6"
integrity sha512-7sooi5fHogYNVEJwxVdg872xO6TuMgQd2E9iRmv+o8pk/1dbBnPkmH6Ka3st1mVE+0KnIJqVlgei+ncSsqXIGw==
"@serialport/stream@10.5.0":
version "10.5.0"
resolved "https://registry.yarnpkg.com/@serialport/stream/-/stream-10.5.0.tgz#cda8fb3e8d03094b0962a3d14b73adfcd591be58"
integrity sha512-gbcUdvq9Kyv2HsnywS7QjnEB28g+6OGB5Z8TLP7X+UPpoMIWoUsoQIq5Kt0ZTgMoWn3JGM2lqwTsSHF+1qhniA==
dependencies:
"@serialport/bindings-interface" "1.2.1"
"@serialport/bindings-interface" "1.2.2"
debug "^4.3.2"
"@serialport/stream@^9.0.2":
@@ -238,7 +243,7 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
dependencies:
color-convert "^1.9.0"
ansi-styles@^4.0.0:
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz"
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
@@ -486,7 +491,7 @@ caseless@~0.12.0:
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
chalk@^2.0.1, chalk@^2.4.2:
chalk@^2.0.1:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -495,6 +500,14 @@ chalk@^2.0.1, chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4:
version "1.1.4"
resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz"
@@ -755,14 +768,7 @@ debug@^3.1.0:
dependencies:
ms "^2.1.1"
debug@^4.0.1, debug@^4.3.2, debug@^4.3.3:
version "4.3.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
dependencies:
ms "2.1.2"
debug@^4.3.4:
debug@^4.0.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -1381,6 +1387,11 @@ has-flag@^3.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
has-flag@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
has-symbols@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8"
@@ -2145,10 +2156,10 @@ minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5:
version "1.2.6"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6:
version "1.2.7"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0:
version "2.9.0"
@@ -2287,6 +2298,11 @@ node-addon-api@^4.0.0, node-addon-api@^4.3.0:
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==
node-addon-api@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.0.0.tgz#7d7e6f9ef89043befdb20c1989c905ebde18c501"
integrity sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==
node-fetch-npm@^2.0.2:
version "2.0.4"
resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz#6507d0e17a9ec0be3bec516958a497cec54bf5a4"
@@ -2786,24 +2802,25 @@ parse-json@^2.2.0:
dependencies:
error-ex "^1.2.0"
patch-package@^6.4.7:
version "6.4.7"
resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.4.7.tgz#2282d53c397909a0d9ef92dae3fdeb558382b148"
integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==
patch-package@^6.5.0:
version "6.5.0"
resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.5.0.tgz#feb058db56f0005da59cfa316488321de585e88a"
integrity sha512-tC3EqJmo74yKqfsMzELaFwxOAu6FH6t+FzFOsnWAuARm7/n2xB5AOeOueE221eM9gtMuIKMKpF9tBy/X2mNP0Q==
dependencies:
"@yarnpkg/lockfile" "^1.1.0"
chalk "^2.4.2"
chalk "^4.1.2"
cross-spawn "^6.0.5"
find-yarn-workspace-root "^2.0.0"
fs-extra "^7.0.1"
is-ci "^2.0.0"
klaw-sync "^6.0.0"
minimist "^1.2.0"
minimist "^1.2.6"
open "^7.4.2"
rimraf "^2.6.3"
semver "^5.6.0"
slash "^2.0.0"
tmp "^0.0.33"
yaml "^1.10.2"
path-exists@^3.0.0:
version "3.0.0"
@@ -3264,24 +3281,24 @@ serialport-binding-webserialapi@^1.0.3:
"@serialport/binding-abstract" "^9.0.2"
"@serialport/stream" "^9.0.2"
serialport@10.4.0:
version "10.4.0"
resolved "https://registry.yarnpkg.com/serialport/-/serialport-10.4.0.tgz#93c95ecccc0e314d5bbee3f06cde2c70be70e671"
integrity sha512-PszPM5SnFMgSXom60PkKS2A9nMlNbHkuoyRBlzdSWw9rmgOn258+V0dYbWMrETJMM+TJV32vqBzjg5MmmUMwMw==
serialport@10.5.0:
version "10.5.0"
resolved "https://registry.yarnpkg.com/serialport/-/serialport-10.5.0.tgz#b85f614def6e8914e5865c798b0555330903a0f8"
integrity sha512-7OYLDsu5i6bbv3lU81pGy076xe0JwpK6b49G6RjNvGibstUqQkI+I3/X491yBGtf4gaqUdOgoU1/5KZ/XxL4dw==
dependencies:
"@serialport/binding-mock" "10.2.2"
"@serialport/bindings-cpp" "10.7.0"
"@serialport/parser-byte-length" "10.3.0"
"@serialport/parser-cctalk" "10.3.0"
"@serialport/parser-delimiter" "10.3.0"
"@serialport/parser-inter-byte-timeout" "10.3.0"
"@serialport/parser-packet-length" "10.3.0"
"@serialport/parser-readline" "10.3.0"
"@serialport/parser-ready" "10.3.0"
"@serialport/parser-regex" "10.3.0"
"@serialport/parser-slip-encoder" "10.3.0"
"@serialport/parser-spacepacket" "10.3.0"
"@serialport/stream" "10.3.0"
"@serialport/bindings-cpp" "10.8.0"
"@serialport/parser-byte-length" "10.5.0"
"@serialport/parser-cctalk" "10.5.0"
"@serialport/parser-delimiter" "10.5.0"
"@serialport/parser-inter-byte-timeout" "10.5.0"
"@serialport/parser-packet-length" "10.5.0"
"@serialport/parser-readline" "10.5.0"
"@serialport/parser-ready" "10.5.0"
"@serialport/parser-regex" "10.5.0"
"@serialport/parser-slip-encoder" "10.5.0"
"@serialport/parser-spacepacket" "10.5.0"
"@serialport/stream" "10.5.0"
debug "^4.3.3"
set-blocking@^2.0.0, set-blocking@~2.0.0:
@@ -3588,6 +3605,13 @@ supports-color@^5.3.0:
dependencies:
has-flag "^3.0.0"
supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
dependencies:
has-flag "^4.0.0"
tar-fs@^2.0.0:
version "2.1.1"
resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz"
@@ -4000,6 +4024,11 @@ yallist@^4.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yaml@^1.10.2:
version "1.10.2"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
yargs-parser@^15.0.1:
version "15.0.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3"

File diff suppressed because it is too large Load Diff

View File

@@ -1,52 +1,63 @@
:: Copyright (c) 2012 Martin Ridgers
:: License: http://opensource.org/licenses/MIT
@echo off
set clink_profile_arg=
set clink_quiet_arg=
:: Mimic cmd.exe's behaviour when starting from the start menu.
if /i "%1"=="startmenu" (
cd /d "%userprofile%"
shift /1
)
:: Check for the --profile option.
if /i "%1"=="--profile" (
set clink_profile_arg=--profile "%~2"
shift /1
shift /1
)
:: Check for the --quiet option.
if /i "%1"=="--quiet" (
set clink_quiet_arg= --quiet
shift /1
)
:: If the .bat is run without any arguments, then start a cmd.exe instance.
if "%1"=="" (
call :launch
goto :end
)
:: Pass through to appropriate loader.
if /i "%processor_architecture%"=="x86" (
"%~dp0\clink_x86.exe" %*
) else if /i "%processor_architecture%"=="amd64" (
if defined processor_architew6432 (
"%~dp0\clink_x86.exe" %*
) else (
"%~dp0\clink_x64.exe" %*
)
)
:end
set clink_profile_arg=
set clink_quiet_arg=
goto :eof
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:launch
start "Clink" cmd.exe /s /k ""%~dpnx0" inject %clink_profile_arg%%clink_quiet_arg%"
exit /b 0
:: Copyright (c) 2012 Martin Ridgers
:: License: http://opensource.org/licenses/MIT
@echo off
setlocal enableextensions
set clink_profile_arg=
set clink_quiet_arg=
:: Mimic cmd.exe's behaviour when starting from the start menu.
if /i "%1"=="startmenu" (
cd /d "%userprofile%"
shift
)
:: Check for the --profile option.
if /i "%1"=="--profile" (
set clink_profile_arg=--profile "%~2"
shift
shift
)
:: Check for the --quiet option.
if /i "%1"=="--quiet" (
set clink_quiet_arg= --quiet
shift
)
:: If the .bat is run without any arguments, then start a cmd.exe instance.
if "%1"=="" (
call :launch
goto :end
)
:: Test for autorun.
if defined CLINK_NOAUTORUN if /i "%1"=="inject" if /i "%2"=="--autorun" goto :end
:: Endlocal before inject tags the prompt.
endlocal
:: Pass through to appropriate loader.
if /i "%processor_architecture%"=="x86" (
"%~dp0\clink_x86.exe" %*
) else if /i "%processor_architecture%"=="arm64" (
"%~dp0\clink_arm64.exe" %*
) else if /i "%processor_architecture%"=="amd64" (
if defined processor_architew6432 (
"%~dp0\clink_x86.exe" %*
) else (
"%~dp0\clink_x64.exe" %*
)
)
:end
goto :eof
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:launch
setlocal
set WT_PROFILE_ID=
set WT_SESSION=
start "Clink" cmd.exe /s /k ""%~dpnx0" inject %clink_profile_arg%%clink_quiet_arg%"
endlocal
exit /b 0

View File

@@ -1,5 +1,5 @@
-- This file is intentionally blank.
--
-- The old clink.lua file is no longer used, and this blank file ensures if a
-- new clink version is copied over an old clink version, it won't accidentally
-- use an obsolete leftover clink.lua file.
-- This file is intentionally blank.
--
-- The old clink.lua file is no longer used, and this blank file ensures if a
-- new clink version is copied over an old clink version, it won't accidentally
-- use an obsolete leftover clink.lua file.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,13 @@
# When this file is named "default_inputrc" and is in the binaries
# directory or profile directory, it provides enhanced default settings.
# Override the built-in Readline defaults with ones that provide a more
# enhanced Clink experience.
colored-completion-prefix on
colored-stats on
mark-symlinked-directories on
completion-auto-query-items on
history-point-at-end-of-anchored-search on
search-ignore-case on

View File

@@ -0,0 +1,34 @@
# When this file is named "default_settings" and is in the binaries
# directory or profile directory, it provides enhanced default settings.
# Override built-in default settings with ones that provide a more
# enhanced Clink experience.
autosuggest.enable = True
clink.default_bindings = windows
cmd.ctrld_exits = False
color.arginfo = sgr 38;5;172
color.argmatcher = sgr 1;38;5;40
color.cmd = sgr 1;38;5;231
color.cmdredir = sgr 38;5;172
color.cmdsep = sgr 38;5;214
color.comment_row = sgr 38;5;87;48;5;18
color.description = sgr 38;5;39
color.doskey = sgr 1;38;5;75
color.executable = sgr 1;38;5;33
color.filtered = sgr 38;5;231
color.flag = sgr 38;5;117
color.hidden = sgr 38;5;160
color.histexpand = sgr 97;48;5;55
color.horizscroll = sgr 38;5;16;48;5;30
color.input = sgr 38;5;222
color.readonly = sgr 38;5;28
color.selected_completion = sgr 38;5;16;48;5;254
color.selection = sgr 38;5;16;48;5;179
color.suggestion = sgr 38;5;239
color.unrecognized = sgr 38;5;203
history.max_lines = 25000
history.time_stamp = show
match.expand_envvars = True
match.substring = True

2379
locale/af-ZA.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -11,7 +11,7 @@ msgstr ""
msgid "{name} copy"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:76
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:82
msgid "A second font family used to display characters missing in the main font"
msgstr ""
@@ -52,7 +52,7 @@ msgstr ""
msgid "Add..."
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:83
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:89
msgid "Additional space between lines"
msgstr ""
@@ -79,7 +79,7 @@ msgstr ""
msgid "Agent type"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:170
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:172
msgid "Allows opening .bat files in tabs, but breaks some shells"
msgstr ""
@@ -120,7 +120,7 @@ msgstr ""
msgid "Ask before closing the browser tab"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:141
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:143
msgid "Audible"
msgstr ""
@@ -136,7 +136,7 @@ msgstr ""
msgid "Auto"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:154
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:156
msgid "Auto-open a terminal on app start"
msgstr ""
@@ -193,10 +193,14 @@ msgstr ""
msgid "Bottom"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:114
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:109
msgid "Bracketed paste (requires shell support)"
msgstr ""
#: tabby-terminal/src/services/multifocus.service.ts:19
msgid "Broadcast mode. Click anywhere to cancel."
msgstr ""
#: locale/tmp-html/tabby-plugin-manager/src/components/pluginsSettingsTab.component.html:54
#: tabby-settings/src/components/profilesSettingsTab.component.ts:174
msgid "Built-in"
@@ -214,7 +218,7 @@ msgstr ""
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:79
#: tabby-settings/src/components/configSyncSettingsTab.component.ts:99
#: tabby-ssh/src/sftpContextMenu.ts:40
#: tabby-terminal/src/api/baseTerminalTab.component.ts:468
#: tabby-terminal/src/api/baseTerminalTab.component.ts:474
msgid "Cancel"
msgstr ""
@@ -222,6 +226,10 @@ msgstr ""
msgid "Change baud rate"
msgstr ""
#: tabby-core/src/tabContextMenu.ts:133
msgid "Change tab color"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:12
msgid "Change the master passphrase"
msgstr ""
@@ -243,12 +251,12 @@ msgstr ""
msgid "Clear terminal"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:99
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:94
msgid "Clipboard"
msgstr ""
#: locale/tmp-html/tabby-core/src/components/safeModeModal.component.html:7
#: tabby-core/src/tabContextMenu.ts:34
#: tabby-core/src/tabContextMenu.ts:33
msgid "Close"
msgstr ""
@@ -256,7 +264,7 @@ msgstr ""
msgid "Close and never show again"
msgstr ""
#: tabby-core/src/hotkeys.ts:237
#: tabby-core/src/hotkeys.ts:241
msgid "Close focused pane"
msgstr ""
@@ -264,7 +272,8 @@ msgstr ""
msgid "Close other tabs"
msgstr ""
#: tabby-core/src/hotkeys.ts:25
#: tabby-core/src/hotkeys.ts:29
#: tabby-core/src/tabContextMenu.ts:34
msgid "Close tab"
msgstr ""
@@ -276,8 +285,12 @@ msgstr ""
msgid "Close tabs to the right"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:187
msgid "Close the window after closing the last tab"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/editProfileModal.component.html:35
#: tabby-core/src/tabContextMenu.ts:122
#: tabby-core/src/tabContextMenu.ts:132
msgid "Color"
msgstr ""
@@ -285,7 +298,7 @@ msgstr ""
msgid "Color scheme"
msgstr ""
#: tabby-core/src/hotkeys.ts:69
#: tabby-core/src/hotkeys.ts:73
msgid "Combine all tabs into the current tab"
msgstr ""
@@ -297,6 +310,10 @@ msgstr ""
msgid "Command's stdin/stdout is used instead of a network connection"
msgstr ""
#: tabby-core/src/services/commands.service.ts:77
msgid "Commands"
msgstr ""
#: tabby-core/src/theme.ts:20
msgid "Compact"
msgstr ""
@@ -327,7 +344,7 @@ msgstr ""
msgid "Connect through a proxy server"
msgstr ""
#: tabby-core/src/index.ts:214
#: tabby-core/src/index.ts:219
#: tabby-core/src/services/profiles.service.ts:173
msgid "Connect to \"%s\"..."
msgstr ""
@@ -355,14 +372,14 @@ msgstr ""
msgid "Connection name will be used instead"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:64
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61
msgid "Context menu"
msgstr ""
#: tabby-terminal/src/api/baseTerminalTab.component.ts:203
#: tabby-terminal/src/api/baseTerminalTab.component.ts:211
#: tabby-terminal/src/api/baseTerminalTab.component.ts:561
#: tabby-terminal/src/api/baseTerminalTab.component.ts:765
#: tabby-terminal/src/api/baseTerminalTab.component.ts:219
#: tabby-terminal/src/api/baseTerminalTab.component.ts:227
#: tabby-terminal/src/api/baseTerminalTab.component.ts:542
#: tabby-terminal/src/api/baseTerminalTab.component.ts:756
#: tabby-terminal/src/tabContextMenu.ts:29
msgid "Copied"
msgstr ""
@@ -376,7 +393,7 @@ msgstr ""
msgid "Copy current path"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:102
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:97
msgid "Copy on select"
msgstr ""
@@ -384,7 +401,7 @@ msgstr ""
msgid "Copy to clipboard"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:108
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:103
msgid "Copy with formatting"
msgstr ""
@@ -413,7 +430,7 @@ msgstr ""
msgid "Current host key fingerprint"
msgstr ""
#: tabby-core/src/tabContextMenu.ts:173
#: tabby-core/src/tabContextMenu.ts:184
msgid "Current process: {name}"
msgstr ""
@@ -425,7 +442,7 @@ msgstr ""
msgid "Custom"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:89
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:95
msgid "Custom CSS"
msgstr ""
@@ -437,11 +454,11 @@ msgstr ""
msgid "Debugging"
msgstr ""
#: tabby-core/src/hotkeys.ts:253
#: tabby-core/src/hotkeys.ts:257
msgid "Decrease horizontal split size"
msgstr ""
#: tabby-core/src/hotkeys.ts:245
#: tabby-core/src/hotkeys.ts:249
msgid "Decrease vertical split size"
msgstr ""
@@ -528,11 +545,11 @@ msgstr ""
msgid "Disable dynamic tab title"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:210
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:216
msgid "Disable fluent background while dragging"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:203
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:209
msgid "Disable GPU acceleration"
msgstr ""
@@ -593,7 +610,7 @@ msgstr ""
msgid "Docking"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:80
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:75
msgid "Double-click selection will stop at these characters"
msgstr ""
@@ -609,15 +626,16 @@ msgstr ""
msgid "Draw bold text in bright colors"
msgstr ""
#: tabby-core/src/tabContextMenu.ts:118
#: tabby-core/src/tabContextMenu.ts:127
msgid "Duplicate"
msgstr ""
#: tabby-local/src/tabContextMenu.ts:121
#: tabby-local/src/tabContextMenu.ts:123
msgid "Duplicate as administrator"
msgstr ""
#: tabby-core/src/hotkeys.ts:57
#: tabby-core/src/hotkeys.ts:61
#: tabby-core/src/tabContextMenu.ts:128
msgid "Duplicate tab"
msgstr ""
@@ -695,7 +713,7 @@ msgstr ""
msgid "Export"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:75
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:81
msgid "Fallback font"
msgstr ""
@@ -715,11 +733,11 @@ msgstr ""
msgid "Fixed"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:211
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:217
msgid "Fluent background sometimes causes drag lag"
msgstr ""
#: tabby-local/src/tabContextMenu.ts:136
#: tabby-local/src/tabContextMenu.ts:145
msgid "Focus all panes"
msgstr ""
@@ -727,15 +745,22 @@ msgstr ""
msgid "Focus all panes at once (broadcast)"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:195
#: tabby-local/src/tabContextMenu.ts:138
msgid "Focus all tabs"
msgstr ""
#: tabby-terminal/src/hotkeys.ts:82
msgid "Focus all tabs at once (broadcast)"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:201
msgid "Focus follows mouse"
msgstr ""
#: tabby-core/src/hotkeys.ts:193
#: tabby-core/src/hotkeys.ts:197
msgid "Focus next pane"
msgstr ""
#: tabby-core/src/hotkeys.ts:197
#: tabby-core/src/hotkeys.ts:201
#: tabby-core/src/hotkeys.ts:205
#: tabby-core/src/hotkeys.ts:209
@@ -744,26 +769,27 @@ msgstr ""
#: tabby-core/src/hotkeys.ts:221
#: tabby-core/src/hotkeys.ts:225
#: tabby-core/src/hotkeys.ts:229
#: tabby-core/src/hotkeys.ts:233
msgid "Focus pane {number}"
msgstr ""
#: tabby-core/src/hotkeys.ts:189
#: tabby-core/src/hotkeys.ts:193
msgid "Focus previous pane"
msgstr ""
#: tabby-core/src/hotkeys.ts:173
#: tabby-core/src/hotkeys.ts:177
msgid "Focus the pane above"
msgstr ""
#: tabby-core/src/hotkeys.ts:177
#: tabby-core/src/hotkeys.ts:181
msgid "Focus the pane below"
msgstr ""
#: tabby-core/src/hotkeys.ts:181
#: tabby-core/src/hotkeys.ts:185
msgid "Focus the pane on the left"
msgstr ""
#: tabby-core/src/hotkeys.ts:185
#: tabby-core/src/hotkeys.ts:189
msgid "Focus the pane on the right"
msgstr ""
@@ -771,7 +797,7 @@ msgstr ""
msgid "Font"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:189
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:195
msgid "For keyboard shortcuts"
msgstr ""
@@ -853,7 +879,7 @@ msgstr ""
msgid "Group"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:200
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:206
msgid "Hacks"
msgstr ""
@@ -940,11 +966,11 @@ msgstr ""
msgid "Immediately echoes your input locally"
msgstr ""
#: tabby-core/src/hotkeys.ts:249
#: tabby-core/src/hotkeys.ts:253
msgid "Increase horizontal split size"
msgstr ""
#: tabby-core/src/hotkeys.ts:241
#: tabby-core/src/hotkeys.ts:245
msgid "Increase vertical split size"
msgstr ""
@@ -1070,7 +1096,7 @@ msgstr ""
msgid "Line editor, input is sent after you press Enter"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:82
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:88
msgid "Line padding"
msgstr ""
@@ -1113,10 +1139,14 @@ msgstr ""
msgid "Max Keep Alive Count"
msgstr ""
#: tabby-core/src/hotkeys.ts:169
#: tabby-core/src/hotkeys.ts:173
msgid "Maximize the active pane"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/appearanceSettingsTab.component.html:75
msgid "Minimum contrast ratio"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/configSyncSettingsTab.component.html:43
msgid "Modified on {date}"
msgstr ""
@@ -1125,11 +1155,11 @@ msgstr ""
msgid "Mouse"
msgstr ""
#: tabby-core/src/hotkeys.ts:45
#: tabby-core/src/hotkeys.ts:49
msgid "Move tab to the left"
msgstr ""
#: tabby-core/src/hotkeys.ts:49
#: tabby-core/src/hotkeys.ts:53
msgid "Move tab to the right"
msgstr ""
@@ -1137,7 +1167,7 @@ msgstr ""
msgid "Move to \"Ungrouped\""
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:196
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:202
msgid "Moving the mouse over an inactive pane will cause it to activate"
msgstr ""
@@ -1158,7 +1188,7 @@ msgstr ""
msgid "Native"
msgstr ""
#: tabby-local/src/tabContextMenu.ts:103
#: tabby-local/src/tabContextMenu.ts:105
msgid "New admin tab"
msgstr ""
@@ -1179,7 +1209,7 @@ msgstr ""
msgid "New profile"
msgstr ""
#: tabby-local/src/tabContextMenu.ts:30
#: tabby-local/src/tabContextMenu.ts:31
msgid "New profile name"
msgstr ""
@@ -1187,12 +1217,12 @@ msgstr ""
msgid "New tab"
msgstr ""
#: tabby-core/src/hotkeys.ts:268
#: tabby-core/src/hotkeys.ts:272
msgid "New tab: {profile}"
msgstr ""
#: tabby-local/src/buttonProvider.ts:20
#: tabby-local/src/tabContextMenu.ts:77
#: tabby-local/src/tabContextMenu.ts:79
msgid "New terminal"
msgstr ""
@@ -1204,11 +1234,11 @@ msgstr ""
msgid "New Window"
msgstr ""
#: tabby-local/src/tabContextMenu.ts:87
#: tabby-local/src/tabContextMenu.ts:89
msgid "New with profile"
msgstr ""
#: tabby-core/src/hotkeys.ts:37
#: tabby-core/src/hotkeys.ts:41
msgid "Next tab"
msgstr ""
@@ -1216,7 +1246,7 @@ msgstr ""
msgid "No color"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:90
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:85
msgid "No modifier"
msgstr ""
@@ -1238,11 +1268,11 @@ msgstr ""
msgid "Not found"
msgstr ""
#: tabby-core/src/tabContextMenu.ts:198
#: tabby-core/src/tabContextMenu.ts:209
msgid "Notify on activity"
msgstr ""
#: tabby-core/src/tabContextMenu.ts:176
#: tabby-core/src/tabContextMenu.ts:187
msgid "Notify when done"
msgstr ""
@@ -1251,8 +1281,8 @@ msgid "Number of lines kept in the buffer"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:70
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:135
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:61
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:137
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:60
msgid "Off"
msgstr ""
@@ -1341,11 +1371,11 @@ msgstr ""
msgid "Overwrite the local config and start syncing?"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:188
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:194
msgid "Pane resize step"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:185
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:191
msgid "Panes"
msgstr ""
@@ -1366,8 +1396,8 @@ msgstr ""
msgid "Password"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:67
#: tabby-terminal/src/api/baseTerminalTab.component.ts:467
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:62
#: tabby-terminal/src/api/baseTerminalTab.component.ts:473
#: tabby-terminal/src/tabContextMenu.ts:34
msgid "Paste"
msgstr ""
@@ -1376,11 +1406,15 @@ msgstr ""
msgid "Paste from clipboard"
msgstr ""
#: tabby-terminal/src/api/baseTerminalTab.component.ts:474
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:63
msgid "Paste if no selection, else copy"
msgstr ""
#: tabby-terminal/src/api/baseTerminalTab.component.ts:480
msgid "Paste multiple lines?"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:73
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:68
msgid "Paste on middle-click"
msgstr ""
@@ -1428,11 +1462,11 @@ msgstr ""
msgid "Prevents accidental closing"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:115
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:110
msgid "Prevents accidental execution of pasted commands"
msgstr ""
#: tabby-core/src/hotkeys.ts:41
#: tabby-core/src/hotkeys.ts:45
msgid "Previous tab"
msgstr ""
@@ -1440,11 +1474,11 @@ msgstr ""
msgid "Private keys"
msgstr ""
#: tabby-core/src/tabContextMenu.ts:184
#: tabby-core/src/tabContextMenu.ts:195
msgid "Process completed"
msgstr ""
#: tabby-core/src/tabContextMenu.ts:140
#: tabby-core/src/tabContextMenu.ts:151
msgid "Profile name"
msgstr ""
@@ -1475,7 +1509,7 @@ msgstr ""
msgid "Puts all of Tabby's configuration into the vault"
msgstr ""
#: tabby-core/src/index.ts:213
#: tabby-core/src/index.ts:218
#: tabby-core/src/services/profiles.service.ts:172
msgid "Quick connect"
msgstr ""
@@ -1526,20 +1560,25 @@ msgstr ""
msgid "Remote"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:124
msgid "Remove whitespace and newlines around the copied text"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/vaultSettingsTab.component.html:25
#: tabby-core/src/tabContextMenu.ts:114
#: tabby-core/src/tabContextMenu.ts:120
msgid "Rename"
msgstr ""
#: tabby-core/src/hotkeys.ts:21
msgid "Rename Tab"
#: tabby-core/src/hotkeys.ts:25
#: tabby-core/src/tabContextMenu.ts:121
msgid "Rename tab"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:3
msgid "Rendering"
msgstr ""
#: tabby-core/src/hotkeys.ts:29
#: tabby-core/src/hotkeys.ts:33
msgid "Reopen last tab"
msgstr ""
@@ -1553,7 +1592,7 @@ msgstr ""
msgid "Report a problem"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:86
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:81
msgid "Require a key to click links"
msgstr ""
@@ -1573,7 +1612,7 @@ msgstr ""
msgid "Restart current Telnet session"
msgstr ""
#: tabby-core/src/hotkeys.ts:61
#: tabby-core/src/hotkeys.ts:65
msgid "Restart tab"
msgstr ""
@@ -1581,7 +1620,7 @@ msgstr ""
msgid "Restart the app to apply changes"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:160
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:162
msgid "Restore terminal tabs on app start"
msgstr ""
@@ -1617,15 +1656,15 @@ msgstr ""
msgid "Save and apply"
msgstr ""
#: tabby-local/src/tabContextMenu.ts:27
#: tabby-local/src/tabContextMenu.ts:28
msgid "Save as profile"
msgstr ""
#: tabby-core/src/tabContextMenu.ts:137
#: tabby-core/src/tabContextMenu.ts:148
msgid "Save layout as profile"
msgstr ""
#: tabby-local/src/tabContextMenu.ts:48
#: tabby-local/src/tabContextMenu.ts:49
msgid "Saved"
msgstr ""
@@ -1637,19 +1676,19 @@ msgstr ""
msgid "Scroll on input"
msgstr ""
#: tabby-terminal/src/hotkeys.ts:90
#: tabby-terminal/src/hotkeys.ts:94
msgid "Scroll terminal one page down"
msgstr ""
#: tabby-terminal/src/hotkeys.ts:86
#: tabby-terminal/src/hotkeys.ts:90
msgid "Scroll terminal one page up"
msgstr ""
#: tabby-terminal/src/hotkeys.ts:94
#: tabby-terminal/src/hotkeys.ts:98
msgid "Scroll terminal to bottom"
msgstr ""
#: tabby-terminal/src/hotkeys.ts:82
#: tabby-terminal/src/hotkeys.ts:86
msgid "Scroll terminal to top"
msgstr ""
@@ -1698,7 +1737,7 @@ msgstr ""
msgid "Select file storage"
msgstr ""
#: tabby-core/src/index.ts:225
#: tabby-core/src/index.ts:230
msgid "Select profile"
msgstr ""
@@ -1741,7 +1780,7 @@ msgstr ""
msgid "Set password"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:169
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:171
msgid "Set Tabby as %COMSPEC%"
msgstr ""
@@ -1762,7 +1801,7 @@ msgstr ""
msgid "Shell"
msgstr ""
#: tabby-terminal/src/api/baseTerminalTab.component.ts:563
#: tabby-terminal/src/api/baseTerminalTab.component.ts:544
msgid "Shell does not support current path detection"
msgstr ""
@@ -1770,11 +1809,11 @@ msgstr ""
msgid "Shell integration"
msgstr ""
#: tabby-core/src/hotkeys.ts:272
#: tabby-core/src/hotkeys.ts:276
msgid "Show {type} profile selector"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:122
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:117
msgid "Show a confirmation box when pasting multiple lines"
msgstr ""
@@ -1782,6 +1821,10 @@ msgstr ""
msgid "Show built-in profiles in selector"
msgstr ""
#: tabby-core/src/hotkeys.ts:13
msgid "Show command selector"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/settingsTab.component.html:126
msgid "Show config file"
msgstr ""
@@ -1790,11 +1833,11 @@ msgstr ""
msgid "Show defaults"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:147
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:149
msgid "Show Mixer"
msgstr ""
#: tabby-core/src/hotkeys.ts:53
#: tabby-core/src/hotkeys.ts:57
msgid "Show pane labels (for rearranging)"
msgstr ""
@@ -1802,7 +1845,7 @@ msgstr ""
msgid "Show profile icon on tab"
msgstr ""
#: tabby-core/src/hotkeys.ts:13
#: tabby-core/src/hotkeys.ts:17
msgid "Show profile selector"
msgstr ""
@@ -1857,7 +1900,7 @@ msgstr ""
msgid "SOCKS proxy port"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:128
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:130
msgid "Sound"
msgstr ""
@@ -1869,22 +1912,32 @@ msgstr ""
msgid "Split"
msgstr ""
#: tabby-core/src/hotkeys.ts:157
#: tabby-core/src/hotkeys.ts:161
msgid "Split to the bottom"
msgstr ""
#: tabby-core/src/hotkeys.ts:161
msgid "Split to the left"
msgstr ""
#: tabby-core/src/hotkeys.ts:153
msgid "Split to the right"
#: tabby-core/src/tabContextMenu.ts:85
msgid "Split to the down"
msgstr ""
#: tabby-core/src/hotkeys.ts:165
#: tabby-core/src/tabContextMenu.ts:86
msgid "Split to the left"
msgstr ""
#: tabby-core/src/hotkeys.ts:157
#: tabby-core/src/tabContextMenu.ts:84
msgid "Split to the right"
msgstr ""
#: tabby-core/src/hotkeys.ts:169
msgid "Split to the top"
msgstr ""
#: tabby-core/src/tabContextMenu.ts:87
msgid "Split to the up"
msgstr ""
#: tabby-ssh/src/profiles.ts:80
msgid "SSH connection"
msgstr ""
@@ -1901,7 +1954,7 @@ msgstr ""
msgid "Standard"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:151
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:153
msgid "Startup"
msgstr ""
@@ -1921,11 +1974,11 @@ msgstr ""
msgid "Substitutions allowed."
msgstr ""
#: tabby-core/src/tabContextMenu.ts:279
#: tabby-core/src/tabContextMenu.ts:290
msgid "Switch profile"
msgstr ""
#: tabby-core/src/hotkeys.ts:233
#: tabby-core/src/hotkeys.ts:237
msgid "Switch profile in the active pane"
msgstr ""
@@ -1970,7 +2023,7 @@ msgstr ""
#: tabby-core/src/hotkeys.ts:141
#: tabby-core/src/hotkeys.ts:145
#: tabby-core/src/hotkeys.ts:149
#: tabby-core/src/hotkeys.ts:73
#: tabby-core/src/hotkeys.ts:153
#: tabby-core/src/hotkeys.ts:77
#: tabby-core/src/hotkeys.ts:81
#: tabby-core/src/hotkeys.ts:85
@@ -1980,7 +2033,7 @@ msgstr ""
msgid "Tab {number}"
msgstr ""
#: tabby-core/src/tabContextMenu.ts:212
#: tabby-core/src/tabContextMenu.ts:223
msgid "Tab activity"
msgstr ""
@@ -2008,7 +2061,7 @@ msgstr ""
msgid "Telnet session"
msgstr ""
#: tabby-terminal/src/api/baseTerminalTab.component.ts:192
#: tabby-terminal/src/api/baseTerminalTab.component.ts:194
#: tabby-terminal/src/settings.ts:43
msgid "Terminal"
msgstr ""
@@ -2017,7 +2070,7 @@ msgstr ""
msgid "Terminal background"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:131
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:133
msgid "Terminal bell"
msgstr ""
@@ -2045,15 +2098,15 @@ msgstr ""
msgid "Thin"
msgstr ""
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:204
#: locale/tmp-html/tabby-settings/src/components/windowSettingsTab.component.html:210
msgid "Tick this if you're experiencing aliasing, ghosting or other visual issues"
msgstr ""
#: tabby-core/src/hotkeys.ts:17
#: tabby-core/src/hotkeys.ts:21
msgid "Toggle fullscreen mode"
msgstr ""
#: tabby-core/src/hotkeys.ts:33
#: tabby-core/src/hotkeys.ts:37
msgid "Toggle last tab"
msgstr ""
@@ -2070,6 +2123,10 @@ msgstr ""
msgid "Top"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:123
msgid "Trim whitespace and newlines"
msgstr ""
#: tabby-core/src/services/config.service.ts:367
msgid "Try again"
msgstr ""
@@ -2078,7 +2135,7 @@ msgstr ""
msgid "Trying saved password"
msgstr ""
#: tabby-core/src/hotkeys.ts:65
#: tabby-core/src/hotkeys.ts:69
msgid "Turn current tab's panes into separate tabs"
msgstr ""
@@ -2190,11 +2247,11 @@ msgstr ""
msgid "Vibrancy"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:138
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:140
msgid "Visual"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:121
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:116
msgid "Warn on multi-line paste"
msgstr ""
@@ -2218,7 +2275,7 @@ msgstr ""
msgid "What's new"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:87
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:82
msgid "When enabled, links are only clickable while holding this key"
msgstr ""
@@ -2247,7 +2304,7 @@ msgstr ""
msgid "Window frame"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:166
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:168
msgid "Windows"
msgstr ""
@@ -2259,7 +2316,7 @@ msgstr ""
msgid "WinSCP path"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:79
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:74
msgid "Word separators"
msgstr ""
@@ -2272,7 +2329,7 @@ msgstr ""
msgid "Working directory detection"
msgstr ""
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:146
#: locale/tmp-html/tabby-terminal/src/components/terminalSettingsTab.component.html:148
msgid "WSL terminal bell can only be muted via Volume Mixer"
msgstr ""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2379
locale/sv-SE.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,7 @@
"@angular/platform-browser": "^12.0.0",
"@angular/platform-browser-dynamic": "^12.0.0",
"@biesbjerg/ngx-translate-extract-marker": "^1.0.0",
"@fortawesome/fontawesome-free": "^6.1.1",
"@fortawesome/fontawesome-free": "^6.2.0",
"@ng-bootstrap/ng-bootstrap": "^10.0.0",
"@sentry/cli": "^1.74.3",
"@sentry/electron": "^2.5.4",
@@ -23,8 +23,8 @@
"@types/node": "16.0.1",
"@types/sortablejs": "^1.15.0",
"@types/webpack-env": "^1.18.0",
"@typescript-eslint/eslint-plugin": "^4.33.0",
"@typescript-eslint/parser": "^4.33.0",
"@typescript-eslint/eslint-plugin": "^5.45.0",
"@typescript-eslint/parser": "^5.45.0",
"apply-loader": "2.0.0",
"axios": "^0.27.2",
"browserify-sign": "^4.2.1",
@@ -35,13 +35,15 @@
"cross-env": "7.0.3",
"css-loader": "^6.7.1",
"deep-equal": "2.0.5",
"electron": "20.3.0",
"electron-builder": "^23.0.9",
"electron": "21.3.0",
"electron-builder": "^24.0.0-alpha.1",
"electron-download": "^4.1.1",
"electron-installer-snap": "^5.1.0",
"electron-notarize": "^1.2.1",
"electron-notarize": "^1.2.2",
"electron-rebuild": "^3.2.9",
"eslint": "^7.32.0",
"eslint": "^8.29.0",
"eslint-import-resolver-typescript": "^3.5.2",
"eslint-plugin-import": "^2.26.0",
"file-loader": "^6.2.0",
"gettext-extractor": "^3.5.4",
"graceful-fs": "^4.2.10",
@@ -65,7 +67,7 @@
"pug-static-loader": "2.0.0",
"raw-loader": "4.0.2",
"sass-loader": "^12.6.0",
"shell-quote": "^1.7.3",
"shell-quote": "^1.7.4",
"shelljs": "0.8.5",
"slugify": "^1.6.5",
"sortablejs": "^1.15.0",
@@ -76,15 +78,15 @@
"style-loader": "^3.3.1",
"svg-inline-loader": "^0.8.2",
"thenby": "^1.3.4",
"ts-loader": "^9.4.1",
"ts-loader": "^9.4.2",
"tslib": "^2.4.0",
"typedoc": "^0.22.18",
"typescript": "^4.3.5",
"utils-decorators": "^1.10.4",
"val-loader": "4.0.0",
"webpack": "^5.72.1",
"webpack-bundle-analyzer": "^4.5.0",
"webpack-cli": "^4.9.2",
"webpack": "^5.75.0",
"webpack-bundle-analyzer": "^4.7.0",
"webpack-cli": "^5.0.0",
"yaml-loader": "0.6.0",
"zone.js": "^0.11.5"
},

View File

@@ -16,6 +16,7 @@ if (process.env.GITHUB_HEAD_REF) {
builder({
dir: true,
mac: ['pkg', 'zip'],
x64: process.env.ARCH === 'x86_64',
arm64: process.env.ARCH === 'arm64',
config: {
extraMetadata: {

View File

@@ -28,6 +28,7 @@ vars.builtinPlugins.forEach(plugin => {
electronVersion: vars.electronVersion,
arch: process.env.ARCH ?? process.arch,
force: true,
useCache: false,
})
}
sh.cd('..')

View File

@@ -1,6 +1,6 @@
{
"name": "tabby-community-color-schemes",
"version": "1.0.171-nightly.3",
"version": "1.0.187-nightly.1",
"description": "Community color schemes for Tabby",
"keywords": [
"tabby-builtin-plugin"

View File

@@ -0,0 +1,44 @@
!
! Generated with :
! XRDB2Xresources.py
!
*.foreground: #3f3f3f
*.background: #f3f2f1
*.cursorColor: #9acf9f
!
! Black
*.color0: #282c34
*.color8: #548962
!
! Red
*.color1: #e06c75
*.color9: #d19a66
!
! Green
*.color2: #668e3d
*.color10: #668e3d
!
! Yellow
*.color3: #c49041
*.color11: #c49041
!
! Blue
*.color4: #8c71bf
*.color12: #8c71bf
!
! Magenta
*.color5: #c678dd
*.color13: #c678dd
!
! Cyan
*.color6: #878b91
*.color14: #5e6091
!
! White
*.color7: #abb2bf
*.color15: #f2f7ff
!
! Bold, Italic, Underline
*.colorBD: #33374c
!*.colorIT:
!*.colorUL:

View File

@@ -1,6 +1,6 @@
{
"name": "tabby-core",
"version": "1.0.171-nightly.3",
"version": "1.0.187-nightly.1",
"description": "Tabby core",
"keywords": [
"tabby-builtin-plugin"

View File

@@ -0,0 +1,71 @@
import { BaseTabComponent } from '../components/baseTab.component'
import { MenuItemOptions } from './menu'
import { ToolbarButton } from './toolbarButtonProvider'
export enum CommandLocation {
LeftToolbar = 'left-toolbar',
RightToolbar = 'right-toolbar',
StartPage = 'start-page',
}
export class Command {
id?: string
label: string
sublabel?: string
locations?: CommandLocation[]
run: () => Promise<void>
/**
* Raw SVG icon code
*/
icon?: string
/**
* Optional Touch Bar icon ID
*/
touchBarNSImage?: string
/**
* Optional Touch Bar button label
*/
touchBarTitle?: string
weight?: number
static fromToolbarButton (button: ToolbarButton): Command {
const command = new Command()
command.label = button.title
command.run = async () => button.click?.()
command.icon = button.icon
command.locations = [CommandLocation.StartPage]
if ((button.weight ?? 0) <= 0) {
command.locations.push(CommandLocation.LeftToolbar)
}
if ((button.weight ?? 0) > 0) {
command.locations.push(CommandLocation.RightToolbar)
}
command.touchBarNSImage = button.touchBarNSImage
command.touchBarTitle = button.touchBarTitle
command.weight = button.weight
return command
}
static fromMenuItem (item: MenuItemOptions): Command {
const command = new Command()
command.label = item.commandLabel ?? item.label ?? ''
command.sublabel = item.sublabel
command.run = async () => item.click?.()
return command
}
}
export interface CommandContext {
tab?: BaseTabComponent,
}
/**
* Extend to add commands
*/
export abstract class CommandProvider {
abstract provide (context: CommandContext): Promise<Command[]>
}

View File

@@ -3,6 +3,11 @@ export interface HotkeyDescription {
name: string
}
export interface Hotkey {
strokes: string[] | string; // may be a sequence of strokes
isDuplicate: boolean;
}
/**
* Extend to provide your own hotkeys. A corresponding [[ConfigProvider]]
* must also provide the `hotkeys.foo` config options with the default values

View File

@@ -5,7 +5,7 @@ export { SplitTabComponent, SplitContainer, SplitDirection, SplitOrientation } f
export { TabRecoveryProvider, RecoveryToken } from './tabRecovery'
export { ToolbarButtonProvider, ToolbarButton } from './toolbarButtonProvider'
export { ConfigProvider } from './configProvider'
export { HotkeyProvider, HotkeyDescription } from './hotkeyProvider'
export { HotkeyProvider, HotkeyDescription, Hotkey } from './hotkeyProvider'
export { Theme } from './theme'
export { TabContextMenuItemProvider } from './tabContextMenuProvider'
export { SelectorOption } from './selector'
@@ -18,6 +18,7 @@ export { HostAppService, Platform } from './hostApp'
export { FileProvider } from './fileProvider'
export { ProfileProvider, Profile, PartialProfile, ProfileSettingsComponent } from './profileProvider'
export { PromptModalComponent } from '../components/promptModal.component'
export * from './commands'
export { AppService } from '../services/app.service'
export { ConfigService, configMerge, ConfigProxy } from '../services/config.service'

View File

@@ -6,4 +6,7 @@ export interface MenuItemOptions {
checked?: boolean
submenu?: MenuItemOptions[]
click?: () => void
/** @hidden */
commandLabel?: string
}

View File

@@ -1,5 +1,4 @@
import { BaseTabComponent } from '../components/baseTab.component'
import { TabHeaderComponent } from '../components/tabHeader.component'
import { MenuItemOptions } from './menu'
/**
@@ -8,5 +7,5 @@ import { MenuItemOptions } from './menu'
export abstract class TabContextMenuItemProvider {
weight = 0
abstract getItems (tab: BaseTabComponent, tabHeader?: TabHeaderComponent): Promise<MenuItemOptions[]>
abstract getItems (tab: BaseTabComponent, tabHeader?: boolean): Promise<MenuItemOptions[]>
}

View File

@@ -27,10 +27,6 @@ export interface ToolbarButton {
/** @hidden */
submenuItems?: ToolbarButton[]
showInToolbar?: boolean
showInStartPage?: boolean
}
/**

View File

@@ -2,26 +2,19 @@
import { Injectable } from '@angular/core'
import { TranslateService } from '@ngx-translate/core'
import { ToolbarButton, ToolbarButtonProvider } from './api/toolbarButtonProvider'
import { HostAppService, Platform } from './api/hostApp'
import { HotkeysService } from './services/hotkeys.service'
import { ProfilesService } from './services/profiles.service'
import { CommandProvider, Command, CommandLocation } from './api/commands'
/** @hidden */
@Injectable()
export class ButtonProvider extends ToolbarButtonProvider {
@Injectable({ providedIn: 'root' })
export class CoreCommandProvider extends CommandProvider {
constructor (
private hostApp: HostAppService,
private profilesService: ProfilesService,
private translate: TranslateService,
hotkeys: HotkeysService,
) {
super()
hotkeys.hotkey$.subscribe(hotkey => {
if (hotkey === 'profile-selector') {
this.activate()
}
})
}
async activate () {
@@ -31,21 +24,22 @@ export class ButtonProvider extends ToolbarButtonProvider {
}
}
provide (): ToolbarButton[] {
async provide (): Promise<Command[]> {
return [
{
id: 'profile-selector',
locations: [CommandLocation.LeftToolbar, CommandLocation.StartPage],
label: this.translate.instant('Profiles & connections'),
icon: this.hostApp.platform === Platform.Web
? require('./icons/plus.svg')
: require('./icons/profiles.svg'),
title: this.translate.instant('Profiles & connections'),
click: () => this.activate(),
run: async () => this.activate(),
},
...this.profilesService.getRecentProfiles().map(profile => ({
label: profile.name,
locations: [CommandLocation.StartPage],
icon: require('./icons/history.svg'),
title: profile.name,
showInToolbar: false,
showinStartPage: true,
click: async () => {
run: async () => {
const p = (await this.profilesService.getProfiles()).find(x => x.id === profile.id) ?? profile
this.profilesService.launchProfile(p)
},

View File

@@ -9,7 +9,10 @@ title-bar(
[class.tabs-on-top]='config.store.appearance.tabsLocation == "top" || config.store.appearance.tabsLocation == "left"',
[class.tabs-on-side]='hasVerticalTabs()',
)
.tab-bar((dblclick)='hostWindow.toggleMaximize()')
.tab-bar(
*ngIf='!hostWindow.isFullscreen || config.store.appearance.tabsInFullscreen',
(dblclick)='hostWindow.toggleMaximize()'
)
.inset.background(*ngIf='hostApp.platform == Platform.macOS \
&& !hostWindow.isFullscreen \
&& config.store.appearance.frame == "thin" \
@@ -25,7 +28,7 @@ title-bar(
[index]='idx',
[tab]='tab',
[active]='tab == app.activeTab',
@animateTab,
[@animateTab]='{value: "in", params: {size: targetTabSize}}',
[@.disabled]='hasVerticalTabs() || !config.store.accessibility.animations',
(click)='app.selectTab(tab)',
[class.fully-draggable]='hostApp.platform != Platform.macOS',
@@ -35,26 +38,14 @@ title-bar(
.btn-group.background
.d-flex(
*ngFor='let button of leftToolbarButtons',
ngbDropdown,
(openChange)='generateButtonSubmenu(button)',
ngbDropdown
)
button.btn.btn-secondary.btn-tab-bar(
[title]='button.title',
(click)='button.click && button.click()',
[title]='button.label',
(click)='button.run && button.run()',
[fastHtmlBind]='button.icon',
ngbDropdownToggle,
)
div(*ngIf='button.submenu', ngbDropdownMenu)
button.dropdown-item.d-flex.align-items-center(
*ngFor='let item of button.submenuItems',
(click)='item.click()',
ngbDropdownItem,
)
.icon-wrapper(
*ngIf='hasIcons(button.submenuItems)',
[fastHtmlBind]='item.icon'
)
div([class.ml-3]='hasIcons(button.submenuItems)') {{item.title}}
.d-flex(
ngbDropdown,
@@ -77,26 +68,14 @@ title-bar(
.btn-group.background
.d-flex(
*ngFor='let button of rightToolbarButtons',
ngbDropdown,
(openChange)='generateButtonSubmenu(button)',
ngbDropdown
)
button.btn.btn-secondary.btn-tab-bar(
[title]='button.title',
(click)='button.click && button.click()',
(click)='button.run && button.run()',
[fastHtmlBind]='button.icon',
ngbDropdownToggle,
)
div(*ngIf='button.submenu', ngbDropdownMenu)
button.dropdown-item.d-flex.align-items-center(
*ngFor='let item of button.submenuItems',
(click)='item.click()',
ngbDropdownItem,
)
.icon-wrapper(
*ngIf='hasIcons(button.submenuItems)',
[fastHtmlBind]='item.icon'
)
div([class.ml-3]='hasIcons(button.submenuItems)') {{item.title}}
button.btn.btn-secondary.btn-tab-bar.btn-update(
*ngIf='updatesAvailable',

View File

@@ -185,3 +185,18 @@ hotkey-hint {
::ng-deep .btn-update svg {
fill: cyan;
}
::ng-deep .broadcast-status-warning {
background: red;
position: absolute;
top: 0;
left: 50%;
padding: 5px 10px;
color: black;
border-radius: 0 0 5px 5px;
width: 300px;
margin-left: -150px;
text-align: center;
font-weight: bold;
}

View File

@@ -1,5 +1,5 @@
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { Component, Inject, Input, HostListener, HostBinding, ViewChildren, ViewChild } from '@angular/core'
import { Component, Input, HostListener, HostBinding, ViewChildren, ViewChild } from '@angular/core'
import { trigger, style, animate, transition, state } from '@angular/animations'
import { NgbDropdown, NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop'
@@ -10,12 +10,47 @@ import { Logger, LogService } from '../services/log.service'
import { ConfigService } from '../services/config.service'
import { ThemesService } from '../services/themes.service'
import { UpdaterService } from '../services/updater.service'
import { CommandService } from '../services/commands.service'
import { BaseTabComponent } from './baseTab.component'
import { SafeModeModalComponent } from './safeModeModal.component'
import { TabBodyComponent } from './tabBody.component'
import { SplitTabComponent } from './splitTab.component'
import { AppService, FileTransfer, HostWindowService, PlatformService, ToolbarButton, ToolbarButtonProvider } from '../api'
import { AppService, Command, CommandLocation, FileTransfer, HostWindowService, PlatformService } from '../api'
function makeTabAnimation (dimension: string, size: number) {
return [
state('in', style({
'flex-basis': '{{size}}',
[dimension]: '{{size}}',
}), {
params: { size: `${size}px` },
}),
transition(':enter', [
style({
'flex-basis': '1px',
[dimension]: '1px',
}),
animate('250ms ease-out', style({
'flex-basis': '{{size}}',
[dimension]: '{{size}}',
})),
]),
transition(':leave', [
style({
'flex-basis': 'auto',
'padding-left': '*',
'padding-right': '*',
[dimension]: '*',
}),
animate('250ms ease-in-out', style({
'padding-left': 0,
'padding-right': 0,
[dimension]: '0',
})),
]),
]
}
/** @hidden */
@Component({
@@ -23,39 +58,14 @@ import { AppService, FileTransfer, HostWindowService, PlatformService, ToolbarBu
template: require('./appRoot.component.pug'),
styles: [require('./appRoot.component.scss')],
animations: [
trigger('animateTab', [
state('in', style({
'flex-basis': 'auto',
width: 'auto',
})),
transition(':enter', [
style({
'flex-basis': '1px',
width: '1px',
}),
animate('250ms ease-in-out', style({
'flex-basis': 'auto',
width: 'auto',
})),
]),
transition(':leave', [
style({
'flex-basis': 'auto',
width: 'auto',
}),
animate('250ms ease-in-out', style({
'flex-basis': '1px',
width: '1px',
})),
]),
]),
trigger('animateTab', makeTabAnimation('width', 200)),
],
})
export class AppRootComponent {
Platform = Platform
@Input() ready = false
@Input() leftToolbarButtons: ToolbarButton[]
@Input() rightToolbarButtons: ToolbarButton[]
@Input() leftToolbarButtons: Command[]
@Input() rightToolbarButtons: Command[]
@HostBinding('class.platform-win32') platformClassWindows = process.platform === 'win32'
@HostBinding('class.platform-darwin') platformClassMacOS = process.platform === 'darwin'
@HostBinding('class.platform-linux') platformClassLinux = process.platform === 'linux'
@@ -70,11 +80,11 @@ export class AppRootComponent {
constructor (
private hotkeys: HotkeysService,
private updater: UpdaterService,
private commands: CommandService,
public hostWindow: HostWindowService,
public hostApp: HostAppService,
public config: ConfigService,
public app: AppService,
@Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[],
platform: PlatformService,
log: LogService,
ngbModal: NgbModal,
@@ -161,9 +171,9 @@ export class AppRootComponent {
this.activeTransfersDropdown.open()
})
config.ready$.toPromise().then(() => {
this.leftToolbarButtons = this.getToolbarButtons(false)
this.rightToolbarButtons = this.getToolbarButtons(true)
config.ready$.toPromise().then(async () => {
this.leftToolbarButtons = await this.getToolbarButtons(false)
this.rightToolbarButtons = await this.getToolbarButtons(true)
setInterval(() => {
if (this.config.store.enableAutomaticUpdates) {
@@ -196,14 +206,11 @@ export class AppRootComponent {
return this.config.store.appearance.tabsLocation === 'left' || this.config.store.appearance.tabsLocation === 'right'
}
async generateButtonSubmenu (button: ToolbarButton) {
if (button.submenu) {
button.submenuItems = await button.submenu()
get targetTabSize (): any {
if (this.hasVerticalTabs()) {
return '*'
}
}
hasIcons (submenuItems: ToolbarButton[]): boolean {
return submenuItems.some(x => !!x.icon)
return this.config.store.appearance.flexTabs ? '*' : '200px'
}
onTabsReordered (event: CdkDragDrop<BaseTabComponent[]>) {
@@ -228,14 +235,8 @@ export class AppRootComponent {
return this.config.store?.appearance.vibrancy
}
private getToolbarButtons (aboveZero: boolean): ToolbarButton[] {
let buttons: ToolbarButton[] = []
this.config.enabledServices(this.toolbarButtonProviders).forEach(provider => {
buttons = buttons.concat(provider.provide())
})
return buttons
.filter(x => x.showInToolbar ?? true)
.filter(button => (button.weight ?? 0) > 0 === aboveZero)
.sort((a: ToolbarButton, b: ToolbarButton) => (a.weight ?? 0) - (b.weight ?? 0))
private async getToolbarButtons (aboveZero: boolean): Promise<Command[]> {
return (await this.commands.getCommands({ tab: this.app.activeTab ?? undefined }))
.filter(x => x.locations?.includes(aboveZero ? CommandLocation.RightToolbar : CommandLocation.LeftToolbar))
}
}

View File

@@ -1,7 +1,8 @@
import { Observable, Subject, distinctUntilChanged, filter, debounceTime } from 'rxjs'
import { EmbeddedViewRef, ViewContainerRef, ViewRef } from '@angular/core'
import { EmbeddedViewRef, Injector, ViewContainerRef, ViewRef } from '@angular/core'
import { RecoveryToken } from '../api/tabRecovery'
import { BaseComponent } from './base.component'
import { ConfigService } from '../services/config.service'
/**
* Represents an active "process" inside a tab,
@@ -87,8 +88,11 @@ export abstract class BaseTabComponent extends BaseComponent {
get destroyed$ (): Observable<void> { return this.destroyed }
get recoveryStateChangedHint$ (): Observable<void> { return this.recoveryStateChangedHint }
protected constructor () {
protected config: ConfigService
protected constructor (injector: Injector) {
super()
this.config = injector.get(ConfigService)
this.focused$.subscribe(() => {
this.hasFocus = true
})

View File

@@ -12,7 +12,7 @@ export class RenameTabModalComponent {
@ViewChild('input') input: ElementRef
constructor (
private modalInstance: NgbActiveModal
private modalInstance: NgbActiveModal,
) { }
ngOnInit () {

View File

@@ -38,3 +38,8 @@ input {
border-radius: 0;
border: none;
}
profile-icon {
width: 14px;
height: 14px;
}

View File

@@ -64,7 +64,7 @@ export class SelectorModalComponent<T> {
this.filteredOptions = this.options.slice().sort(
firstBy<SelectorOption<T>, number>(x => x.weight ?? 0)
.thenBy<SelectorOption<T>, string>(x => x.group ?? '')
.thenBy<SelectorOption<T>, string>(x => x.name)
.thenBy<SelectorOption<T>, string>(x => x.name),
)
.filter(x => !x.freeInputPattern)
} else {
@@ -97,8 +97,8 @@ export class SelectorModalComponent<T> {
}
selectOption (option: SelectorOption<T>): void {
option.callback?.(this.filter)
this.modalInstance.close(option.result)
setTimeout(() => option.callback?.(this.filter))
}
canEditSelected (): boolean {

View File

@@ -1,11 +1,10 @@
import { Observable, Subject } from 'rxjs'
import { Component, Injectable, ViewChild, ViewContainerRef, EmbeddedViewRef, AfterViewInit, OnDestroy } from '@angular/core'
import { Component, Injectable, ViewChild, ViewContainerRef, EmbeddedViewRef, AfterViewInit, OnDestroy, Injector } from '@angular/core'
import { BaseTabComponent, BaseTabProcess, GetRecoveryTokenOptions } from './baseTab.component'
import { TabRecoveryProvider, RecoveryToken } from '../api/tabRecovery'
import { TabsService, NewTabParameters } from '../services/tabs.service'
import { HotkeysService } from '../services/hotkeys.service'
import { TabRecoveryService } from '../services/tabRecovery.service'
import { ConfigService } from '../api'
export type SplitOrientation = 'v' | 'h'
export type SplitDirection = 'r' | 't' | 'b' | 'l'
@@ -169,6 +168,7 @@ export type SplitDropZoneInfo = {
[container]='spanner.container'
[index]='spanner.index'
(change)='onSpannerAdjusted(spanner)'
(resizing)='onSpannerResizing($event)'
></split-tab-spanner>
<split-tab-drop-zone
*ngFor='let dropZone of _dropZones'
@@ -211,6 +211,9 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
/** @hidden */
_allFocusMode = false
/** @hidden */
_spannerResizing = false
/**
* Disables display of dynamic window/tab title provided by the shell
*/
@@ -257,9 +260,9 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
private hotkeys: HotkeysService,
private tabsService: TabsService,
private tabRecovery: TabRecoveryService,
private config: ConfigService,
injector: Injector,
) {
super()
super(injector)
this.root = new SplitContainer()
this.setTitle('')
@@ -737,6 +740,11 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
this.splitAdjusted.next(spanner)
}
/** @hidden */
onSpannerResizing (state: boolean): void {
this._spannerResizing = state
}
/** @hidden */
onTabDropped (tab: BaseTabComponent, zone: SplitDropZoneInfo) { // eslint-disable-line @typescript-eslint/explicit-module-boundary-types
if (tab === this) {
@@ -809,7 +817,12 @@ export class SplitTabComponent extends BaseTabComponent implements AfterViewInit
this.viewRefs.set(tab, ref)
tab.addEventListenerUntilDestroyed(ref.rootNodes[0], 'click', () => this.focus(tab))
if (this.config.store.terminal.focusFollowsMouse) {
tab.addEventListenerUntilDestroyed(ref.rootNodes[0], 'mousemove', () => this.focus(tab))
tab.addEventListenerUntilDestroyed(ref.rootNodes[0], 'mousemove', () => {
if (this._spannerResizing) {
return
}
this.focus(tab)
})
}
tab.subscribeUntilDestroyed(tab.titleChange$, () => this.updateTitle())

View File

@@ -15,6 +15,10 @@
border-radius: 5px;
border: 1px solid rgba(255, 255, 255, .25);
transition: all 125ms cubic-bezier(0, 0, 0.2, 1);
> ::ng-deep * {
display: none !important;
}
}
&.highlighted {

View File

@@ -1,6 +1,6 @@
:host {
position: absolute;
background: rgba(255, 255, 255, .25);
background: rgba(0, 0, 0, .5);
display: flex;
align-items: center;
justify-content: center;

View File

@@ -74,7 +74,7 @@ export class SplitTabPaneLabelComponent extends SelfPositioningComponent {
tabElement.offsetTop,
tabElement.clientWidth,
tabElement.clientHeight,
'px'
'px',
)
}
}

View File

@@ -12,6 +12,7 @@ import { SplitContainer } from './splitTab.component'
export class SplitTabSpannerComponent extends SelfPositioningComponent {
@Input() container: SplitContainer
@Input() index: number
@Output() resizing = new EventEmitter<boolean>()
@Output() change = new EventEmitter<void>()
@HostBinding('class.active') isActive = false
@HostBinding('class.h') isHorizontal = false
@@ -30,6 +31,7 @@ export class SplitTabSpannerComponent extends SelfPositioningComponent {
this.element.nativeElement.addEventListener('mousedown', (e: MouseEvent) => {
this.isActive = true
this.resizing.emit(true)
const start = this.isVertical ? e.pageY : e.pageX
let current = start
const oldPosition: number = this.isVertical ? this.element.nativeElement.offsetTop : this.element.nativeElement.offsetLeft
@@ -46,6 +48,7 @@ export class SplitTabSpannerComponent extends SelfPositioningComponent {
const offHandler = () => {
this.isActive = false
this.resizing.emit(false)
document.removeEventListener('mouseup', offHandler)
this.element.nativeElement.parentElement.removeEventListener('mousemove', dragHandler)
@@ -74,14 +77,14 @@ export class SplitTabSpannerComponent extends SelfPositioningComponent {
this.container.x,
this.container.y + this.container.h * this.container.getOffsetRatio(this.index),
this.container.w,
0
0,
)
} else {
this.setDimensions(
this.container.x + this.container.w * this.container.getOffsetRatio(this.index),
this.container.y,
0,
this.container.h
this.container.h,
)
}
}

View File

@@ -5,11 +5,11 @@ div
.list-group.mb-4
a.list-group-item.list-group-item-action.d-flex(
*ngFor='let button of getButtons(); trackBy: buttonsTrackBy',
(click)='button.click()',
*ngFor='let command of commands; trackBy: buttonsTrackBy',
(click)='command.run()',
)
.d-flex.align-self-center([innerHTML]='sanitizeIcon(button.icon)')
span {{button.title}}
.d-flex.align-self-center([innerHTML]='sanitizeIcon(command.icon)')
span {{command.label}}
footer.d-flex.align-items-center
.btn-group.mr-auto

View File

@@ -1,8 +1,8 @@
import { Component, Inject } from '@angular/core'
import { Component } from '@angular/core'
import { DomSanitizer } from '@angular/platform-browser'
import { ConfigService } from '../services/config.service'
import { HomeBaseService } from '../services/homeBase.service'
import { ToolbarButton, ToolbarButtonProvider } from '../api'
import { CommandService } from '../services/commands.service'
import { Command, CommandLocation } from '../api/commands'
/** @hidden */
@Component({
@@ -12,29 +12,23 @@ import { ToolbarButton, ToolbarButtonProvider } from '../api'
})
export class StartPageComponent {
version: string
commands: Command[] = []
constructor (
private config: ConfigService,
private domSanitizer: DomSanitizer,
public homeBase: HomeBaseService,
@Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[],
commands: CommandService,
) {
}
getButtons (): ToolbarButton[] {
return this.config.enabledServices(this.toolbarButtonProviders)
.map(provider => provider.provide())
.reduce((a, b) => a.concat(b))
.filter(x => x.showInStartPage ?? true)
.filter(x => !!x.click)
.sort((a: ToolbarButton, b: ToolbarButton) => (a.weight ?? 0) - (b.weight ?? 0))
commands.getCommands({}).then(c => {
this.commands = c.filter(x => x.locations?.includes(CommandLocation.StartPage))
})
}
sanitizeIcon (icon?: string): any {
return this.domSanitizer.bypassSecurityTrustHtml(icon ?? '')
}
buttonsTrackBy (btn: ToolbarButton): any {
return btn.title + btn.icon
buttonsTrackBy (btn: Command): any {
return btn.label + btn.icon
}
}

View File

@@ -3,17 +3,15 @@ $tabs-height: 38px;
:host {
position: relative;
cursor: pointer;
box-sizing: border-box;
> * { cursor: pointer; }
flex: 1000 1 200px;
width: 200px;
padding: 0 10px;
// flex-basis and width are also set through animation on AppRoot
&.flex-width {
flex: 1000 1 auto;
width: auto;
}
padding: 0 10px;
display: flex;
flex-direction: row;
@@ -21,6 +19,11 @@ $tabs-height: 38px;
overflow: hidden;
&.flex-width {
flex: 1000 1 auto;
width: auto;
}
&.vertical {
flex: none;
height: $tabs-height;

View File

@@ -1,10 +1,8 @@
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { Component, Input, Optional, Inject, HostBinding, HostListener, NgZone } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { auditTime } from 'rxjs'
import { TabContextMenuItemProvider } from '../api/tabContextMenuProvider'
import { BaseTabComponent } from './baseTab.component'
import { RenameTabModalComponent } from './renameTabModal.component'
import { SplitTabComponent } from './splitTab.component'
import { HotkeysService } from '../services/hotkeys.service'
import { AppService } from '../services/app.service'
@@ -31,7 +29,6 @@ export class TabHeaderComponent extends BaseComponent {
public app: AppService,
public config: ConfigService,
public hostApp: HostAppService,
private ngbModal: NgbModal,
private hotkeys: HotkeysService,
private platform: PlatformService,
private zone: NgZone,
@@ -41,7 +38,7 @@ export class TabHeaderComponent extends BaseComponent {
this.subscribeUntilDestroyed(this.hotkeys.hotkey$, (hotkey) => {
if (this.app.activeTab === this.tab) {
if (hotkey === 'rename-tab') {
this.showRenameTabModal()
this.app.renameTab(this.tab)
}
}
})
@@ -58,27 +55,17 @@ export class TabHeaderComponent extends BaseComponent {
})
}
showRenameTabModal (): void {
const modal = this.ngbModal.open(RenameTabModalComponent)
modal.componentInstance.value = this.tab.customTitle || this.tab.title
modal.result.then(result => {
this.tab.setTitle(result)
this.tab.customTitle = result
this.app.emitTabsChanged()
}).catch(() => null)
}
async buildContextMenu (): Promise<MenuItemOptions[]> {
let items: MenuItemOptions[] = []
// Top-level tab menu
for (const section of await Promise.all(this.contextMenuProviders.map(x => x.getItems(this.tab, this)))) {
for (const section of await Promise.all(this.contextMenuProviders.map(x => x.getItems(this.tab, true)))) {
items.push({ type: 'separator' })
items = items.concat(section)
}
if (this.tab instanceof SplitTabComponent) {
const tab = this.tab.getFocusedTab()
if (tab) {
for (let section of await Promise.all(this.contextMenuProviders.map(x => x.getItems(tab, this)))) {
for (let section of await Promise.all(this.contextMenuProviders.map(x => x.getItems(tab, true)))) {
// eslint-disable-next-line @typescript-eslint/no-loop-func
section = section.filter(item => !items.some(ex => ex.label === item.label))
if (section.length) {
@@ -107,7 +94,7 @@ export class TabHeaderComponent extends BaseComponent {
}
@HostListener('dblclick', ['$event']) onDoubleClick ($event: MouseEvent): void {
this.showRenameTabModal()
this.app.renameTab(this.tab)
$event.stopPropagation()
}

View File

@@ -1,5 +1,5 @@
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import { Component } from '@angular/core'
import { Component, Injector } from '@angular/core'
import { TranslateService } from '@ngx-translate/core'
import { BaseTabComponent } from './baseTab.component'
import { ConfigService } from '../services/config.service'
@@ -19,8 +19,9 @@ export class WelcomeTabComponent extends BaseTabComponent {
public config: ConfigService,
public locale: LocaleService,
translate: TranslateService,
injector: Injector,
) {
super()
super(injector)
this.setTitle(translate.instant('Welcome'))
}

View File

@@ -94,3 +94,5 @@ hotkeys:
- 'Ctrl-Alt-T'
profile-selector:
- 'Ctrl-Shift-E'
command-selector:
- 'Ctrl-Shift-P'

View File

@@ -17,7 +17,7 @@ hotkeys:
move-tab-right:
- '⌘-Shift-Right'
rearrange-panes:
- '-Shift'
- 'Ctrl-Shift'
tab-1:
- '⌘-1'
tab-2:
@@ -93,5 +93,7 @@ hotkeys:
- '⌘-E'
switch-profile:
- '⌘-Shift-E'
command-selector:
- '⌘-Shift-P'
appearance:
vibrancy: true

View File

@@ -95,3 +95,5 @@ hotkeys:
- 'Ctrl-Alt-T'
profile-selector:
- 'Ctrl-Shift-E'
command-selector:
- 'Ctrl-Shift-P'

View File

@@ -9,6 +9,7 @@ appearance:
dockAlwaysOnTop: true
flexTabs: false
tabsLocation: top
tabsInFullscreen: false
cycleTabs: true
theme: Standard
frame: thin
@@ -30,6 +31,8 @@ hotkeys:
profiles: []
profileDefaults:
__nonStructural: true
ssh:
disableDynamicTitle: true
recoverTabs: true
enableAnalytics: true
enableWelcomeTab: true
@@ -44,4 +47,5 @@ pluginBlacklist: []
hacks:
disableGPU: false
disableVibrancyWhileDragging: false
enableFluentBackground: false
language: null

View File

@@ -8,6 +8,10 @@ import { PartialProfile, Profile } from './api'
@Injectable()
export class AppHotkeyProvider extends HotkeyProvider {
hotkeys: HotkeyDescription[] = [
{
id: 'command-selector',
name: this.translate.instant('Show command selector'),
},
{
id: 'profile-selector',
name: this.translate.instant('Show profile selector'),
@@ -18,7 +22,7 @@ export class AppHotkeyProvider extends HotkeyProvider {
},
{
id: 'rename-tab',
name: this.translate.instant('Rename Tab'),
name: this.translate.instant('Rename tab'),
},
{
id: 'close-tab',

View File

@@ -37,21 +37,22 @@ import { FastHtmlBindDirective } from './directives/fastHtmlBind.directive'
import { DropZoneDirective } from './directives/dropZone.directive'
import { CdkAutoDropGroup } from './directives/cdkAutoDropGroup.directive'
import { Theme, CLIHandler, TabContextMenuItemProvider, TabRecoveryProvider, HotkeyProvider, ConfigProvider, PlatformService, FileProvider, ToolbarButtonProvider, ProfilesService, ProfileProvider, SelectorOption, Profile, SelectorService } from './api'
import { Theme, CLIHandler, TabContextMenuItemProvider, TabRecoveryProvider, HotkeyProvider, ConfigProvider, PlatformService, FileProvider, ProfilesService, ProfileProvider, SelectorOption, Profile, SelectorService, CommandProvider } from './api'
import { AppService } from './services/app.service'
import { ConfigService } from './services/config.service'
import { VaultFileProvider } from './services/vault.service'
import { HotkeysService } from './services/hotkeys.service'
import { LocaleService, TranslateServiceWrapper } from './services/locale.service'
import { CommandService } from './services/commands.service'
import { StandardTheme, StandardCompactTheme, PaperTheme } from './theme'
import { CoreConfigProvider } from './config'
import { AppHotkeyProvider } from './hotkeys'
import { TaskCompletionContextMenu, CommonOptionsContextMenu, TabManagementContextMenu, ProfilesContextMenu } from './tabContextMenu'
import { LastCLIHandler, ProfileCLIHandler } from './cli'
import { ButtonProvider } from './buttonProvider'
import { SplitLayoutProfilesService } from './profiles'
import { CoreCommandProvider } from './commands'
import 'perfect-scrollbar/css/perfect-scrollbar.css'
@@ -74,8 +75,8 @@ const PROVIDERS = [
{ provide: CLIHandler, useClass: LastCLIHandler, multi: true },
{ provide: PERFECT_SCROLLBAR_CONFIG, useValue: { suppressScrollX: true } },
{ provide: FileProvider, useClass: VaultFileProvider, multi: true },
{ provide: ToolbarButtonProvider, useClass: ButtonProvider, multi: true },
{ provide: ProfileProvider, useExisting: SplitLayoutProfilesService, multi: true },
{ provide: CommandProvider, useExisting: CoreCommandProvider, multi: true },
{
provide: LOCALE_ID,
deps: [LocaleService],
@@ -161,6 +162,7 @@ export default class AppModule { // eslint-disable-line @typescript-eslint/no-ex
config: ConfigService,
platform: PlatformService,
hotkeys: HotkeysService,
commands: CommandService,
public locale: LocaleService,
private translate: TranslateService,
private profilesService: ProfilesService,
@@ -178,7 +180,7 @@ export default class AppModule { // eslint-disable-line @typescript-eslint/no-ex
console.error('Unhandled exception:', err)
})
hotkeys.hotkey$.subscribe(async (hotkey) => {
hotkeys.hotkey$.subscribe(async hotkey => {
if (hotkey.startsWith('profile.')) {
const id = hotkey.substring(hotkey.indexOf('.') + 1)
const profiles = await profilesService.getProfiles()
@@ -195,10 +197,21 @@ export default class AppModule { // eslint-disable-line @typescript-eslint/no-ex
}
this.showSelector(provider)
}
if (hotkey === 'command-selector') {
commands.showSelector()
}
if (hotkey === 'profile-selector') {
commands.run('profile-selector', {})
}
})
}
async showSelector (provider: ProfileProvider<Profile>): Promise<void> {
if (this.selector.active) {
return
}
let profiles = await this.profilesService.getProfiles()
profiles = profiles.filter(x => !x.isTemplate && x.type === provider.id)

View File

@@ -1,8 +1,10 @@
import { Observable, Subject, AsyncSubject, takeUntil, debounceTime } from 'rxjs'
import { Injectable, Inject } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { Observable, Subject, AsyncSubject, takeUntil, debounceTime } from 'rxjs'
import { BaseTabComponent } from '../components/baseTab.component'
import { SplitTabComponent } from '../components/splitTab.component'
import { RenameTabModalComponent } from '../components/renameTabModal.component'
import { SelectorOption } from '../api/selector'
import { RecoveryToken } from '../api/tabRecovery'
import { BootstrapData, BOOTSTRAP_DATA } from '../api/mainProcess'
@@ -80,6 +82,7 @@ export class AppService {
private tabRecovery: TabRecoveryService,
private tabsService: TabsService,
private selector: SelectorService,
private ngbModal: NgbModal,
@Inject(BOOTSTRAP_DATA) private bootstrapData: BootstrapData,
) {
this.tabsChanged$.subscribe(() => {
@@ -318,6 +321,16 @@ export class AppService {
this.tabs[i2] = a
}
renameTab (tab: BaseTabComponent): void {
const modal = this.ngbModal.open(RenameTabModalComponent)
modal.componentInstance.value = tab.customTitle || tab.title
modal.result.then(result => {
tab.setTitle(result)
tab.customTitle = result
this.emitTabsChanged()
}).catch(() => null)
}
/** @hidden */
emitTabsChanged (): void {
this.tabsChanged.next()

View File

@@ -0,0 +1,113 @@
import { Inject, Injectable, Optional } from '@angular/core'
import { AppService, Command, CommandContext, CommandProvider, ConfigService, MenuItemOptions, SplitTabComponent, TabContextMenuItemProvider, ToolbarButton, ToolbarButtonProvider, TranslateService } from '../api'
import { SelectorService } from './selector.service'
@Injectable({ providedIn: 'root' })
export class CommandService {
private lastCommand = Promise.resolve()
constructor (
private selector: SelectorService,
private config: ConfigService,
private app: AppService,
private translate: TranslateService,
@Optional() @Inject(TabContextMenuItemProvider) protected contextMenuProviders: TabContextMenuItemProvider[],
@Inject(ToolbarButtonProvider) private toolbarButtonProviders: ToolbarButtonProvider[],
@Inject(CommandProvider) private commandProviders: CommandProvider[],
) {
this.contextMenuProviders.sort((a, b) => a.weight - b.weight)
}
async getCommands (context: CommandContext): Promise<Command[]> {
let buttons: ToolbarButton[] = []
this.config.enabledServices(this.toolbarButtonProviders).forEach(provider => {
buttons = buttons.concat(provider.provide())
})
buttons = buttons
.sort((a: ToolbarButton, b: ToolbarButton) => (a.weight ?? 0) - (b.weight ?? 0))
let items: MenuItemOptions[] = []
if (context.tab) {
for (const tabHeader of [false, true]) {
// Top-level tab menu
for (let section of await Promise.all(this.contextMenuProviders.map(x => x.getItems(context.tab!, tabHeader)))) {
// eslint-disable-next-line @typescript-eslint/no-loop-func
section = section.filter(item => !items.some(ex => ex.label === item.label))
items = items.concat(section)
}
if (context.tab instanceof SplitTabComponent) {
const tab = context.tab.getFocusedTab()
if (tab) {
for (let section of await Promise.all(this.contextMenuProviders.map(x => x.getItems(tab, tabHeader)))) {
// eslint-disable-next-line @typescript-eslint/no-loop-func
section = section.filter(item => !items.some(ex => ex.label === item.label))
items = items.concat(section)
}
}
}
}
}
items = items.filter(x => (x.enabled ?? true) && x.type !== 'separator')
const flatItems: MenuItemOptions[] = []
function flattenItem (item: MenuItemOptions, prefix?: string): void {
if (item.submenu) {
item.submenu.forEach(x => flattenItem(x, (prefix ? `${prefix} > ` : '') + (item.commandLabel ?? item.label)))
} else {
flatItems.push({
...item,
label: (prefix ? `${prefix} > ` : '') + (item.commandLabel ?? item.label),
})
}
}
items.forEach(x => flattenItem(x))
const commands = buttons.map(x => Command.fromToolbarButton(x))
commands.push(...flatItems.map(x => Command.fromMenuItem(x)))
for (const provider of this.config.enabledServices(this.commandProviders)) {
commands.push(...await provider.provide(context))
}
return commands
.sort((a, b) => (a.weight ?? 0) - (b.weight ?? 0))
.map(command => {
const run = command.run
command.run = async () => {
// Serialize execution
this.lastCommand = this.lastCommand.finally(run)
await this.lastCommand
}
return command
})
}
async run (id: string, context: CommandContext): Promise<void> {
const commands = await this.getCommands(context)
const command = commands.find(x => x.id === id)
await command?.run()
}
async showSelector (): Promise<void> {
if (this.selector.active) {
return
}
const context: CommandContext = {}
const tab = this.app.activeTab
if (tab instanceof SplitTabComponent) {
context.tab = tab.getFocusedTab() ?? undefined
}
const commands = await this.getCommands(context)
await this.selector.show(
this.translate.instant('Commands'),
commands.map(c => ({
name: c.label,
callback: c.run,
description: c.sublabel,
icon: c.icon,
})),
)
}
}

View File

@@ -41,7 +41,7 @@ export class ConfigProxy {
enumerable: true,
configurable: false,
get: () => proxy,
}
},
)
} else {
Object.defineProperty(
@@ -54,7 +54,7 @@ export class ConfigProxy {
set: (value) => {
this.__setValue(key, value)
},
}
},
)
}
}

View File

@@ -47,7 +47,7 @@ export class FileProvidersService {
providers.map(p => ({
name: p.name,
result: p,
}))
})),
)
}
}

View File

@@ -52,7 +52,7 @@ export class HomeBaseService {
if (!window.localStorage.analyticsUserID) {
window.localStorage.analyticsUserID = uuidv4()
}
this.mixpanel = mixpanel.init('bb4638b0860eef14c04d4fbc5eb365fa')
this.mixpanel = (mixpanel as any).init('bb4638b0860eef14c04d4fbc5eb365fa')
if (!window.localStorage.installEventSent) {
this.mixpanel.track('freshInstall', this.getAnalyticsProperties())
window.localStorage.installEventSent = true

View File

@@ -218,7 +218,7 @@ export class HotkeysService {
let matched = true
for (const item of sequence) {
const nextOffset = currentSequence.slice(lastIndex).findIndex(
x => x.toLowerCase() === item.toLowerCase()
x => x.toLowerCase() === item.toLowerCase(),
)
if (nextOffset === -1) {
matched = false
@@ -274,7 +274,7 @@ export class HotkeysService {
return (
await Promise.all(
this.config.enabledServices(this.hotkeyProviders)
.map(async x => x.provide())
.map(async x => x.provide()),
)
).reduce((a, b) => a.concat(b))
}

View File

@@ -4,6 +4,7 @@ import { TranslateService } from '@ngx-translate/core'
import localeENUS from '@angular/common/locales/en'
import localeENGB from '@angular/common/locales/en-GB'
import localeAF from '@angular/common/locales/af'
import localeBG from '@angular/common/locales/bg'
import localeDA from '@angular/common/locales/da'
import localeDE from '@angular/common/locales/de'
@@ -17,6 +18,7 @@ import localeKO from '@angular/common/locales/ko'
import localePL from '@angular/common/locales/pl'
import localePT from '@angular/common/locales/pt'
import localeRU from '@angular/common/locales/ru'
import localeSV from '@angular/common/locales/sv'
import localeUK from '@angular/common/locales/uk'
import localeZH from '@angular/common/locales/zh'
import { Observable, Subject } from 'rxjs'
@@ -26,6 +28,7 @@ import { LogService, Logger } from './log.service'
registerLocaleData(localeENUS)
registerLocaleData(localeENGB)
registerLocaleData(localeAF)
registerLocaleData(localeBG)
registerLocaleData(localeDA)
registerLocaleData(localeDE)
@@ -39,6 +42,7 @@ registerLocaleData(localeKO)
registerLocaleData(localePL)
registerLocaleData(localePT)
registerLocaleData(localeRU)
registerLocaleData(localeSV)
registerLocaleData(localeUK)
registerLocaleData(localeZH)
@@ -63,7 +67,7 @@ export class TranslateServiceWrapper extends TranslateService {
}
this.translations[this.defaultLang][key] ??= this.compiler.compile(
this._defaultTranslation[key] || key,
this.defaultLang
this.defaultLang,
)
return super.getParsedResult(translations, key, interpolateParams ?? {})
}
@@ -74,6 +78,10 @@ export class LocaleService {
private logger: Logger
static allLanguages = [
{
code: 'af-ZA',
name: 'Afrikaans',
},
{
code: 'id-ID',
name: 'Bahasa Indonesia',
@@ -122,6 +130,10 @@ export class LocaleService {
code: 'pt-BR',
name: 'Português do Brasil',
},
{
code: 'sv-SE',
name: 'Svenska',
},
{
code: 'bg-BG',
name: 'Български',

View File

@@ -106,6 +106,10 @@ export class ProfilesService {
}
showProfileSelector (): Promise<PartialProfile<Profile>|null> {
if (this.selector.active) {
return Promise.resolve(null)
}
return new Promise<PartialProfile<Profile>|null>(async (resolve, reject) => {
try {
const recentProfiles = this.getRecentProfiles()

View File

@@ -1,12 +1,18 @@
import { Injectable } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'
import { SelectorModalComponent } from '../components/selectorModal.component'
import { SelectorOption } from '../api/selector'
@Injectable({ providedIn: 'root' })
export class SelectorService {
private current: NgbModalRef|null = null
get active (): boolean {
return !!this.current
}
/** @hidden */
private constructor (
private ngbModal: NgbModal,
@@ -14,6 +20,10 @@ export class SelectorService {
show <T> (name: string, options: SelectorOption<T>[]): Promise<T> {
const modal = this.ngbModal.open(SelectorModalComponent)
this.current = modal
modal.result.finally(() => {
this.current = null
})
const instance: SelectorModalComponent<T> = modal.componentInstance
instance.name = name
instance.options = options

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