Link terminal file paths to workspace previews (#1174)

This commit is contained in:
Mohamed Boudra
2026-05-25 19:12:43 +08:00
committed by GitHub
parent 1e68283565
commit e40ad0c00e
12 changed files with 1098 additions and 7 deletions
@@ -65,6 +65,9 @@ vi.mock("@xterm/xterm", () => ({
terminalConstructorOptions.values.push(options);
}
loadAddon(): void {}
registerLinkProvider(): { dispose: () => void } {
return { dispose: () => undefined };
}
open(): void {}
onData(): { dispose: () => void } {
return { dispose: () => undefined };
@@ -23,6 +23,11 @@ import {
shouldInterceptDomTerminalKey,
} from "@/utils/terminal-keys";
import { renderTerminalSnapshotToAnsi } from "./terminal-snapshot";
import {
createTerminalLocalFileLinkProvider,
type TerminalLocalFileLinkSource,
type TerminalLocalFileLinkTarget,
} from "../local-links/terminal-local-link-provider";
export type TerminalOutputData = Uint8Array;
@@ -46,6 +51,13 @@ export interface TerminalEmulatorRuntimeCallbacks {
}) => Promise<void> | void;
onPendingModifiersConsumed?: () => Promise<void> | void;
onOpenExternalUrl?: (url: string) => Promise<void> | void;
onResolveLocalFileLink?: (
source: TerminalLocalFileLinkSource,
) => Promise<TerminalLocalFileLinkTarget | null> | TerminalLocalFileLinkTarget | null;
onOpenLocalFileLink?: (
target: TerminalLocalFileLinkTarget,
disposition: "main" | "side",
) => Promise<void> | void;
onInputModeChange?: (state: TerminalInputModeState) => Promise<void> | void;
}
@@ -221,6 +233,17 @@ export class TerminalEmulatorRuntime {
void this.callbacks.onOpenExternalUrl?.(uri);
}),
);
const localFileLinkProvider = terminal.registerLinkProvider(
createTerminalLocalFileLinkProvider(terminal, {
resolveLink: async (source) => {
const target = await this.callbacks.onResolveLocalFileLink?.(source);
return target ?? null;
},
openLink: (target, disposition) => {
void this.callbacks.onOpenLocalFileLink?.(target, disposition);
},
}),
);
terminal.loadAddon(new SearchAddon({ highlightLimit: 20_000 }));
terminal.loadAddon(new ClipboardAddon());
try {
@@ -524,6 +547,7 @@ export class TerminalEmulatorRuntime {
disposeImageAddon();
},
disposeTerminal: () => {
localFileLinkProvider.dispose();
terminal.dispose();
},
};