dmux 3.1.1 → 3.2.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/dist/CleanTextInput.d.ts +9 -0
- package/dist/CleanTextInput.d.ts.map +1 -1
- package/dist/CleanTextInput.js +127 -47
- package/dist/CleanTextInput.js.map +1 -1
- package/dist/DmuxApp.d.ts +2 -2
- package/dist/DmuxApp.d.ts.map +1 -1
- package/dist/DmuxApp.js +1396 -750
- package/dist/DmuxApp.js.map +1 -1
- package/dist/actions/paneActions.d.ts.map +1 -1
- package/dist/actions/paneActions.js +68 -11
- package/dist/actions/paneActions.js.map +1 -1
- package/dist/actions/types.d.ts +1 -0
- package/dist/actions/types.d.ts.map +1 -1
- package/dist/actions/types.js +1 -0
- package/dist/actions/types.js.map +1 -1
- package/dist/components/ActionInputDialog.d.ts.map +1 -1
- package/dist/components/ActionInputDialog.js +3 -2
- package/dist/components/ActionInputDialog.js.map +1 -1
- package/dist/components/DialogBox.d.ts +16 -0
- package/dist/components/DialogBox.d.ts.map +1 -0
- package/dist/components/DialogBox.js +12 -0
- package/dist/components/DialogBox.js.map +1 -0
- package/dist/components/FooterHelp.d.ts +9 -0
- package/dist/components/FooterHelp.d.ts.map +1 -1
- package/dist/components/FooterHelp.js +41 -5
- package/dist/components/FooterHelp.js.map +1 -1
- package/dist/components/PaneCard.d.ts +3 -1
- package/dist/components/PaneCard.d.ts.map +1 -1
- package/dist/components/PaneCard.js +50 -33
- package/dist/components/PaneCard.js.map +1 -1
- package/dist/components/PanesGrid.d.ts +3 -5
- package/dist/components/PanesGrid.d.ts.map +1 -1
- package/dist/components/PanesGrid.js +40 -10
- package/dist/components/PanesGrid.js.map +1 -1
- package/dist/dashboard.js +1 -1
- package/dist/decorative-pane.d.ts +3 -0
- package/dist/decorative-pane.d.ts.map +1 -0
- package/dist/decorative-pane.js +136 -0
- package/dist/decorative-pane.js.map +1 -0
- package/dist/hooks/useActionSystem.d.ts +14 -1
- package/dist/hooks/useActionSystem.d.ts.map +1 -1
- package/dist/hooks/useActionSystem.js +93 -4
- package/dist/hooks/useActionSystem.js.map +1 -1
- package/dist/hooks/useNavigation.js +1 -1
- package/dist/hooks/useNavigation.js.map +1 -1
- package/dist/hooks/usePaneCreation.d.ts +1 -2
- package/dist/hooks/usePaneCreation.d.ts.map +1 -1
- package/dist/hooks/usePaneCreation.js +13 -27
- package/dist/hooks/usePaneCreation.js.map +1 -1
- package/dist/hooks/usePaneRunner.d.ts.map +1 -1
- package/dist/hooks/usePaneRunner.js +8 -3
- package/dist/hooks/usePaneRunner.js.map +1 -1
- package/dist/hooks/usePanes.d.ts.map +1 -1
- package/dist/hooks/usePanes.js +210 -37
- package/dist/hooks/usePanes.js.map +1 -1
- package/dist/hooks/useWorktreeActions.d.ts.map +1 -1
- package/dist/hooks/useWorktreeActions.js +7 -13
- package/dist/hooks/useWorktreeActions.js.map +1 -1
- package/dist/index.js +217 -29
- package/dist/index.js.map +1 -1
- package/dist/popups/agentChoicePopup.d.ts +7 -0
- package/dist/popups/agentChoicePopup.d.ts.map +1 -0
- package/dist/popups/agentChoicePopup.js +74 -0
- package/dist/popups/agentChoicePopup.js.map +1 -0
- package/dist/popups/choicePopup.d.ts +7 -0
- package/dist/popups/choicePopup.d.ts.map +1 -0
- package/dist/popups/choicePopup.js +64 -0
- package/dist/popups/choicePopup.js.map +1 -0
- package/dist/popups/components/FileList.d.ts +13 -0
- package/dist/popups/components/FileList.d.ts.map +1 -0
- package/dist/popups/components/FileList.js +61 -0
- package/dist/popups/components/FileList.js.map +1 -0
- package/dist/popups/components/PopupContainer.d.ts +14 -0
- package/dist/popups/components/PopupContainer.d.ts.map +1 -0
- package/dist/popups/components/PopupContainer.js +15 -0
- package/dist/popups/components/PopupContainer.js.map +1 -0
- package/dist/popups/components/PopupInputBox.d.ts +11 -0
- package/dist/popups/components/PopupInputBox.d.ts.map +1 -0
- package/dist/popups/components/PopupInputBox.js +10 -0
- package/dist/popups/components/PopupInputBox.js.map +1 -0
- package/dist/popups/components/PopupWrapper.d.ts +37 -0
- package/dist/popups/components/PopupWrapper.d.ts.map +1 -0
- package/dist/popups/components/PopupWrapper.js +88 -0
- package/dist/popups/components/PopupWrapper.js.map +1 -0
- package/dist/popups/components/index.d.ts +8 -0
- package/dist/popups/components/index.d.ts.map +1 -0
- package/dist/popups/components/index.js +8 -0
- package/dist/popups/components/index.js.map +1 -0
- package/dist/popups/config.d.ts +40 -0
- package/dist/popups/config.d.ts.map +1 -0
- package/dist/popups/config.js +40 -0
- package/dist/popups/config.js.map +1 -0
- package/dist/popups/confirmPopup.d.ts +7 -0
- package/dist/popups/confirmPopup.d.ts.map +1 -0
- package/dist/popups/confirmPopup.js +72 -0
- package/dist/popups/confirmPopup.js.map +1 -0
- package/dist/popups/hooksPopup.d.ts +7 -0
- package/dist/popups/hooksPopup.d.ts.map +1 -0
- package/dist/popups/hooksPopup.js +71 -0
- package/dist/popups/hooksPopup.js.map +1 -0
- package/dist/popups/inputPopup.d.ts +7 -0
- package/dist/popups/inputPopup.d.ts.map +1 -0
- package/dist/popups/inputPopup.js +48 -0
- package/dist/popups/inputPopup.js.map +1 -0
- package/dist/popups/kebabMenuPopup.d.ts +7 -0
- package/dist/popups/kebabMenuPopup.d.ts.map +1 -0
- package/dist/popups/kebabMenuPopup.js +52 -0
- package/dist/popups/kebabMenuPopup.js.map +1 -0
- package/dist/popups/logsPopup.d.ts +12 -0
- package/dist/popups/logsPopup.d.ts.map +1 -0
- package/dist/popups/logsPopup.js +364 -0
- package/dist/popups/logsPopup.js.map +1 -0
- package/dist/popups/mergePopup.d.ts +7 -0
- package/dist/popups/mergePopup.d.ts.map +1 -0
- package/dist/popups/mergePopup.js +310 -0
- package/dist/popups/mergePopup.js.map +1 -0
- package/dist/popups/newPanePopup.d.ts +7 -0
- package/dist/popups/newPanePopup.d.ts.map +1 -0
- package/dist/popups/newPanePopup.js +234 -0
- package/dist/popups/newPanePopup.js.map +1 -0
- package/dist/popups/progressPopup.d.ts +8 -0
- package/dist/popups/progressPopup.d.ts.map +1 -0
- package/dist/popups/progressPopup.js +54 -0
- package/dist/popups/progressPopup.js.map +1 -0
- package/dist/popups/remotePopup.d.ts +6 -0
- package/dist/popups/remotePopup.d.ts.map +1 -0
- package/dist/popups/remotePopup.js +166 -0
- package/dist/popups/remotePopup.js.map +1 -0
- package/dist/popups/settingsPopup.d.ts +7 -0
- package/dist/popups/settingsPopup.d.ts.map +1 -0
- package/dist/popups/settingsPopup.js +212 -0
- package/dist/popups/settingsPopup.js.map +1 -0
- package/dist/popups/shortcutsPopup.d.ts +6 -0
- package/dist/popups/shortcutsPopup.d.ts.map +1 -0
- package/dist/popups/shortcutsPopup.js +74 -0
- package/dist/popups/shortcutsPopup.js.map +1 -0
- package/dist/popups/templates/SimpleInputPopup.d.ts +15 -0
- package/dist/popups/templates/SimpleInputPopup.d.ts.map +1 -0
- package/dist/popups/templates/SimpleInputPopup.js +28 -0
- package/dist/popups/templates/SimpleInputPopup.js.map +1 -0
- package/dist/server/embedded-assets.d.ts.map +1 -1
- package/dist/server/embedded-assets.js +2066 -968
- package/dist/server/embedded-assets.js.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes.d.ts +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +73 -6
- package/dist/server/routes.js.map +1 -1
- package/dist/services/ConfigWatcher.d.ts.map +1 -1
- package/dist/services/ConfigWatcher.js +10 -3
- package/dist/services/ConfigWatcher.js.map +1 -1
- package/dist/services/LogService.d.ts +112 -0
- package/dist/services/LogService.d.ts.map +1 -0
- package/dist/services/LogService.js +252 -0
- package/dist/services/LogService.js.map +1 -0
- package/dist/services/PaneWorkerManager.d.ts.map +1 -1
- package/dist/services/PaneWorkerManager.js +35 -9
- package/dist/services/PaneWorkerManager.js.map +1 -1
- package/dist/services/TunnelService.d.ts +1 -0
- package/dist/services/TunnelService.d.ts.map +1 -1
- package/dist/services/TunnelService.js +56 -15
- package/dist/services/TunnelService.js.map +1 -1
- package/dist/shared/StateManager.d.ts +49 -1
- package/dist/shared/StateManager.d.ts.map +1 -1
- package/dist/shared/StateManager.js +97 -2
- package/dist/shared/StateManager.js.map +1 -1
- package/dist/spacer-pane.d.ts +8 -0
- package/dist/spacer-pane.d.ts.map +1 -0
- package/dist/spacer-pane.js +40 -0
- package/dist/spacer-pane.js.map +1 -0
- package/dist/theme/colors.d.ts +25 -0
- package/dist/theme/colors.d.ts.map +1 -0
- package/dist/theme/colors.js +33 -0
- package/dist/theme/colors.js.map +1 -0
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/asciiArt.d.ts +26 -0
- package/dist/utils/asciiArt.d.ts.map +1 -0
- package/dist/utils/asciiArt.js +88 -0
- package/dist/utils/asciiArt.js.map +1 -0
- package/dist/utils/conflictResolutionPane.d.ts.map +1 -1
- package/dist/utils/conflictResolutionPane.js +8 -4
- package/dist/utils/conflictResolutionPane.js.map +1 -1
- package/dist/utils/fileScanner.d.ts +23 -0
- package/dist/utils/fileScanner.d.ts.map +1 -0
- package/dist/utils/fileScanner.js +123 -0
- package/dist/utils/fileScanner.js.map +1 -0
- package/dist/utils/generated-agents-doc.d.ts +1 -1
- package/dist/utils/generated-agents-doc.js +1 -1
- package/dist/utils/hooks.d.ts.map +1 -1
- package/dist/utils/hooks.js +65 -36
- package/dist/utils/hooks.js.map +1 -1
- package/dist/utils/hooksDocs.d.ts +1 -1
- package/dist/utils/layoutManager.d.ts +45 -0
- package/dist/utils/layoutManager.d.ts.map +1 -0
- package/dist/utils/layoutManager.js +500 -0
- package/dist/utils/layoutManager.js.map +1 -0
- package/dist/utils/paneCreation.d.ts.map +1 -1
- package/dist/utils/paneCreation.js +125 -11
- package/dist/utils/paneCreation.js.map +1 -1
- package/dist/utils/popup.d.ts +97 -0
- package/dist/utils/popup.d.ts.map +1 -0
- package/dist/utils/popup.js +509 -0
- package/dist/utils/popup.js.map +1 -0
- package/dist/utils/postPaneCleanup.d.ts +12 -0
- package/dist/utils/postPaneCleanup.d.ts.map +1 -0
- package/dist/utils/postPaneCleanup.js +53 -0
- package/dist/utils/postPaneCleanup.js.map +1 -0
- package/dist/utils/shellPaneDetection.d.ts +44 -0
- package/dist/utils/shellPaneDetection.d.ts.map +1 -0
- package/dist/utils/shellPaneDetection.js +175 -0
- package/dist/utils/shellPaneDetection.js.map +1 -0
- package/dist/utils/tmux.d.ts +53 -1
- package/dist/utils/tmux.d.ts.map +1 -1
- package/dist/utils/tmux.js +352 -84
- package/dist/utils/tmux.js.map +1 -1
- package/dist/utils/welcomePane.d.ts +22 -0
- package/dist/utils/welcomePane.d.ts.map +1 -0
- package/dist/utils/welcomePane.js +119 -0
- package/dist/utils/welcomePane.js.map +1 -0
- package/dist/utils/welcomePaneManager.d.ts +36 -0
- package/dist/utils/welcomePaneManager.d.ts.map +1 -0
- package/dist/utils/welcomePaneManager.js +160 -0
- package/dist/utils/welcomePaneManager.js.map +1 -0
- package/dist/workers/PaneWorker.js +2 -0
- package/dist/workers/PaneWorker.js.map +1 -1
- package/package.json +5 -2
- package/dist/components/NewPaneDialog.d.ts +0 -9
- package/dist/components/NewPaneDialog.d.ts.map +0 -1
- package/dist/components/NewPaneDialog.js +0 -11
- package/dist/components/NewPaneDialog.js.map +0 -1
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell Pane Detection Utility
|
|
3
|
+
*
|
|
4
|
+
* Detects manually-created tmux panes and determines their shell type.
|
|
5
|
+
*/
|
|
6
|
+
import { execSync } from 'child_process';
|
|
7
|
+
import { LogService } from '../services/LogService.js';
|
|
8
|
+
/**
|
|
9
|
+
* Detects the shell type running in a tmux pane
|
|
10
|
+
* @param paneId The tmux pane ID (e.g., %1)
|
|
11
|
+
* @returns Shell type (bash, zsh, fish, etc) or 'shell' as fallback
|
|
12
|
+
*/
|
|
13
|
+
export function detectShellType(paneId) {
|
|
14
|
+
try {
|
|
15
|
+
// Get the command running in the pane
|
|
16
|
+
const command = execSync(`tmux display-message -t '${paneId}' -p '#{pane_current_command}'`, { encoding: 'utf-8', stdio: 'pipe' }).trim();
|
|
17
|
+
// Common shells
|
|
18
|
+
const knownShells = ['bash', 'zsh', 'fish', 'sh', 'ksh', 'tcsh', 'csh'];
|
|
19
|
+
// Check if it's a known shell
|
|
20
|
+
const lowerCommand = command.toLowerCase();
|
|
21
|
+
for (const shell of knownShells) {
|
|
22
|
+
if (lowerCommand === shell || lowerCommand.endsWith(`/${shell}`)) {
|
|
23
|
+
return shell;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// If running something else, still try to detect the parent shell
|
|
27
|
+
// This handles cases where a command is running in the shell
|
|
28
|
+
try {
|
|
29
|
+
const pid = execSync(`tmux display-message -t '${paneId}' -p '#{pane_pid}'`, { encoding: 'utf-8', stdio: 'pipe' }).trim();
|
|
30
|
+
// Get parent process
|
|
31
|
+
const ppid = execSync(`ps -o ppid= -p ${pid}`, {
|
|
32
|
+
encoding: 'utf-8',
|
|
33
|
+
stdio: 'pipe'
|
|
34
|
+
}).trim();
|
|
35
|
+
if (ppid) {
|
|
36
|
+
const parentCommand = execSync(`ps -o comm= -p ${ppid}`, {
|
|
37
|
+
encoding: 'utf-8',
|
|
38
|
+
stdio: 'pipe'
|
|
39
|
+
}).trim();
|
|
40
|
+
const lowerParent = parentCommand.toLowerCase();
|
|
41
|
+
for (const shell of knownShells) {
|
|
42
|
+
if (lowerParent === shell || lowerParent.endsWith(`/${shell}`)) {
|
|
43
|
+
return shell;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Ignore errors when trying to detect parent
|
|
50
|
+
}
|
|
51
|
+
// Fallback to generic 'shell'
|
|
52
|
+
return 'shell';
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
LogService.getInstance().debug(`Failed to detect shell type for pane ${paneId}`, 'shellDetection');
|
|
56
|
+
return 'shell';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Gets all untracked tmux panes (panes not in dmux config)
|
|
61
|
+
* @param sessionName The tmux session name
|
|
62
|
+
* @param trackedPaneIds Array of pane IDs already tracked by dmux
|
|
63
|
+
* @param controlPaneId Optional control pane ID to exclude
|
|
64
|
+
* @param welcomePaneId Optional welcome pane ID to exclude
|
|
65
|
+
* @returns Array of untracked pane information
|
|
66
|
+
*/
|
|
67
|
+
export function getUntrackedPanes(sessionName, trackedPaneIds, controlPaneId, welcomePaneId) {
|
|
68
|
+
try {
|
|
69
|
+
// Get all panes in the current session with ID, title, and current command
|
|
70
|
+
const output = execSync(`tmux list-panes -s -F '#{pane_id}::#{pane_title}::#{pane_current_command}'`, { encoding: 'utf-8', stdio: 'pipe' }).trim();
|
|
71
|
+
if (!output)
|
|
72
|
+
return [];
|
|
73
|
+
const untrackedPanes = [];
|
|
74
|
+
const lines = output.split('\n');
|
|
75
|
+
for (const line of lines) {
|
|
76
|
+
const [paneId, title, command] = line.split('::');
|
|
77
|
+
if (!paneId || !paneId.startsWith('%'))
|
|
78
|
+
continue;
|
|
79
|
+
// CRITICAL: Skip internal dmux panes by title
|
|
80
|
+
if (title === 'dmux-spacer') {
|
|
81
|
+
LogService.getInstance().debug(`Excluding spacer pane: ${paneId}`, 'shellDetection');
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (title && title.startsWith('dmux v')) {
|
|
85
|
+
LogService.getInstance().debug(`Excluding control pane by title: ${paneId} (${title})`, 'shellDetection');
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
if (title === 'Welcome') {
|
|
89
|
+
LogService.getInstance().debug(`Excluding welcome pane: ${paneId}`, 'shellDetection');
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
// CRITICAL: Skip control and welcome panes by ID (most reliable method)
|
|
93
|
+
if (controlPaneId && paneId === controlPaneId) {
|
|
94
|
+
LogService.getInstance().debug(`Excluding control pane by ID: ${paneId}`, 'shellDetection');
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (welcomePaneId && paneId === welcomePaneId) {
|
|
98
|
+
LogService.getInstance().debug(`Excluding welcome pane by ID: ${paneId}`, 'shellDetection');
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
// CRITICAL: Skip panes running dmux itself (node process running dmux)
|
|
102
|
+
if (command && (command === 'node' || command.includes('dmux'))) {
|
|
103
|
+
LogService.getInstance().debug(`Excluding dmux process pane: ${paneId} (command: ${command})`, 'shellDetection');
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
// Skip already tracked panes
|
|
107
|
+
if (trackedPaneIds.includes(paneId))
|
|
108
|
+
continue;
|
|
109
|
+
LogService.getInstance().debug(`Found untracked pane: ${paneId} (title: ${title}, command: ${command})`, 'shellDetection');
|
|
110
|
+
untrackedPanes.push({ paneId, title: title || '', command: command || '' });
|
|
111
|
+
}
|
|
112
|
+
return untrackedPanes;
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
LogService.getInstance().debug('Failed to get untracked panes', 'shellDetection');
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Creates a DmuxPane object for a shell pane
|
|
121
|
+
* @param paneId The tmux pane ID
|
|
122
|
+
* @param nextId The next available dmux ID number
|
|
123
|
+
* @param existingTitle Optional existing title to preserve
|
|
124
|
+
* @returns DmuxPane object for the shell pane
|
|
125
|
+
*/
|
|
126
|
+
export function createShellPane(paneId, nextId, existingTitle) {
|
|
127
|
+
const shellType = detectShellType(paneId);
|
|
128
|
+
// Use existing title if available and it's not a dmux internal title
|
|
129
|
+
// Otherwise generate shell-N naming
|
|
130
|
+
let slug;
|
|
131
|
+
if (existingTitle &&
|
|
132
|
+
existingTitle !== 'dmux-spacer' &&
|
|
133
|
+
!existingTitle.startsWith('dmux v') &&
|
|
134
|
+
existingTitle !== 'Welcome') {
|
|
135
|
+
slug = existingTitle;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
slug = `shell-${nextId}`;
|
|
139
|
+
// Only set the title if we're generating a new one
|
|
140
|
+
try {
|
|
141
|
+
execSync(`tmux select-pane -t '${paneId}' -T "${slug}"`, { stdio: 'pipe' });
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
LogService.getInstance().debug(`Failed to set title for shell pane ${paneId}`, 'shellDetection');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
id: `dmux-${nextId}`,
|
|
149
|
+
slug,
|
|
150
|
+
prompt: '', // No prompt for manually created panes
|
|
151
|
+
paneId,
|
|
152
|
+
type: 'shell',
|
|
153
|
+
shellType,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Gets the next available dmux ID number
|
|
158
|
+
* @param existingPanes Array of existing panes
|
|
159
|
+
* @returns Next available ID number
|
|
160
|
+
*/
|
|
161
|
+
export function getNextDmuxId(existingPanes) {
|
|
162
|
+
if (existingPanes.length === 0)
|
|
163
|
+
return 1;
|
|
164
|
+
// Extract numeric IDs from all panes
|
|
165
|
+
const ids = existingPanes
|
|
166
|
+
.map(p => {
|
|
167
|
+
const match = p.id.match(/^dmux-(\d+)$/);
|
|
168
|
+
return match ? parseInt(match[1], 10) : 0;
|
|
169
|
+
})
|
|
170
|
+
.filter(id => id > 0);
|
|
171
|
+
if (ids.length === 0)
|
|
172
|
+
return 1;
|
|
173
|
+
return Math.max(...ids) + 1;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=shellPaneDetection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shellPaneDetection.js","sourceRoot":"","sources":["../../src/utils/shellPaneDetection.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/tmux.d.ts
CHANGED
|
@@ -1,4 +1,56 @@
|
|
|
1
1
|
import type { PanePosition } from '../types.js';
|
|
2
|
+
export declare const SIDEBAR_WIDTH = 40;
|
|
3
|
+
export declare const MIN_COMFORTABLE_WIDTH = 60;
|
|
4
|
+
export declare const MAX_COMFORTABLE_WIDTH = 100;
|
|
5
|
+
export declare const MIN_COMFORTABLE_HEIGHT = 15;
|
|
6
|
+
export interface WindowDimensions {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Gets current window dimensions
|
|
12
|
+
*/
|
|
13
|
+
export declare const getWindowDimensions: () => WindowDimensions;
|
|
14
|
+
/**
|
|
15
|
+
* Gets current terminal (client) dimensions
|
|
16
|
+
* This is the actual terminal size, not the tmux window size
|
|
17
|
+
*/
|
|
18
|
+
export declare const getTerminalDimensions: () => WindowDimensions;
|
|
2
19
|
export declare const getPanePositions: () => PanePosition[];
|
|
3
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Gets all pane IDs in current window
|
|
22
|
+
*/
|
|
23
|
+
export declare const getAllPaneIds: () => string[];
|
|
24
|
+
/**
|
|
25
|
+
* Gets content pane IDs (excludes control pane and spacer pane)
|
|
26
|
+
*/
|
|
27
|
+
export declare const getContentPaneIds: (controlPaneId: string) => string[];
|
|
28
|
+
/**
|
|
29
|
+
* Creates initial sidebar layout by splitting from control pane
|
|
30
|
+
* @param controlPaneId The pane ID running dmux TUI (left sidebar)
|
|
31
|
+
* @returns The newly created content area pane ID
|
|
32
|
+
*/
|
|
33
|
+
export declare const setupSidebarLayout: (controlPaneId: string) => string;
|
|
34
|
+
/**
|
|
35
|
+
* Generates a custom tmux layout string for [Sidebar | Grid] arrangement
|
|
36
|
+
* Format: checksum,WxH,X,Y{child1,child2,...}
|
|
37
|
+
* Each child: WxH,X,Y[pane_id] for leaf or WxH,X,Y{...} for container
|
|
38
|
+
*/
|
|
39
|
+
export declare const generateSidebarGridLayout: (controlPaneId: string, contentPanes: string[], sidebarWidth: number, windowWidth: number, windowHeight: number, columns: number, maxComfortableWidth?: number) => string;
|
|
40
|
+
/**
|
|
41
|
+
* Calculates optimal number of columns for pane layout based on dimensions
|
|
42
|
+
* @param numPanes Number of panes to arrange
|
|
43
|
+
* @param contentWidth Available width for content panes
|
|
44
|
+
* @param contentHeight Available height for content panes
|
|
45
|
+
* @returns Optimal number of columns
|
|
46
|
+
*/
|
|
47
|
+
export declare const calculateOptimalColumns: (numPanes: number, contentWidth: number, contentHeight: number) => number;
|
|
48
|
+
/**
|
|
49
|
+
* Enforces left sidebar layout: 40-char wide sidebar on left, content panes in grid on right
|
|
50
|
+
* This maintains the structure: [Sidebar (40 chars, full height) | Content Grid Area]
|
|
51
|
+
*
|
|
52
|
+
* @deprecated This function now delegates to the centralized layout manager.
|
|
53
|
+
* Consider using recalculateAndApplyLayout() directly from layoutManager.ts
|
|
54
|
+
*/
|
|
55
|
+
export declare const enforceControlPaneSize: (controlPaneId: string, width: number) => void;
|
|
4
56
|
//# sourceMappingURL=tmux.d.ts.map
|
package/dist/utils/tmux.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux.d.ts","sourceRoot":"","sources":["../../src/utils/tmux.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tmux.d.ts","sourceRoot":"","sources":["../../src/utils/tmux.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAmBzC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAO,gBAYtC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAAO,gBAYxC,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,YAAY,EAoB/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,MAAM,EAWtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,eAAe,MAAM,KAAG,MAAM,EAgB/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,eAAe,MAAM,KAAG,MAqB1D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GACpC,eAAe,MAAM,EACrB,cAAc,MAAM,EAAE,EACtB,cAAc,MAAM,EACpB,aAAa,MAAM,EACnB,cAAc,MAAM,EACpB,SAAS,MAAM,EACf,sBAAqB,MAA8B,KAClD,MA4LF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,UAAU,MAAM,EAChB,cAAc,MAAM,EACpB,eAAe,MAAM,KACpB,MA+CF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GACjC,eAAe,MAAM,EACrB,OAAO,MAAM,KACZ,IAiEF,CAAC"}
|