claude-code-plus-plus 0.1.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/LICENSE +21 -0
- package/README.md +74 -0
- package/assets/screenshot.png +0 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +2 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/worktree-manager.d.ts +26 -0
- package/dist/core/worktree-manager.d.ts.map +1 -0
- package/dist/core/worktree-manager.js +177 -0
- package/dist/core/worktree-manager.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +208 -0
- package/dist/index.js.map +1 -0
- package/dist/sidebar.d.ts +13 -0
- package/dist/sidebar.d.ts.map +1 -0
- package/dist/sidebar.js +1535 -0
- package/dist/sidebar.js.map +1 -0
- package/dist/state.d.ts +53 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +101 -0
- package/dist/state.js.map +1 -0
- package/dist/terminal-manager.d.ts +16 -0
- package/dist/terminal-manager.d.ts.map +1 -0
- package/dist/terminal-manager.js +364 -0
- package/dist/terminal-manager.js.map +1 -0
- package/dist/tmux.d.ts +163 -0
- package/dist/tmux.d.ts.map +1 -0
- package/dist/tmux.js +360 -0
- package/dist/tmux.js.map +1 -0
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Terminal Manager - Tab UI for terminal panes
|
|
4
|
+
*
|
|
5
|
+
* Runs in a small horizontal pane above the terminal area.
|
|
6
|
+
* Shows tabs for each terminal, allows switching between them.
|
|
7
|
+
*
|
|
8
|
+
* Layout:
|
|
9
|
+
* ┌──────────────────────────────────────┐
|
|
10
|
+
* │ [Terminal 1] [Terminal 2] [Term...] │ <- This pane (3 rows)
|
|
11
|
+
* ├──────────────────────────────────────┤
|
|
12
|
+
* │ Active terminal content │ <- One terminal visible
|
|
13
|
+
* └──────────────────────────────────────┘
|
|
14
|
+
*/
|
|
15
|
+
import { execSync } from 'child_process';
|
|
16
|
+
import { readFileSync, writeFileSync, existsSync, watchFile, unwatchFile } from 'fs';
|
|
17
|
+
// ANSI escape codes
|
|
18
|
+
const ESC = '\x1b';
|
|
19
|
+
const CSI = `${ESC}[`;
|
|
20
|
+
const ansi = {
|
|
21
|
+
clearScreen: `${CSI}2J`,
|
|
22
|
+
moveTo: (row, col) => `${CSI}${row};${col}H`,
|
|
23
|
+
reset: `${CSI}0m`,
|
|
24
|
+
bold: `${CSI}1m`,
|
|
25
|
+
dim: `${CSI}2m`,
|
|
26
|
+
inverse: `${CSI}7m`,
|
|
27
|
+
fg: {
|
|
28
|
+
black: `${CSI}30m`,
|
|
29
|
+
red: `${CSI}31m`,
|
|
30
|
+
green: `${CSI}32m`,
|
|
31
|
+
yellow: `${CSI}33m`,
|
|
32
|
+
blue: `${CSI}34m`,
|
|
33
|
+
magenta: `${CSI}35m`,
|
|
34
|
+
cyan: `${CSI}36m`,
|
|
35
|
+
white: `${CSI}37m`,
|
|
36
|
+
gray: `${CSI}90m`,
|
|
37
|
+
},
|
|
38
|
+
bg: {
|
|
39
|
+
black: `${CSI}40m`,
|
|
40
|
+
red: `${CSI}41m`,
|
|
41
|
+
green: `${CSI}42m`,
|
|
42
|
+
yellow: `${CSI}43m`,
|
|
43
|
+
blue: `${CSI}44m`,
|
|
44
|
+
magenta: `${CSI}45m`,
|
|
45
|
+
cyan: `${CSI}46m`,
|
|
46
|
+
white: `${CSI}47m`,
|
|
47
|
+
gray: `${CSI}100m`,
|
|
48
|
+
},
|
|
49
|
+
hideCursor: `${CSI}?25l`,
|
|
50
|
+
showCursor: `${CSI}?25h`,
|
|
51
|
+
// Mouse support
|
|
52
|
+
enableMouse: `${CSI}?1000h${CSI}?1006h`, // Enable mouse tracking + SGR extended mode
|
|
53
|
+
disableMouse: `${CSI}?1000l${CSI}?1006l`,
|
|
54
|
+
};
|
|
55
|
+
class TerminalManager {
|
|
56
|
+
stateFile;
|
|
57
|
+
state = null;
|
|
58
|
+
running = false;
|
|
59
|
+
tabPositions = [];
|
|
60
|
+
constructor(stateFile) {
|
|
61
|
+
this.stateFile = stateFile;
|
|
62
|
+
}
|
|
63
|
+
loadState() {
|
|
64
|
+
try {
|
|
65
|
+
if (!existsSync(this.stateFile)) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
const data = readFileSync(this.stateFile, 'utf-8');
|
|
69
|
+
this.state = JSON.parse(data);
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
saveState() {
|
|
77
|
+
if (!this.state)
|
|
78
|
+
return;
|
|
79
|
+
try {
|
|
80
|
+
writeFileSync(this.stateFile, JSON.stringify(this.state, null, 2));
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
// Failed to save state
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
start() {
|
|
87
|
+
// Initial state load
|
|
88
|
+
if (!this.loadState()) {
|
|
89
|
+
console.error('Failed to load state file');
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
this.running = true;
|
|
93
|
+
// Set up terminal
|
|
94
|
+
process.stdout.write(ansi.hideCursor);
|
|
95
|
+
process.stdout.write(ansi.enableMouse);
|
|
96
|
+
// Set up raw mode for input
|
|
97
|
+
if (process.stdin.isTTY) {
|
|
98
|
+
process.stdin.setRawMode(true);
|
|
99
|
+
}
|
|
100
|
+
process.stdin.resume();
|
|
101
|
+
// Use raw data handler for both keyboard and mouse
|
|
102
|
+
process.stdin.on('data', this.handleInput.bind(this));
|
|
103
|
+
// Watch state file for changes
|
|
104
|
+
watchFile(this.stateFile, { interval: 100 }, () => {
|
|
105
|
+
this.loadState();
|
|
106
|
+
this.render();
|
|
107
|
+
});
|
|
108
|
+
// Handle resize
|
|
109
|
+
process.stdout.on('resize', () => {
|
|
110
|
+
this.render();
|
|
111
|
+
});
|
|
112
|
+
// Initial render
|
|
113
|
+
this.render();
|
|
114
|
+
}
|
|
115
|
+
stop() {
|
|
116
|
+
this.running = false;
|
|
117
|
+
unwatchFile(this.stateFile);
|
|
118
|
+
process.stdout.write(ansi.disableMouse);
|
|
119
|
+
process.stdout.write(ansi.showCursor);
|
|
120
|
+
process.stdout.write(ansi.reset);
|
|
121
|
+
if (process.stdin.isTTY) {
|
|
122
|
+
process.stdin.setRawMode(false);
|
|
123
|
+
}
|
|
124
|
+
process.stdin.pause();
|
|
125
|
+
}
|
|
126
|
+
handleInput(data) {
|
|
127
|
+
if (!this.state)
|
|
128
|
+
return;
|
|
129
|
+
const input = data.toString();
|
|
130
|
+
// Check for SGR mouse events: \x1b[<button;col;rowM or \x1b[<button;col;rowm
|
|
131
|
+
// Button 0 = left click press, lowercase 'm' = release
|
|
132
|
+
const mouseMatch = input.match(/\x1b\[<(\d+);(\d+);(\d+)([Mm])/);
|
|
133
|
+
if (mouseMatch) {
|
|
134
|
+
const button = parseInt(mouseMatch[1], 10);
|
|
135
|
+
const col = parseInt(mouseMatch[2], 10);
|
|
136
|
+
const row = parseInt(mouseMatch[3], 10);
|
|
137
|
+
const isRelease = mouseMatch[4] === 'm';
|
|
138
|
+
// Handle left click release (button 0)
|
|
139
|
+
if (button === 0 && isRelease && row === 1) {
|
|
140
|
+
this.handleTabClick(col);
|
|
141
|
+
}
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// Handle keyboard input
|
|
145
|
+
const key = input;
|
|
146
|
+
// Number keys 1-9 to switch directly to tab
|
|
147
|
+
if (key >= '1' && key <= '9') {
|
|
148
|
+
const tabIndex = parseInt(key, 10) - 1;
|
|
149
|
+
if (tabIndex < this.state.terminals.length) {
|
|
150
|
+
this.switchToTab(tabIndex);
|
|
151
|
+
}
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
// Tab key to cycle forward
|
|
155
|
+
if (key === '\t') {
|
|
156
|
+
this.switchTab(1);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
// Shift+Tab (backtab) to cycle backward - comes as \x1b[Z
|
|
160
|
+
if (key === '\x1b[Z') {
|
|
161
|
+
this.switchTab(-1);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
// 'h' or left arrow - move left
|
|
165
|
+
if (key === 'h' || key === '\x1b[D' || key === '\x1bOD') {
|
|
166
|
+
this.switchTab(-1);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
// 'l' or right arrow - move right
|
|
170
|
+
if (key === 'l' || key === '\x1b[C' || key === '\x1bOC') {
|
|
171
|
+
this.switchTab(1);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
// Enter - focus the terminal pane
|
|
175
|
+
if (key === '\r') {
|
|
176
|
+
this.focusActiveTerminal();
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
// 'd' - delete current terminal
|
|
180
|
+
if (key === 'd') {
|
|
181
|
+
this.deleteCurrentTerminal();
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
// 'c' or 'n' - create new terminal
|
|
185
|
+
if (key === 'c' || key === 'n') {
|
|
186
|
+
this.requestNewTerminal();
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
// Ignore Ctrl+C
|
|
190
|
+
if (key === '\x03') {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
handleTabClick(col) {
|
|
195
|
+
// Find which tab was clicked based on column position
|
|
196
|
+
for (const tab of this.tabPositions) {
|
|
197
|
+
if (col >= tab.startCol && col <= tab.endCol) {
|
|
198
|
+
if (tab.index !== this.state?.activeIndex) {
|
|
199
|
+
this.switchToTab(tab.index);
|
|
200
|
+
}
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
switchToTab(targetIndex) {
|
|
206
|
+
if (!this.state || targetIndex < 0 || targetIndex >= this.state.terminals.length)
|
|
207
|
+
return;
|
|
208
|
+
if (targetIndex === this.state.activeIndex)
|
|
209
|
+
return;
|
|
210
|
+
// Notify sidebar to handle the switch - sidebar will do the pane manipulation
|
|
211
|
+
// and update the state file, which we'll pick up via file watch
|
|
212
|
+
this.notifySidebar('switch', targetIndex);
|
|
213
|
+
}
|
|
214
|
+
switchTab(direction) {
|
|
215
|
+
if (!this.state || this.state.terminals.length === 0)
|
|
216
|
+
return;
|
|
217
|
+
const newIndex = this.state.activeIndex + direction;
|
|
218
|
+
// Bounds check
|
|
219
|
+
if (newIndex < 0 || newIndex >= this.state.terminals.length) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
const currentTerminal = this.state.terminals[this.state.activeIndex];
|
|
223
|
+
const newTerminal = this.state.terminals[newIndex];
|
|
224
|
+
// Swap panes: break current, join new
|
|
225
|
+
try {
|
|
226
|
+
// Break current terminal to background
|
|
227
|
+
execSync(`tmux break-pane -d -t ${currentTerminal.id}`, { stdio: 'ignore' });
|
|
228
|
+
// Join new terminal below the manager pane
|
|
229
|
+
execSync(`tmux join-pane -v -t ${this.state.terminalManagerPaneId} -s ${newTerminal.id}`, { stdio: 'ignore' });
|
|
230
|
+
// Update state and save to file
|
|
231
|
+
this.state.activeIndex = newIndex;
|
|
232
|
+
this.saveState();
|
|
233
|
+
// Notify sidebar of the change
|
|
234
|
+
this.notifySidebar('switch', newIndex);
|
|
235
|
+
this.render();
|
|
236
|
+
}
|
|
237
|
+
catch (err) {
|
|
238
|
+
// Swap failed, try to recover
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
focusActiveTerminal() {
|
|
242
|
+
if (!this.state || this.state.terminals.length === 0)
|
|
243
|
+
return;
|
|
244
|
+
const activeTerminal = this.state.terminals[this.state.activeIndex];
|
|
245
|
+
try {
|
|
246
|
+
execSync(`tmux select-pane -t ${activeTerminal.id}`, { stdio: 'ignore' });
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
// Focus failed
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
deleteCurrentTerminal() {
|
|
253
|
+
if (!this.state || this.state.terminals.length === 0)
|
|
254
|
+
return;
|
|
255
|
+
const terminalToDelete = this.state.terminals[this.state.activeIndex];
|
|
256
|
+
// Notify sidebar to handle deletion
|
|
257
|
+
this.notifySidebar('delete', this.state.activeIndex);
|
|
258
|
+
}
|
|
259
|
+
requestNewTerminal() {
|
|
260
|
+
if (!this.state)
|
|
261
|
+
return;
|
|
262
|
+
// Send Ctrl+T to sidebar to create new terminal
|
|
263
|
+
try {
|
|
264
|
+
execSync(`tmux send-keys -t ${this.state.sidebarPaneId} C-t`, { stdio: 'ignore' });
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
// Failed to send
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
notifySidebar(action, index) {
|
|
271
|
+
if (!this.state)
|
|
272
|
+
return;
|
|
273
|
+
// Send special key sequence to sidebar
|
|
274
|
+
// Format: Ctrl+U followed by action code, space, and index, then Enter
|
|
275
|
+
const actionCode = action === 'switch' ? 'S' : 'D';
|
|
276
|
+
try {
|
|
277
|
+
// Use -l (literal) flag to send the command string as-is
|
|
278
|
+
execSync(`tmux send-keys -t ${this.state.sidebarPaneId} C-u`, { stdio: 'ignore' });
|
|
279
|
+
execSync(`tmux send-keys -t ${this.state.sidebarPaneId} -l "${actionCode} ${index}"`, { stdio: 'ignore' });
|
|
280
|
+
execSync(`tmux send-keys -t ${this.state.sidebarPaneId} Enter`, { stdio: 'ignore' });
|
|
281
|
+
}
|
|
282
|
+
catch (err) {
|
|
283
|
+
// Failed to notify
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
render() {
|
|
287
|
+
if (!this.state)
|
|
288
|
+
return;
|
|
289
|
+
const cols = process.stdout.columns || 80;
|
|
290
|
+
let output = ansi.clearScreen;
|
|
291
|
+
output += ansi.moveTo(1, 1);
|
|
292
|
+
// Clear tab positions
|
|
293
|
+
this.tabPositions = [];
|
|
294
|
+
const hints = 'click/1-9:switch ↵:focus n:new d:del';
|
|
295
|
+
const hintsLen = hints.length;
|
|
296
|
+
if (this.state.terminals.length === 0) {
|
|
297
|
+
// No terminals message on left, hints on right
|
|
298
|
+
const msg = "No terminals. Press 'n' to create.";
|
|
299
|
+
const padding = cols - msg.length - hintsLen - 2;
|
|
300
|
+
output += `${ansi.dim}${msg}${' '.repeat(Math.max(1, padding))}${hints}${ansi.reset}`;
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
// Build tabs and track positions
|
|
304
|
+
let tabLine = '';
|
|
305
|
+
let currentCol = 1; // 1-indexed column position
|
|
306
|
+
for (let i = 0; i < this.state.terminals.length; i++) {
|
|
307
|
+
const term = this.state.terminals[i];
|
|
308
|
+
const isActive = i === this.state.activeIndex;
|
|
309
|
+
const tabNum = i + 1; // 1-indexed for display
|
|
310
|
+
// Calculate available space for tabs (leave room for hints)
|
|
311
|
+
const availableForTabs = cols - hintsLen - 4;
|
|
312
|
+
const maxTitleLen = Math.max(4, Math.floor(availableForTabs / this.state.terminals.length) - 5);
|
|
313
|
+
// Truncate title if needed
|
|
314
|
+
let title = term.title;
|
|
315
|
+
if (title.length > maxTitleLen) {
|
|
316
|
+
title = title.slice(0, maxTitleLen - 2) + '..';
|
|
317
|
+
}
|
|
318
|
+
// Show tab number for quick switching (only for tabs 1-9)
|
|
319
|
+
const tabText = tabNum <= 9 ? ` ${tabNum}:${title} ` : ` ${title} `;
|
|
320
|
+
// Record tab position for click handling
|
|
321
|
+
this.tabPositions.push({
|
|
322
|
+
index: i,
|
|
323
|
+
startCol: currentCol,
|
|
324
|
+
endCol: currentCol + tabText.length - 1,
|
|
325
|
+
});
|
|
326
|
+
currentCol += tabText.length;
|
|
327
|
+
if (isActive) {
|
|
328
|
+
tabLine += `${ansi.bg.cyan}${ansi.fg.black}${ansi.bold}${tabText}${ansi.reset}`;
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
tabLine += `${ansi.dim}${tabText}${ansi.reset}`;
|
|
332
|
+
}
|
|
333
|
+
// Add separator
|
|
334
|
+
if (i < this.state.terminals.length - 1) {
|
|
335
|
+
tabLine += `${ansi.fg.gray}│${ansi.reset}`;
|
|
336
|
+
currentCol += 1;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
// Calculate padding between tabs and hints
|
|
340
|
+
const tabsWidth = currentCol - 1;
|
|
341
|
+
const padding = cols - tabsWidth - hintsLen - 1;
|
|
342
|
+
output += tabLine;
|
|
343
|
+
output += ' '.repeat(Math.max(1, padding));
|
|
344
|
+
output += `${ansi.dim}${hints}${ansi.reset}`;
|
|
345
|
+
}
|
|
346
|
+
process.stdout.write(output);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
// Main entry point
|
|
350
|
+
async function main() {
|
|
351
|
+
const args = process.argv.slice(2);
|
|
352
|
+
if (args.length < 1) {
|
|
353
|
+
console.error('Usage: terminal-manager <stateFile>');
|
|
354
|
+
process.exit(1);
|
|
355
|
+
}
|
|
356
|
+
const stateFile = args[0];
|
|
357
|
+
const manager = new TerminalManager(stateFile);
|
|
358
|
+
manager.start();
|
|
359
|
+
}
|
|
360
|
+
main().catch((err) => {
|
|
361
|
+
console.error('Terminal manager error:', err);
|
|
362
|
+
process.exit(1);
|
|
363
|
+
});
|
|
364
|
+
//# sourceMappingURL=terminal-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-manager.js","sourceRoot":"","sources":["../src/terminal-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/tmux.d.ts
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tmux control utilities
|
|
3
|
+
*/
|
|
4
|
+
export interface TmuxPane {
|
|
5
|
+
id: string;
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
active: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface TmuxWindow {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
active: boolean;
|
|
14
|
+
panes: TmuxPane[];
|
|
15
|
+
}
|
|
16
|
+
export declare class Tmux {
|
|
17
|
+
private sessionName;
|
|
18
|
+
constructor(sessionName?: string);
|
|
19
|
+
/**
|
|
20
|
+
* Check if tmux is installed
|
|
21
|
+
*/
|
|
22
|
+
static isAvailable(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Check if our session already exists
|
|
25
|
+
*/
|
|
26
|
+
sessionExists(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Kill existing session if it exists
|
|
29
|
+
*/
|
|
30
|
+
killSession(): void;
|
|
31
|
+
/**
|
|
32
|
+
* Create a new tmux session (detached)
|
|
33
|
+
* Returns the initial window/pane ID
|
|
34
|
+
*/
|
|
35
|
+
createSession(startDir: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Split pane horizontally (left/right)
|
|
38
|
+
* Returns the new pane ID (right pane)
|
|
39
|
+
*/
|
|
40
|
+
splitHorizontal(percentage?: number, startDir?: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* Split pane vertically (top/bottom)
|
|
43
|
+
* Returns the new pane ID (bottom pane)
|
|
44
|
+
*/
|
|
45
|
+
splitVertical(percentage?: number, startDir?: string): string;
|
|
46
|
+
/**
|
|
47
|
+
* Send keys to a specific pane
|
|
48
|
+
*/
|
|
49
|
+
/**
|
|
50
|
+
* Send literal text to a pane (spaces and special chars preserved)
|
|
51
|
+
*/
|
|
52
|
+
sendKeys(paneId: string, keys: string, enter?: boolean): void;
|
|
53
|
+
/**
|
|
54
|
+
* Send control/special keys (e.g., C-c for Ctrl+C, Enter, Escape)
|
|
55
|
+
*/
|
|
56
|
+
sendControlKey(paneId: string, key: string): void;
|
|
57
|
+
/**
|
|
58
|
+
* Run a command in a specific pane
|
|
59
|
+
*/
|
|
60
|
+
runInPane(paneId: string, command: string): void;
|
|
61
|
+
/**
|
|
62
|
+
* Select (focus) a specific pane
|
|
63
|
+
*/
|
|
64
|
+
selectPane(paneId: string): void;
|
|
65
|
+
/**
|
|
66
|
+
* Resize a pane
|
|
67
|
+
*/
|
|
68
|
+
resizePane(paneId: string, width?: number, height?: number): void;
|
|
69
|
+
/**
|
|
70
|
+
* Break a pane out to its own window (keeps it running in background)
|
|
71
|
+
* Returns the new window ID
|
|
72
|
+
*/
|
|
73
|
+
breakPane(paneId: string, windowName?: string): string;
|
|
74
|
+
/**
|
|
75
|
+
* Join a pane from another window into the current window
|
|
76
|
+
* Returns the new pane ID
|
|
77
|
+
*/
|
|
78
|
+
joinPane(sourcePaneId: string, targetPaneId: string, horizontal?: boolean): string;
|
|
79
|
+
/**
|
|
80
|
+
* Swap two panes
|
|
81
|
+
*/
|
|
82
|
+
swapPane(paneId1: string, paneId2: string): void;
|
|
83
|
+
/**
|
|
84
|
+
* Create a new pane by splitting, run a command, then break it to background
|
|
85
|
+
* Returns the pane ID (which persists even after breaking to background window)
|
|
86
|
+
*/
|
|
87
|
+
createBackgroundPane(startDir: string, command?: string): string;
|
|
88
|
+
/**
|
|
89
|
+
* Bring a background pane to the foreground (swap with current right pane)
|
|
90
|
+
*/
|
|
91
|
+
showPane(paneId: string, targetPaneId: string): void;
|
|
92
|
+
/**
|
|
93
|
+
* Create a new window (like a tab)
|
|
94
|
+
*/
|
|
95
|
+
createWindow(name: string, startDir?: string): string;
|
|
96
|
+
/**
|
|
97
|
+
* Select a window by index or ID
|
|
98
|
+
*/
|
|
99
|
+
selectWindow(windowId: string): void;
|
|
100
|
+
/**
|
|
101
|
+
* Rename a window
|
|
102
|
+
*/
|
|
103
|
+
renameWindow(windowId: string, name: string): void;
|
|
104
|
+
/**
|
|
105
|
+
* Kill a pane
|
|
106
|
+
*/
|
|
107
|
+
killPane(paneId: string): void;
|
|
108
|
+
/**
|
|
109
|
+
* Kill a window
|
|
110
|
+
*/
|
|
111
|
+
killWindow(windowId: string): void;
|
|
112
|
+
/**
|
|
113
|
+
* Detach the current client from the session
|
|
114
|
+
*/
|
|
115
|
+
detachClient(): void;
|
|
116
|
+
/**
|
|
117
|
+
* Attach to the session (takes over the terminal)
|
|
118
|
+
* This is blocking - returns only after detach/exit
|
|
119
|
+
*/
|
|
120
|
+
attach(): number;
|
|
121
|
+
/**
|
|
122
|
+
* Get list of panes in current window
|
|
123
|
+
*/
|
|
124
|
+
listPanes(): TmuxPane[];
|
|
125
|
+
/**
|
|
126
|
+
* Get list of windows
|
|
127
|
+
*/
|
|
128
|
+
listWindows(): TmuxWindow[];
|
|
129
|
+
/**
|
|
130
|
+
* Set a tmux option
|
|
131
|
+
*/
|
|
132
|
+
setOption(option: string, value: string, global?: boolean): void;
|
|
133
|
+
/**
|
|
134
|
+
* Set a pane-specific option
|
|
135
|
+
*/
|
|
136
|
+
setPaneOption(paneId: string, option: string, value: string): void;
|
|
137
|
+
/**
|
|
138
|
+
* Bind a key
|
|
139
|
+
*/
|
|
140
|
+
bindKey(key: string, command: string): void;
|
|
141
|
+
/**
|
|
142
|
+
* Unbind a key
|
|
143
|
+
*/
|
|
144
|
+
unbindKey(table: string, key: string): void;
|
|
145
|
+
/**
|
|
146
|
+
* Bind a conditional key (does different things based on pane)
|
|
147
|
+
*/
|
|
148
|
+
bindConditionalKey(table: string, key: string, condition: string, ifTrue: string, ifFalse: string): void;
|
|
149
|
+
/**
|
|
150
|
+
* Set up a key binding to toggle sidebar width
|
|
151
|
+
* Binds to Ctrl+G (no prefix needed, works from any pane)
|
|
152
|
+
*/
|
|
153
|
+
bindSidebarToggle(sidebarPaneId: string, expandedWidth: number, collapsedWidth: number): void;
|
|
154
|
+
/**
|
|
155
|
+
* Disable scroll wheel for a specific pane, keep it for others
|
|
156
|
+
*/
|
|
157
|
+
disableScrollForPane(paneId: string): void;
|
|
158
|
+
/**
|
|
159
|
+
* Get session name
|
|
160
|
+
*/
|
|
161
|
+
getSessionName(): string;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=tmux.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmux.d.ts","sourceRoot":"","sources":["../src/tmux.ts"],"names":[],"mappings":"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"}
|