fix: terminal left shift and instance naming scheme
- Debounce terminal ResizeObserver (100ms) and only send resize when cols/rows actually change - Send initial resize on WebSocket connect/reconnect to prevent PTY default 80x24 shift - Replace random hex instance names with sequential project-tool-NNN naming - Add _sanitize_name() and _generate_instance_name() helpers for readable Docker names
This commit is contained in:
@@ -177,15 +177,28 @@ export const TerminalComponent: React.FC<TerminalProps> = ({
|
||||
});
|
||||
|
||||
// Resize observer for container-level resize detection
|
||||
let resizeTimeout: ReturnType<typeof setTimeout> | null = null;
|
||||
const resizeObserver = new ResizeObserver(() => {
|
||||
fitAddon.fit();
|
||||
const { cols, rows } = term;
|
||||
sendResize(cols, rows);
|
||||
if (resizeTimeout) {
|
||||
clearTimeout(resizeTimeout);
|
||||
}
|
||||
resizeTimeout = setTimeout(() => {
|
||||
resizeTimeout = null;
|
||||
const prevCols = term.cols;
|
||||
const prevRows = term.rows;
|
||||
fitAddon.fit();
|
||||
if (term.cols !== prevCols || term.rows !== prevRows) {
|
||||
sendResize(term.cols, term.rows);
|
||||
}
|
||||
}, 100);
|
||||
});
|
||||
resizeObserver.observe(terminalRef.current);
|
||||
resizeObserverRef.current = resizeObserver;
|
||||
|
||||
return () => {
|
||||
if (resizeTimeout) {
|
||||
clearTimeout(resizeTimeout);
|
||||
}
|
||||
disposable.dispose();
|
||||
resizeObserver.disconnect();
|
||||
term.dispose();
|
||||
@@ -195,6 +208,14 @@ export const TerminalComponent: React.FC<TerminalProps> = ({
|
||||
};
|
||||
}, [instanceId, isDarkMode, sendInput, sendResize]);
|
||||
|
||||
// Send initial terminal size once connected (and on reconnect)
|
||||
useEffect(() => {
|
||||
if (state.status === "connected" && xtermRef.current) {
|
||||
const { cols, rows } = xtermRef.current;
|
||||
sendResize(cols, rows);
|
||||
}
|
||||
}, [state.status, sendResize]);
|
||||
|
||||
return (
|
||||
<div className="terminal-wrapper">
|
||||
<div className="terminal-header">
|
||||
|
||||
Reference in New Issue
Block a user