tabby-tmux 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +93 -0
- package/README.zh-CN.md +93 -0
- package/dist/index.js +4226 -0
- package/dist/index.js.map +1 -0
- package/package.json +60 -0
package/README.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# tabby-tmux
|
|
2
|
+
|
|
3
|
+
[中文](README.zh-CN.md)
|
|
4
|
+
|
|
5
|
+
[](https://github.com/ruanimal/tabby-tmux/actions/workflows/build.yml)
|
|
6
|
+
[](https://www.npmjs.com/package/tabby-tmux)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+
|
|
9
|
+
A [Tabby](https://tabby.sh/) plugin that provides tmux Control Mode integration, inspired by [iTerm2 tmux Integration](https://iterm2.com/documentation-tmux-integration.html).
|
|
10
|
+
|
|
11
|
+
## Features
|
|
12
|
+
|
|
13
|
+
- **Native UI integration** — Maps tmux windows and panes into native Tabby components
|
|
14
|
+
- **Session persistence** — tmux sessions survive Tabby restarts; reconnect via `tmux -CC attach`
|
|
15
|
+
- **Window bar** — Collapsible bottom bar for switching tmux windows, with support for creating new windows and disconnecting
|
|
16
|
+
- **Layout sync** — Automatically syncs tmux layout into Tabby SplitTab
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
### Via Tabby Settings
|
|
21
|
+
|
|
22
|
+
1. Open Tabby → **Settings** → **Plugins**
|
|
23
|
+
2. Search for `tabby-tmux`
|
|
24
|
+
3. Click **Install**
|
|
25
|
+
|
|
26
|
+
### Via command line
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
cd <tabby-plugins-dir>
|
|
30
|
+
npm install tabby-tmux
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Usage
|
|
34
|
+
|
|
35
|
+
1. Create a new profile in Tabby, select the **Tmux** type
|
|
36
|
+
2. Configure the tmux session name (default: `default`)
|
|
37
|
+
3. Once connected, the bottom window bar shows tmux windows — switch between windows and panes from there
|
|
38
|
+
|
|
39
|
+
### Development
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pnpm install
|
|
43
|
+
pnpm run watch # watch mode
|
|
44
|
+
|
|
45
|
+
# Launch Tabby with the plugin loaded
|
|
46
|
+
TABBY_PLUGINS=$(pwd) tabby --debug
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## trzsz Support
|
|
50
|
+
|
|
51
|
+
This plugin is fully compatible with the [tabby-trzsz](https://github.com/trzsz/tabby-trzsz) plugin, enabling file transfer (`trz`/`tsz`) and drag-and-drop upload over tmux panes.
|
|
52
|
+
|
|
53
|
+
Install both plugins and they work together automatically:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
cd <tabby-plugins-dir>
|
|
57
|
+
npm install tabby-tmux tabby-trzsz
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
> **Note:** When uploading files over WebSocket terminals (e.g. via [tabby-ws-term](https://github.com/ruanimal/tabby-ws-term)), use `trzsz -B 10K` to improve compatibility.
|
|
61
|
+
|
|
62
|
+
## Architecture
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
TmuxService
|
|
66
|
+
├── TmuxGateway — tmux Control Mode protocol parser
|
|
67
|
+
├── TmuxController — session state management & event dispatch
|
|
68
|
+
├── TmuxSessionTab — extends SplitTabComponent, manages window/pane mapping
|
|
69
|
+
├── TmuxWindowBar — collapsible bottom window switcher bar
|
|
70
|
+
└── TmuxPaneTab — extends BaseTerminalTabComponent, single pane
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Data flow
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
User input → TmuxPaneTab → paneSession.feedFromTerminal()
|
|
77
|
+
→ controller.writeToPane(paneId, data)
|
|
78
|
+
→ gateway.sendKeys(hex, paneId) → PTY → tmux
|
|
79
|
+
|
|
80
|
+
tmux output → PTY → controller.handleLine()
|
|
81
|
+
→ gateway.executeLine() → parse protocol
|
|
82
|
+
→ %output → paneSession.emitOutput()
|
|
83
|
+
→ %layout-change → event → SessionTab.syncLayout()
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Tech Stack
|
|
87
|
+
|
|
88
|
+
- **Framework**: Angular 15 + TypeScript 4.9
|
|
89
|
+
- **Dependencies**: `tabby-core`, `tabby-terminal`, `tabby-local`, `rxjs`
|
|
90
|
+
|
|
91
|
+
## License
|
|
92
|
+
|
|
93
|
+
MIT
|
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# tabby-tmux
|
|
2
|
+
|
|
3
|
+
[中文](README.zh-CN.md)
|
|
4
|
+
|
|
5
|
+
[](https://github.com/ruanimal/tabby-tmux/actions/workflows/build.yml)
|
|
6
|
+
[](https://www.npmjs.com/package/tabby-tmux)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+
|
|
9
|
+
A [Tabby](https://tabby.sh/) plugin that provides tmux Control Mode integration, inspired by [iTerm2 tmux Integration](https://iterm2.com/documentation-tmux-integration.html).
|
|
10
|
+
|
|
11
|
+
## Features
|
|
12
|
+
|
|
13
|
+
- **Native UI integration** — Maps tmux windows and panes into native Tabby components
|
|
14
|
+
- **Session persistence** — tmux sessions survive Tabby restarts; reconnect via `tmux -CC attach`
|
|
15
|
+
- **Window bar** — Collapsible bottom bar for switching tmux windows, with support for creating new windows and disconnecting
|
|
16
|
+
- **Layout sync** — Automatically syncs tmux layout into Tabby SplitTab
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
### Via Tabby Settings
|
|
21
|
+
|
|
22
|
+
1. Open Tabby → **Settings** → **Plugins**
|
|
23
|
+
2. Search for `tabby-tmux`
|
|
24
|
+
3. Click **Install**
|
|
25
|
+
|
|
26
|
+
### Via command line
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
cd <tabby-plugins-dir>
|
|
30
|
+
npm install tabby-tmux
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Usage
|
|
34
|
+
|
|
35
|
+
1. Create a new profile in Tabby, select the **Tmux** type
|
|
36
|
+
2. Configure the tmux session name (default: `default`)
|
|
37
|
+
3. Once connected, the bottom window bar shows tmux windows — switch between windows and panes from there
|
|
38
|
+
|
|
39
|
+
### Development
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pnpm install
|
|
43
|
+
pnpm run watch # watch mode
|
|
44
|
+
|
|
45
|
+
# Launch Tabby with the plugin loaded
|
|
46
|
+
TABBY_PLUGINS=$(pwd) tabby --debug
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## trzsz 支持
|
|
50
|
+
|
|
51
|
+
本插件与 [tabby-trzsz](https://github.com/trzsz/tabby-trzsz) 插件完全兼容,可在 tmux pane 中使用文件传输(`trz`/`tsz`)和拖拽上传。
|
|
52
|
+
|
|
53
|
+
同时安装两个插件即可自动配合工作:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
cd <tabby-plugins-dir>
|
|
57
|
+
npm install tabby-tmux tabby-trzsz
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
> **提示:** 通过 WebSocket 终端上传文件时(如使用 [tabby-ws-term](https://github.com/ruanimal/tabby-ws-term)),建议使用 `trzsz -B 10K` 以提高兼容性。
|
|
61
|
+
|
|
62
|
+
## Architecture
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
TmuxService
|
|
66
|
+
├── TmuxGateway — tmux Control Mode protocol parser
|
|
67
|
+
├── TmuxController — session state management & event dispatch
|
|
68
|
+
├── TmuxSessionTab — extends SplitTabComponent, manages window/pane mapping
|
|
69
|
+
├── TmuxWindowBar — collapsible bottom window switcher bar
|
|
70
|
+
└── TmuxPaneTab — extends BaseTerminalTabComponent, single pane
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Data flow
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
User input → TmuxPaneTab → paneSession.feedFromTerminal()
|
|
77
|
+
→ controller.writeToPane(paneId, data)
|
|
78
|
+
→ gateway.sendKeys(hex, paneId) → PTY → tmux
|
|
79
|
+
|
|
80
|
+
tmux output → PTY → controller.handleLine()
|
|
81
|
+
→ gateway.executeLine() → parse protocol
|
|
82
|
+
→ %output → paneSession.emitOutput()
|
|
83
|
+
→ %layout-change → event → SessionTab.syncLayout()
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Tech Stack
|
|
87
|
+
|
|
88
|
+
- **Framework**: Angular 15 + TypeScript 4.9
|
|
89
|
+
- **Dependencies**: `tabby-core`, `tabby-terminal`, `tabby-local`, `rxjs`
|
|
90
|
+
|
|
91
|
+
## License
|
|
92
|
+
|
|
93
|
+
MIT
|