[Init] Initial commit - NetMesh terminal manager
Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
This commit is contained in:
86
components/terminal/runtime/serialLineInput.ts
Normal file
86
components/terminal/runtime/serialLineInput.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
type StringRef = {
|
||||
current: string;
|
||||
};
|
||||
|
||||
type SerialLineModeInputOptions = {
|
||||
bufferRef: StringRef;
|
||||
localEcho?: boolean;
|
||||
writeToSession: (data: string) => void;
|
||||
writeToTerminal: (data: string) => void;
|
||||
};
|
||||
|
||||
const submitLine = ({
|
||||
bufferRef,
|
||||
localEcho,
|
||||
writeToSession,
|
||||
writeToTerminal,
|
||||
}: SerialLineModeInputOptions) => {
|
||||
const line = `${bufferRef.current}\r`;
|
||||
writeToSession(line);
|
||||
bufferRef.current = "";
|
||||
if (localEcho) writeToTerminal("\r\n");
|
||||
};
|
||||
|
||||
const appendText = (
|
||||
text: string,
|
||||
{ bufferRef, localEcho, writeToTerminal }: SerialLineModeInputOptions,
|
||||
) => {
|
||||
if (!text) return;
|
||||
bufferRef.current += text;
|
||||
if (localEcho) writeToTerminal(text);
|
||||
};
|
||||
|
||||
const clearLine = ({
|
||||
bufferRef,
|
||||
localEcho,
|
||||
writeToTerminal,
|
||||
}: SerialLineModeInputOptions) => {
|
||||
if (localEcho && bufferRef.current.length > 0) {
|
||||
writeToTerminal("\b \b".repeat(bufferRef.current.length));
|
||||
}
|
||||
bufferRef.current = "";
|
||||
};
|
||||
|
||||
export function handleSerialLineModeInput(
|
||||
data: string,
|
||||
options: SerialLineModeInputOptions,
|
||||
): void {
|
||||
if (data === "\r" || data === "\n") {
|
||||
submitLine(options);
|
||||
return;
|
||||
}
|
||||
|
||||
if (data === "\x7f" || data === "\b") {
|
||||
if (options.bufferRef.current.length > 0) {
|
||||
options.bufferRef.current = options.bufferRef.current.slice(0, -1);
|
||||
if (options.localEcho) options.writeToTerminal("\b \b");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (data === "\x03") {
|
||||
options.bufferRef.current = "";
|
||||
options.writeToSession(data);
|
||||
if (options.localEcho) options.writeToTerminal("^C\r\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (data === "\x15") {
|
||||
clearLine(options);
|
||||
return;
|
||||
}
|
||||
|
||||
const normalizedData = data.replace(/\r\n/g, "\r").replace(/\n/g, "\r");
|
||||
if (normalizedData.includes("\r")) {
|
||||
const parts = normalizedData.split("\r");
|
||||
parts.forEach((part, index) => {
|
||||
appendText(part, options);
|
||||
if (index < parts.length - 1) submitLine(options);
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (data.charCodeAt(0) >= 32 || data.length > 1) {
|
||||
appendText(data, options);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user